你好,歡迎來到川北在線
微信
騰訊微博
新浪微博
預(yù)防為先!游戲開發(fā)中防外掛的那些事兒
時間:2017-06-27 11:49   來源:GameRes   責(zé)任編輯:毛青青

  對于一個要上線的游戲,防外掛是必須的,歷史上因?yàn)橥鈷於斐纱罅客婕伊魇У挠螒驍?shù)不勝數(shù)。隨著游戲研發(fā)技術(shù)的發(fā)展,對外掛的預(yù)防業(yè)內(nèi)其實(shí)做的已經(jīng)越來越好了。下面總結(jié)一下防外掛的基礎(chǔ)知識,以及我們的移動模塊為防外掛做了哪些工作。

  1、預(yù)防外掛的基礎(chǔ)知識

  在做外掛預(yù)防工作之前,我們要先了解外掛有哪些。根據(jù)我的了解,市面上常見的外掛主要有以下幾種:

  · 修改客戶端的內(nèi)存信息

  這類外掛通過分析游戲所使用的內(nèi)存,找到內(nèi)存中的變量去分析猜測變量是代表的什么含義。由于客戶端本身保存著很多游戲信息,比如技能cd、移動速度等。由于我們游戲技能的管理和發(fā)起是由客戶端控制的,若外掛能去把技能cd改為了0,客戶端就可以無限放此技能。

  常見外掛工具:葫蘆俠、八門神器

  · 加速齒輪

  加速齒輪可以加速某一個進(jìn)程的時間流逝速度,通過加速齒輪,可以讓游戲客戶端進(jìn)程的時間加速N倍。真實(shí)時間可能只過了1s,而客戶端進(jìn)程的時間已經(jīng)過了Ns。通過加速齒輪,可以讓人物移動速度加快、技能cd加速等。

  常見外掛工具:加速齒輪

  · 重發(fā)、篡改同步消息

  此類外掛可以截獲客戶端發(fā)送給服務(wù)器的消息,然后進(jìn)行篡改或者重發(fā)。比如可以截獲一個釋放技能消息,然后再無限重發(fā)給服務(wù)器,服務(wù)器若沒有驗(yàn)證,就會無限執(zhí)行技能。

  常見外掛工具:WPE三件套(eg+wpe+ccp)

  · 腳本自動模擬點(diǎn)擊

  這類外掛對游戲破壞相對較小,但是也最常見。這種外掛比較普遍,對游戲的影響主要是看游戲機(jī)制。比如我一個哥們弄了20多臺手機(jī),用按鍵精靈刷傳奇世界手游的金幣,然后賣給其他玩家。但是對于不能自由交易的游戲,就不會出現(xiàn)這種問題,最多是導(dǎo)致玩家自己使用,從而可以24小時在線,縮短了游戲壽命。

  常見外掛工具:按鍵精靈(我感覺這東西都已經(jīng)產(chǎn)生了一條產(chǎn)業(yè)鏈...

  防外掛是一個系統(tǒng)工程,需要不同的模塊配合實(shí)現(xiàn)。而且,對于不同的游戲?qū)ν鈷斓念A(yù)防要求也是不同的,具體游戲需要具體分析。

  常見的外掛預(yù)防手段有以下幾種:

  · 進(jìn)程檢測

  游戲開始時檢測手機(jī)正在執(zhí)行的進(jìn)程,若發(fā)現(xiàn)某個進(jìn)程在黑名單上,則不能進(jìn)入游戲。這種方式可以預(yù)防市面上常見的外掛,對于不常見的或者新開發(fā)的外掛則束手無策。若游戲不火沒人玩,這個手段就夠了。希望大家都能遇到針對自己游戲?qū)iT開發(fā)的外掛,哈哈。

  · 行為統(tǒng)計分析

  把玩家的行為(常常是點(diǎn)擊行為)記錄下來并進(jìn)行分析。這種方式可以輔助檢測玩家是否使用按鍵精靈這種工具。

  · 內(nèi)存、通信加密

  之前介紹了外掛可能修改內(nèi)存或者篡改同步消息以達(dá)到他們的目的,若我們對客戶端的內(nèi)存信息和通信信息加密,外掛拿到了信息也不能分析,從而也就無從下手了。

  · 舉報

  moba游戲或者fps這種對抗性的游戲中,玩家使用外掛對手能明顯感知到。對于這種游戲,舉報機(jī)制是一個很有用的防外掛手段。

  · 驗(yàn)證碼

  夢幻就有這個模式。

  以上介紹的通用方法并不能解決所有的外掛問題,因此我們在游戲的邏輯實(shí)現(xiàn)過程中要需要做對應(yīng)的防外掛機(jī)制。

  在游戲邏輯實(shí)現(xiàn)中進(jìn)行防外掛的基本方法是:

  · 服務(wù)端保存驗(yàn)證信息

  · 收到客戶端發(fā)來的消息后,對消息的合法性進(jìn)行驗(yàn)算。

  在具體的游戲執(zhí)行邏輯中增加防外掛機(jī)制的時候需要秉持一些原則:

  · 保證外掛收益不抵支出

  這個有兩層含義,一層含義是要讓外掛使用者無法獲得收益;另一層含義是,若外掛使用者只能通過非常麻煩復(fù)雜的工作才獲得一些小小收益,那么這種情況我們可以放過,也就是說不需要對所有的情況都需要增加防外掛邏輯。

  · 不影響游戲性能

  在增加防外掛邏輯的時候,需要考慮為了防外掛增加的性能開銷。若因?yàn)榉劳鈷煸黾恿司薮蟮男阅荛_銷,那么往往是不值得的。這種情況可以考慮不要在邏輯里面放外掛,而且是通過其他方式。

  · 區(qū)分什么是不可信的,什么是可信的。

 ∩信的不需要驗(yàn)證,不可信的選擇性驗(yàn)證。在我們游戲里面,所有客戶端發(fā)送的消息都認(rèn)為是不可信的,所有服務(wù)端發(fā)起的調(diào)用都是可信的。比如在下面介紹的移動模塊防外掛機(jī)制,當(dāng)服務(wù)端的其他模塊比如機(jī)關(guān)模塊通知我的移動模塊瞬移,這種情況我不考慮機(jī)關(guān)模塊是否可能是被外掛操作了,我認(rèn)為都是可信的。當(dāng)然這個機(jī)關(guān)可能是被客戶端操作,那么這時候客戶端是不是用了外掛應(yīng)該是由機(jī)關(guān)模塊來判斷和驗(yàn)證。

  下文以玩家在客戶端操作自己的單位移動為例,介紹移動模塊為了防外掛做了什么工作。

  之前寫過技能模塊的防外掛內(nèi)容,大家可以閱讀 《技能模塊的防外掛機(jī)制和同步機(jī)制優(yōu)化》

  2、移動模塊如何防外掛

  我們游戲的移動同步邏輯的基本原理是:單位在主控端(玩家自己的客戶端)根據(jù)玩家輸入執(zhí)行移動邏輯,然后將位置點(diǎn)以及時間信息以一定的頻率發(fā)送給從端,服務(wù)端以及其他客戶端根據(jù)主控端發(fā)來的移動同步信息模擬、預(yù)測、糾正單位的位置。

  基于以上同步機(jī)制,移動模塊需要考慮三種外掛情況:

  主控客戶端偽造或篡改瞬移消息。

  主控客戶端修改本地內(nèi)存中的移動速度。

  主控客戶端使用加速器。

  2.1防止客戶端發(fā)送非法瞬移消息

  由于我們游戲所有的移動都是在主控客戶端發(fā)起和執(zhí)行,然后服務(wù)端跟隨,所以瞬移也是客戶端先執(zhí)行,然后通知服務(wù)端。

  為了保證客戶端不能發(fā)送非法瞬移消息,我們將瞬移流程定義為:由服務(wù)端發(fā)起、客戶端執(zhí)行、服務(wù)端再驗(yàn)證。

  瞬移邏輯如下圖所示:

  服務(wù)端發(fā)起瞬移,但是并不將單位移動到對應(yīng)位置,而是將瞬移信息發(fā)送給客戶端。

 ⊥戶端收到位移信息后,將單位移動到對應(yīng)位置。

 ⊥戶端發(fā)送一個瞬移消息給服務(wù)端,服務(wù)端收到后,將單位移動到對應(yīng)位置。

  基于以上瞬移流程,可以比較簡單的實(shí)現(xiàn)瞬移防外掛功能。

  服務(wù)端發(fā)送瞬移信息給客戶端時,記錄下來瞬移目標(biāo)的位置。

  服務(wù)端收到客戶端的瞬移消息,進(jìn)行以下驗(yàn)證:

  若服務(wù)端沒有發(fā)送瞬移消息給客戶端,則瞬移非法。

  若收到的瞬移位置與記錄的瞬移位置不同,則瞬移非法。

  基于以上流程,可以保證瞬移雖然是客戶端執(zhí)行的,但是仍然由服務(wù)端發(fā)起和驗(yàn)證。

  2.2 檢測不合理的移動速度

  對于移動邏輯,還需要防止一種外掛:改內(nèi)存中的移動速度。

  對于這種外掛的預(yù)防,一般有兩種:

  在客戶端通過一定的加密手段使玩家無法找到移動速度,從而無法改變。

  服務(wù)端驗(yàn)證。我們使用的是服務(wù)端驗(yàn)證的方式。

  服務(wù)端驗(yàn)證的基本原理:

  當(dāng)客戶端發(fā)來一個移動消息時,服務(wù)端根據(jù)此條消息和上一條消息可以計算出來兩消息之間的移動速度,然后根據(jù)服務(wù)端信息可獲得對應(yīng)時間的服務(wù)器認(rèn)為可以達(dá)到的 速度,比較后即可以驗(yàn)證。

  其中服務(wù)端如何獲得對應(yīng)時間的允許 速度是其中的難點(diǎn)。剛開始,我們使用的方式是記錄每次移動速度改變的時間和速度值,當(dāng)收到客戶端消息時,根據(jù)客戶端發(fā)送消息的時間去查該時間對應(yīng)的速度值。

  但這里有一個問題:當(dāng)一個擊飛事件移動速度改為300,擊飛事件結(jié)束前又來了一個普通移動事件速度改為40,其實(shí)這時的移動速度其實(shí)是300,但根據(jù)我們的算法計算出來的是40.

  因此,我們實(shí)現(xiàn)了一套基于改變移動速度事件的移動速度驗(yàn)證機(jī)制。我們并不記錄速度改變得值,而是記錄速度改變事件的開始&結(jié)束時間和速度值,因此每次需要計算某時間對應(yīng)的速度時,根據(jù)速度改變事件的信息可以計算出準(zhǔn)確的值。

  2.3 檢測加速器

  游戲外掛最常見的就是加速器,在我們的游戲移動機(jī)制中,加速器可以讓客戶端的單位移動速度變快,而我們是將客戶端單位位置同步給服務(wù)端,若服務(wù)端沒有任何驗(yàn)證,則服務(wù)端就會跟隨客戶端位置,加速器外掛就會生效。

  加速器外掛的原理是加快的客戶端的時間流逝,因此,最簡單的方式是當(dāng)服務(wù)端收到同步消息時,從同步消息中拿出來客戶端發(fā)送消息的時間,若客戶端發(fā)送時間大于服務(wù)端當(dāng)前時間(會加一個閾值),則認(rèn)為是使用外掛。

  游戲中有時間校準(zhǔn)機(jī)制,當(dāng)玩家短線重連時,客戶端和服務(wù)端會重現(xiàn)校準(zhǔn)時間,而校準(zhǔn)后的時間由于網(wǎng)絡(luò)延遲和網(wǎng)絡(luò)波動問題,可能出現(xiàn)各種情況,包括客戶端時間快于服務(wù)器時間。對于這種情況,會造成誤判。

  為了解決這個問題,我分析了加速器的特點(diǎn)。加速器會導(dǎo)致客戶端時間持續(xù)不斷的加快,并和服務(wù)器的差距越來越大。因此,我們使用以下驗(yàn)證機(jī)制,基本可以避免誤判:

  若客戶端時間>服務(wù)端時間+[閾值],則[閾值] += (客戶端時間-服務(wù)端時間)

  第1步重復(fù)n次,n是我們給客戶端出現(xiàn)異常的機(jī)會次數(shù),我們游戲n=2。

  若客戶端時間>服務(wù)端時間+[閾值],則認(rèn)為客戶端是外掛。

  通過這種方式,我們給客戶端一次或者多次機(jī)會,對于加速外掛,它會導(dǎo)致客戶端時間持續(xù)加速,最終使用掉所有的機(jī)會。而由于網(wǎng)絡(luò)波動導(dǎo)致的客戶端校準(zhǔn)后的時間快于服務(wù)端時間的情況,不太會使用掉所有的機(jī)會。

  當(dāng)然,這種監(jiān)測方案理論上仍然存在誤判。但因?yàn)槊看吻袚Q嘲都會重置,當(dāng)n=2時,經(jīng)測試分析出現(xiàn)的誤判情況極少。

  若把n改成更大,會導(dǎo)致玩家進(jìn)入一個新嘲后,若加速倍率比較小,比如加速0.1倍,可以使用較長一段時間的加速外掛。

  因此n的選擇和初始閾值的選擇都是一個權(quán)衡。

  附:運(yùn)維log可以檢測加速器外掛的使用,但log更多的是檢查,而不是預(yù)防。我們這里實(shí)現(xiàn)的是預(yù)防,保證玩家無法使用加速器獲得任何收益。

   投稿郵箱:chuanbeiol@163.com   詳情請?jiān)L問川北在線:http://dstuf.com/

川北在線-川北全搜索版權(quán)與免責(zé)聲明
①凡注明"來源:XXX(非在線)"的作品,均轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點(diǎn)和對其真實(shí)性負(fù)責(zé),本網(wǎng)不承擔(dān)此類稿件侵權(quán)行為的連帶責(zé)任。
②本站所載之信息僅為網(wǎng)民提供參考之用,不構(gòu)成任何投資建議,文章觀點(diǎn)不代表本站立場,其真實(shí)性由作者或稿源方負(fù)責(zé),本站信息接受廣大網(wǎng)民的監(jiān)督、投訴、批評。
③本站轉(zhuǎn)載純粹出于為網(wǎng)民傳遞更多信息之目的,本站不原創(chuàng)、不存儲視頻,所有視頻均分享自其他視頻分享網(wǎng)站,如涉及到您的版權(quán)問題,請與本網(wǎng)聯(lián)系,我站將及時進(jìn)行刪除處理。



圖庫
合作媒體
金寵物 綠植迷
法律顧問:ITLAW-莊毅雄律師