幀同步(LockStep)該如何反外掛

在中國的游戲環(huán)境下芭梯,反掛已經(jīng)成為了游戲開發(fā)的重中之重,甚至能決定一款游戲的生死案怯,吃雞就是一個典型的案例。

目前參與了了一款動作射擊的MOBA類游戲的開發(fā)澎办,同步方案上選擇了幀同步技術(shù)(LockStep而非snapshots以下同)嘲碱。那么就有很多人擔(dān)心起來,客戶端會跑全部邏輯幀同步該如何反外掛局蚀,和狀態(tài)同步有什么區(qū)別呢麦锯?

首先我們來分析一下手游的風(fēng)險和外掛的分類,這里推薦騰訊游戲安全中心的文章琅绅,有著非常詳細(xì)深入的介紹扶欣。

手游的風(fēng)險:

????? 靜態(tài)修改文件:將游戲解包修改資源 ,配置,代碼等之后再重新打包

????????○ 修改資源料祠,例如替換游戲的貼圖做廣告骆捧,修改玩家碰撞資源 或刪除部分關(guān)鍵資源使玩家可以作弊等

????????○ 修改代碼,直接修改游戲代碼髓绽,實現(xiàn)無敵凑懂,免CD,無限傷害等等

????????○ 修改配置梧宫,修改策劃配表等

????? 動態(tài)篡改邏輯:通過注入和鉤子的方式接谨,在游戲運(yùn)行時修改游戲代碼,修改游戲內(nèi)存等

????????○ 修改代碼塘匣,運(yùn)行時注入進(jìn)程直接修改游戲代碼或者鉤住關(guān)鍵邏輯函數(shù)修改邏輯脓豪,實現(xiàn)無敵,免CD忌卤,無限傷害等等

????????○ 修改內(nèi)存扫夜,例如燒餅,葫蘆俠等修改器驰徊,在游戲運(yùn)行時修改堆棧和全局變量等

????? 游戲協(xié)議

????????○ 篡改游戲協(xié)議笤闯,直接修改協(xié)議的內(nèi)容,修改結(jié)算結(jié)果棍厂,修改傷害數(shù)值颗味,修改血量等等

????????○ 重復(fù)游戲協(xié)議,例如多次重復(fù)傷害協(xié)議

????? 其他牺弹,按鍵精靈浦马。腳本宏,盜號张漂,惡意發(fā)言晶默,打金工作室等,這些和同步技術(shù)無關(guān)航攒,暫不做詳細(xì)討論

外掛的分類 :

摘自騰訊游戲安全實驗室

從上文可以看出外掛的主要方式還是修改客戶端的資源磺陡,代碼,和內(nèi)存漠畜。因此反外掛的手段也不外乎以下幾種:

????? 服務(wù)器計算關(guān)鍵邏輯币他。例如一些MMO戰(zhàn)斗邏輯泡在服務(wù)端

????? 服務(wù)器驗證客戶端邏輯。包括通過完整戰(zhàn)斗邏輯驗證和數(shù)值范圍驗證盆驹,例如早期的酷跑(可能誤殺牛逼的玩家)

????? 包體加密加簽名加驗證圆丹,防止破解包體。例如一些第三方加固躯喇,Unity的MonoDll加密辫封,代碼混淆等

????? 加密本地保存的一些文件硝枉。例如對加密PlayerPrefs文件

????? 加密和擾動運(yùn)行時內(nèi)存中關(guān)鍵數(shù)據(jù)(例如血量數(shù)據(jù)等)。例如崩3等

????? 防注入檢測(殺死注入進(jìn)程或者發(fā)現(xiàn)注入之后殺死自己)

????? 虛擬機(jī)加密

????? 加速檢測倦微,防止修改本地時間的變速齒輪

????? 穿墻檢測妻味,客戶端對關(guān)鍵碰撞做校驗

????? 集成守護(hù)進(jìn)程以及守護(hù)進(jìn)程的自我加密更新

????? 鼠標(biāo)宏,按鍵精靈等進(jìn)程檢測欣福,防止玩家使用這些工具

????? 增加舉報系統(tǒng)查證封號

????? 通過暴力機(jī)關(guān)嚴(yán)厲打擊外掛制作者(個人感覺非常有效)

????? 其他

但很遺憾责球,因為理論上再牛逼的客戶端也是可以破解的,所以客戶端的東西都是不可信任的拓劝。就像市面上也有很多第三方的加固工具雏逾,反作弊插件等,但不管用什么eye郑临,什么火眼精睛栖博,該作弊的還是作弊。因此反外掛的核心還是在于是否服務(wù)器是否計算了關(guān)鍵邏輯厢洞,就像Unreal老大說的The Server Is The Man仇让。而和同步技術(shù)和客戶端是否跑完整邏輯關(guān)系不大(嚴(yán)格說是有一點關(guān)系)。不管是狀態(tài)同步還是幀同步躺翻,只要做到了服務(wù)器有完整邏輯并驗證丧叽,絕大部分外掛都可以防掉(例如鎖血掛,穿墻掛公你,加速掛等)踊淳。

對于狀態(tài)同步來說關(guān)鍵邏輯在服務(wù)器的比重越高反外掛就越完美。最極端的例子就是就是云游戲省店,服務(wù)器計算所有邏輯和畫面嚣崭,客戶端只是顯示圖像,基本上杜絕了所有其他外掛(除了按鍵精靈懦傍,鼠標(biāo)宏,手速掛等可以模擬玩家操作芦劣,捕捉像素計算操作粗俱,只能通過進(jìn)程檢測,舉報虚吟,法律打擊等其他方案)寸认。

而對于幀同步來說,我們同樣可以在服務(wù)器驗證完整的戰(zhàn)斗邏輯串慰。一般分為兩種:

????1. 實時驗證偏塞。例如戰(zhàn)斗實時運(yùn)行戰(zhàn)斗邏輯和客戶端不斷同步驗證關(guān)鍵數(shù)據(jù)的hash,和狀態(tài)同步類似邦鲫。但這種方案服務(wù)器負(fù)載較高灸叼,運(yùn)維成本高昂神汹;

????2. 離線驗證。這是幀同步的優(yōu)勢古今,戰(zhàn)斗結(jié)束后服務(wù)器收集整場的操作序列屁魏,然后加速播放戰(zhàn)斗(幾十上百倍),最后校驗結(jié)果捉腥,例如刀塔傳奇氓拼。這個好處是服務(wù)器不用實時跑戰(zhàn)斗,只需在結(jié)束時花幾百ms即可驗證一場戰(zhàn)斗抵碟,大幅降低服務(wù)器成本桃漾。

如果是這種驗證方式幀同步也一樣能防掉絕大部分外掛,但是會多一個弱點就是全圖掛拟逮。因為客戶端有了所有玩家的位置信息撬统,所以無法防掉全圖掛。

那么如果這么說唱歧,只要服務(wù)器跑邏輯就行了宪摧,為什么外掛還這么泛濫呢?其實因為種種原因很多游戲服務(wù)器并沒有完整的邏輯和校驗颅崩,對于絕大部分游戲使用狀態(tài)同步來說有以下一些原因:

????1. 性能問題几于。服務(wù)器運(yùn)行完整邏輯開銷很高(特別是一些復(fù)雜運(yùn)算,例如物理彈道等)沿后,因此將部分邏輯放在客戶端分布運(yùn)算

????2. 因為開發(fā)效率和開發(fā)能力的限制沿彭。例如開發(fā)技能,如果所有邏輯都在客戶端開發(fā)就會簡單很多尖滚,響應(yīng)也非常及時喉刘。如果要涉及服務(wù)器和客戶端同步,就會多很多工作量特別是一些位移技能漆弄,很多邏輯可能還要寫兩份(幀同步更高效更容易實現(xiàn)打擊感也是這個原因睦裳,很多動作游戲,MOBA游戲也會選擇幀同步)

????3. 經(jīng)驗問題撼唾。一些公司在反外掛上經(jīng)驗不足重視程度不夠廉邑,特別是國外游戲環(huán)境較好法律健全

????4. 為了極致的體驗。例如為了降低網(wǎng)絡(luò)延遲倒谷,很多游戲會讓客戶端預(yù)表現(xiàn)和加入延遲補(bǔ)償蛛蒙,在一定范圍內(nèi)信任客戶端(特別是FPS游戲,狀態(tài)同步在延遲感上有較優(yōu)勢)

????5. 為了弱網(wǎng)體驗渤愁。為了讓玩家在網(wǎng)絡(luò)極差甚至斷線的情況下也能玩牵祟,將絕大部分邏輯都放在客戶端

????6. 多種原因混合,其他一些個別問題抖格。

但是以上的問題對于幀同步來說不也一樣嗎诺苹?如果為了成本和快速開發(fā)咕晋,服務(wù)器不跑邏輯不也一樣抓瞎嗎?其實幀同步會更簡單一些筝尾。對幀同步來說有以下幾種情況:

????1.基于RelayServer多人PVP捡需。這種會相對簡單很多,因為每個客戶端都計算了完整邏輯筹淫,作弊玩家修改的只是本地數(shù)據(jù)無法影響其他玩家站辉,只能自嗨。最終結(jié)果服務(wù)器只要簡單的比較投票就可以找到作弊者损姜,除非作弊的玩家多余非作弊的玩家并且作弊玩家還要修改一樣的數(shù)據(jù)(有點比特幣算力的意思:)饰剥,另外也可以在游戲運(yùn)行時不斷生成關(guān)鍵數(shù)據(jù)的hash碼,隨時校驗摧阅;

????2.基于P2P的多人PVP汰蓉。和RS差不多但是無法防主機(jī)作弊了,參考魔獸爭霸棒卷,但網(wǎng)游基本不會使用顾孽;

????3.雙人PVP和單機(jī)。這就沒辦法了比规,只能服務(wù)器做校驗若厚;

綜上所述,因為天然的客戶端強(qiáng)一致性蜒什,總體來說幀同步在防外掛上甚至?xí)唵我恍▍⒖纪跽邩s耀)涝开。但成也蕭何敗也蕭何关拒,正因為這個機(jī)制的問題骑丸,無法完全防住全圖掛发魄,也因此甚至有MOBA游戲,同時使用兩種同步機(jī)制來保證線上賽和線下賽的公平和體驗钞瀑。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末沈撞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子雕什,更是在濱河造成了極大的恐慌关串,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件监徘,死亡現(xiàn)場離奇詭異,居然都是意外死亡吧碾,警方通過查閱死者的電腦和手機(jī)凰盔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來倦春,“玉大人户敬,你說我怎么就攤上這事落剪。” “怎么了尿庐?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵忠怖,是天一觀的道長。 經(jīng)常有香客問我抄瑟,道長凡泣,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任皮假,我火速辦了婚禮鞋拟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘惹资。我一直安慰自己贺纲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布褪测。 她就那樣靜靜地躺著猴誊,像睡著了一般。 火紅的嫁衣襯著肌膚如雪侮措。 梳的紋絲不亂的頭發(fā)上懈叹,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天,我揣著相機(jī)與錄音萝毛,去河邊找鬼项阴。 笑死,一個胖子當(dāng)著我的面吹牛笆包,可吹牛的內(nèi)容都是我干的环揽。 我是一名探鬼主播,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼庵佣,長吁一口氣:“原來是場噩夢啊……” “哼歉胶!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起巴粪,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤通今,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后肛根,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體辫塌,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年派哲,在試婚紗的時候發(fā)現(xiàn)自己被綠了臼氨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡芭届,死狀恐怖储矩,靈堂內(nèi)的尸體忽然破棺而出感耙,到底是詐尸還是另有隱情,我是刑警寧澤持隧,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布即硼,位于F島的核電站,受9級特大地震影響屡拨,放射性物質(zhì)發(fā)生泄漏只酥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一洁仗、第九天 我趴在偏房一處隱蔽的房頂上張望层皱。 院中可真熱鬧,春花似錦赠潦、人聲如沸叫胖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瓮增。三九已至,卻和暖如春哩俭,著一層夾襖步出監(jiān)牢的瞬間绷跑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工凡资, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留砸捏,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓隙赁,卻偏偏與公主長得像垦藏,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子伞访,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內(nèi)容