本站AI自動判斷提供您所需要的app下載:點我下載安裝,你懂的APP
本篇文章給大家談?wù)?a href="http://m.hljstys.com/t111113.html">手游變速齒輪輔助工具,以及手游變態(tài)魔域的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
文章詳情介紹:
為何你的游戲總是充滿不愉快,外掛到底是如何做到的
1.外掛起源外掛這個東西相信大家都不陌生,比如你剛剛回到家,累的不行,想打開電腦玩幾把游戲,結(jié)果,心態(tài)爆炸,各種自瞄鎖頭。透視。舉報了還沒用,這個就是其他的人將自己的快樂建立在你的基礎(chǔ)上,就大家聊聊那些反外掛的事
外掛這個事情要追溯到 2000 年。當(dāng)年星際爭霸的開全圖,CS 的透視、穿墻等,讓游戲完全失去公平競技性。當(dāng)時反外掛的概念也呼之欲出。而后隨著 PC 端網(wǎng)絡(luò)游戲的崛起,就很少要有人再去玩或者談起這些游戲,但是游戲外掛卻跟隨時代的腳步而不斷前進(jìn)。
2.外掛是如何工作的先說外掛的種類,大家都知道了,脫機掛(封包掛),內(nèi)存掛(調(diào)用游戲內(nèi)功能,篡改游戲數(shù)據(jù)),模擬掛(模擬鍵盤鼠標(biāo)代替人工操作)諸如此類
技術(shù)性分類:
1.脫機類外掛
在游戲開發(fā)過程中,每款游戲的客戶端與服務(wù)端都會有固定的通信格式,大部分游戲通信協(xié)議位于TCP層之上,自定義的數(shù)據(jù)結(jié)構(gòu),外掛開發(fā)者們稱此為封包。下面簡單列舉一個簡單的打斗封包,以方便說明脫機類外掛原理。
0000ABCD 0000DCBA 00001234 00001000
例如玩家1在與玩家2打斗過程中,發(fā)送到服務(wù)器這樣一個16字節(jié)的數(shù)據(jù)包,其中游戲開發(fā)者定義此數(shù)據(jù)包含義如下:
0000ABCD:玩家1的ID。
0000DCBA:玩家2的ID。
00001234:玩家1所使用的技能編號。
00001000:玩家1對玩家2造成的傷害,轉(zhuǎn)換為十進(jìn)制為:4096。
當(dāng)服務(wù)器接收到此數(shù)據(jù)包時,則會將玩家2的血量減少4096點,如果玩家血量減少后小于等于0,則判定為玩家2已經(jīng)陣亡。這時服務(wù)器會返回給玩家2的客戶端一個數(shù)據(jù)包,玩家2的客戶端則播放一個玩家2已經(jīng)死亡的動畫。
以上邏輯,其實存在著大量的漏洞,比如說,服務(wù)器應(yīng)該判定玩家上一次釋放00001234號技能是否在冷卻時間內(nèi),再比如說,服務(wù)器應(yīng)該判定玩家戰(zhàn)斗過程中所造成的傷害是否與其裝備、法力值、攻擊力、暴擊等相吻合,是否超過了游戲本身限制的最大傷害。類似這種漏洞,每一款游戲都會存在,只不過不會這么明顯。一些老游戲在這方面做的相對較弱,所以漏洞更多。
另外,在游戲開發(fā)過程中,數(shù)據(jù)通信的格式在游戲開發(fā)商的公司中都有相關(guān)文檔明確定義的。而這些文檔非常機密。一些游戲開發(fā)商公司的安全做的不夠好的情況下,可能會造成游戲代碼以及文檔的泄露。這些資料,一旦流入外掛開發(fā)者手中,那么這款游戲就極有可能會出現(xiàn)脫機式外掛。
脫機外掛定義:在不開啟游戲客戶端的情況下,第三方程序直接與游戲服務(wù)器進(jìn)行通信,模擬賬號登陸驗證、選擇角色、進(jìn)入游戲、進(jìn)入場景、開始戰(zhàn)斗、對怪物造成傷害等操作時的合法數(shù)據(jù)包,發(fā)送給服務(wù)器,而服務(wù)器是沒有能力判斷出這些包是否是客戶端發(fā)來的,即便有驗證手段,由于源碼已經(jīng)泄露,外掛開發(fā)者可以輕而易舉的模擬出服務(wù)端的各種驗證機制。即便數(shù)據(jù)包傳送過程中是加密的,由于源碼外漏,外掛開發(fā)者一樣可以正確模擬出數(shù)據(jù)包的加密方式。
2.模擬發(fā)包類外掛
脫機類外掛多半依賴于游戲開發(fā)商的資料外泄,而模擬發(fā)包類外掛與脫機類外掛很近似。原因是一些外掛開發(fā)者本身可能是游戲開發(fā)者出身,對游戲中的邏輯相當(dāng)了解,他們可以用調(diào)試+抓包分析的方法,在沒有源碼以及通信格式資料的情況下,分析出一些游戲中關(guān)鍵的數(shù)據(jù)包,并采用一定的模擬發(fā)包技術(shù),完成游戲中本身含有的功能。
此類外掛多半需要向游戲中注入一個dll文件,并且用dll獲取到與服務(wù)器通信的socket句柄,在此socket句柄上,將自己組織好的、合法的數(shù)據(jù)包發(fā)送到服務(wù)器。部分比較老的游戲中很常見此類的外掛,比如決戰(zhàn)OL中的掛機內(nèi)掛中的喊話功能,自動喝藥功能,都是模擬發(fā)包方式完成的。
3、內(nèi)存式外掛
在沒有游戲客戶端源碼,并且沒有一定的游戲開發(fā)經(jīng)驗的情況下,依然是可以進(jìn)行外掛開發(fā)的。而這些外掛開發(fā)者,一般熟練掌握操作系統(tǒng)的各種底層機制,如模塊、線程、內(nèi)存、內(nèi)核對象、內(nèi)核機制等技術(shù)。這些技術(shù),有助于他們?nèi)シ治鲇螒蚩蛻舳诉M(jìn)程中的邏輯和重要數(shù)據(jù),之后他們一般會注入dll到游戲進(jìn)程,去操作游戲進(jìn)程內(nèi)數(shù)據(jù),完成一些特殊功能。當(dāng)遇到一些改動,服務(wù)器恰好沒有校驗時,他們的外掛功能便成功執(zhí)行。
三、 游戲外掛的基本原理
對于單機游戲而言:游戲中絕大部分的參數(shù)(比如血、藍(lán)、能量亦或是金幣)都存儲在計算機的堆棧中,一些類似劇情進(jìn)度的則加密后寫入本地的自定義配置文件中;所以單機外掛原理是修改本地配置文件
對于頁游、網(wǎng)游和手游:游戲外掛通常是修改內(nèi)存數(shù)據(jù)、或者截獲網(wǎng)絡(luò)封包。
1、修改內(nèi)存數(shù)據(jù)的原理:服務(wù)器保存了大量的重要的參數(shù),但由于客戶端不可避免的需要進(jìn)行大量的計算和資源的加載,本地內(nèi)存種必定存有部分的臨時變量,通過判斷這些變量的變化規(guī)律和函數(shù)的破密尋到利于自身的參數(shù),比如傷害值一類,繼而尋找該變量的內(nèi)存地址,根據(jù)指針偏移分析獲得內(nèi)存基址,再提升權(quán)限利用Windows API把自定義數(shù)值寫入該內(nèi)存塊,就完成了修改某項數(shù)值的操作,一般來說,只要破解了一項數(shù)值,利用規(guī)律繼而破解其他數(shù)值就更加容易了。
2、截獲網(wǎng)絡(luò)封包的基本原理:Internet客戶/服務(wù)器模式的通訊一般采用TCP/IP通信協(xié)議,數(shù)據(jù)交換是通過IP數(shù)據(jù)包的傳輸來實現(xiàn)的,一般來說客戶端向服務(wù)器發(fā)出某些請求,比如移動、戰(zhàn)斗等指令都是通過封包的形式和服務(wù)器交換數(shù)據(jù)。那么我們把本地發(fā)出消息稱為SEND,意思就是發(fā)送數(shù)據(jù),服務(wù)器收到我們SEND的消息后,會按照既定的程序把有關(guān)的信息反饋給客戶端,比如,移動的坐標(biāo),戰(zhàn)斗的類型。把客戶端收到服務(wù)器發(fā)來的有關(guān)消息稱為RECV。接下來要做的工作就是分析客戶端和服務(wù)器之間往來的數(shù)據(jù)(也就是封包),這樣就可以提取到對我們有用的數(shù)據(jù)進(jìn)行修改,然后模擬服務(wù)器發(fā)給客戶端,或者模擬客戶端發(fā)送給服務(wù)器,這樣就可以實現(xiàn)修改游戲的目的。
什么是封包1.1 封包的概念 本文所講的封包是指由sockets協(xié)議進(jìn)行發(fā)送與接收的數(shù)據(jù)包。廣義的封包是指計算機之間互相進(jìn)行通信的數(shù)據(jù)包,其可以因通信協(xié)議的不同而在內(nèi)容上有所不同。1.2 破解原理 目前破解封包加密與解密算法的方法主要是通過動態(tài)調(diào)試技術(shù)來實現(xiàn)的。其原理是首先通過動態(tài)調(diào)試跟蹤并取出加密與解密算法的代碼段,然后再通過分析這些代碼最終得出結(jié)論。
內(nèi)存掛再說內(nèi)存掛,內(nèi)存掛主要是對游戲數(shù)據(jù)進(jìn)行驗證,比如傷害,移動速度,血量等等,打個比方,就說以前很流行的變速齒輪(CE類修改內(nèi)存),早些年游戲沒有驗證的時候幾乎是想要跑多快跑多快,現(xiàn)在都被和諧了,和諧的方式也非常簡單,計算人物速度,再取人物的一個坐標(biāo)到另一個坐標(biāo)距離,這其中有一定偏差,如果差距超過設(shè)定的額度那么就可以判定玩家在使用加速工具。傷害,血值,都類似,任何數(shù)據(jù)都有算法來計算是否超過了預(yù)期最大值。
游戲應(yīng)用1、 壓槍:壓槍技術(shù)很多方法可以實現(xiàn),但高精度的壓槍,就需要修改內(nèi)存或者網(wǎng)絡(luò)封包,首先獲得槍口偏移信息,然后通過鼠標(biāo)移動的虛擬指令,將準(zhǔn)星調(diào)到特定點。
2、透視:讀取內(nèi)存中的數(shù)據(jù)坐標(biāo),在屏幕上繪制出應(yīng)該對玩家隱藏的信息。在OBS推流時,如果選擇僅推流游戲,那么這類"信息"僅對直播者可見。
3、自動瞄頭:上兩者結(jié)合獲得,獲得玩家坐標(biāo),然后通過鼠標(biāo)移動指令完成瞄頭。
總結(jié):如果能完美無視槍口跳動時隨機的左右偏移量,那么基本可以認(rèn)為是讀取內(nèi)存的壓槍。對于透視的發(fā)現(xiàn)則難得多,但是不管裝的多像,最終目的肯定還是從這項功能收益。自動瞄頭最容易發(fā)現(xiàn)。
修改內(nèi)存/封包類:同時秒殺多人、瞬移、一拳超人、圈外不受傷害等
總結(jié):通過修改內(nèi)存和封包實現(xiàn)各種喪心病狂的功能,及其容易被封號,也很容易被看出來。
反外掛與外掛的對決1、對服務(wù)器上的數(shù)據(jù)庫進(jìn)行嚴(yán)格加密,并且每天自動更新隨機密碼,數(shù)據(jù)包經(jīng)常檢驗,而且效驗結(jié)果以服務(wù)器上為準(zhǔn);
2、對游戲客戶端進(jìn)行嚴(yán)格檢測,具體手段有:
(1)對關(guān)鍵api Hook進(jìn)行保護(hù),網(wǎng)絡(luò)相關(guān)send recv;
(2)dll注入檢測可能是hook loadlibrary,也有用定時檢測進(jìn)程模塊的(找到非法模塊就退出);
(3)對于用od進(jìn)行調(diào)試客戶端,還沒有完全有效的方法,一般就是加些花指令,加殼,這些方法對大量水平低的外掛作者已經(jīng)足夠了;
(4)很多游戲都會對PE、OD、按鍵精靈、簡單游等進(jìn)行檢測,主要是枚舉窗口名字,進(jìn)程名字,有這些名字的就封殺,但這種低級方法效果不大。
(5)按鍵類外掛檢測,對于后臺腳本主要是用GetCursor,GetForegroundWindow,檢測窗口位置和鼠標(biāo)位置是否正確,還有些是對WM_ACTIVE消息進(jìn)行處理(神武就是這么干),對于前臺腳本除了把鼠標(biāo)弄偏移外,也就沒有什么更好的辦法了,不過這個偏移對普通玩家也很不友好,也影響游戲公司留存玩家。
(6)對于有些人說檢測鼠標(biāo)點擊位置的重復(fù)度,這個多半是他們自己的猜想,這樣做很容易造成誤封。
外掛技術(shù)與游戲安全性分析抵御逆向分析
除了少數(shù)通用性外掛(如鍵盤模擬外掛、通用加速掛)外,絕大部分外掛在制作前均需動態(tài)調(diào)試和靜態(tài)分析游戲邏輯和數(shù)據(jù),找到關(guān)鍵邏輯和數(shù)據(jù)的位置,才能對游戲進(jìn)行修改,因此反調(diào)試和保護(hù)游戲邏輯是抵御游戲外掛產(chǎn)生的強有力的方式。
阻止外掛入侵
一旦游戲關(guān)鍵邏輯與數(shù)據(jù)被黑客分析完成,接下來黑客會通過編程對游戲客戶端進(jìn)行修改,修改游戲進(jìn)程常常通過一些系統(tǒng)函數(shù)如 ReadProcessMemory,WriteProcessMemroy ,或者通過向游戲進(jìn)程注入 dll 等方式修改游戲內(nèi)存,因此保護(hù)游戲內(nèi)存和惡意模塊掃描是進(jìn)一步防止外掛和被動檢查外掛的有效措施。
游戲反外掛先行一步
Virbox 反外掛系統(tǒng)針對游戲安全問題,采用靜態(tài)保護(hù)和動態(tài)保護(hù)相結(jié)合的方式,抵御和打擊外掛,為端游保駕護(hù)航,目前僅支持 Windows 系統(tǒng)。
靜態(tài)保護(hù)(Virbox Protector)
Virbox Protector 是深思自主研發(fā)的虛擬機外殼,用于保護(hù)游戲的代碼邏輯,強大的虛擬機保護(hù)以及為 Unity 游戲設(shè)計的獨特的 Unity3D 保護(hù),對游戲的逆向分析造成極大的阻礙,有效遏制外掛的產(chǎn)生。
什么熱門手游可以結(jié)婚以及什么手游游戲可以結(jié)婚 - 櫻花動漫
? 代碼邏輯保護(hù)
現(xiàn)代反編譯工具日益強大,即使是 C/C++ 這類靜態(tài)語言編譯后的程序,也能將代碼還原到與源代碼相差無幾。沒有代碼保護(hù),游戲客戶端的代碼邏輯暴露,很容易被黑客發(fā)現(xiàn)攻擊的位置,使外掛的編寫成本變得很低。
Virbox Protector 可以通過混淆、虛擬機、代碼加密等方式對游戲中指定的函數(shù)進(jìn)行保護(hù),保護(hù)后的代碼無法自動還原,黑客分析混淆和虛擬化的指令需要超過原先幾十上百倍的時間。對游戲客戶端的關(guān)鍵函數(shù)進(jìn)行保護(hù),每次客戶端更新,黑客都需要大量的時間重新分析被保護(hù)的代碼。
? 內(nèi)存校驗
絕大部分外掛的高級功能都采用"內(nèi)存補丁"的方式對游戲模塊進(jìn)行修改,Virbox Protector 帶有內(nèi)存校驗功能,能對游戲代碼進(jìn)行校驗,防止被打補丁。(該功能目前不支持 Unity3D 游戲)
Unity3D 保護(hù)
Unity 游戲采用 C# 編寫,相比于 C/C++ 開發(fā)的游戲,Unity 游戲更容易被黑客分析,使用 DnSpy、Reflector 等工具可以直接反編譯 Assembly-CSharp.dll 中的代碼,游戲代碼中的變量與函數(shù)名清晰可見。
Virbox Protector 對 Assembly-CSharp.dll 中的方法都進(jìn)行了加密,只有在該方法運行編譯為匯編代碼才解密,黑客無法通過 Dump 出原始代碼。
動態(tài)保護(hù)(Virbox 反外掛引擎)
Virbox 反外掛引擎是一款驅(qū)動級進(jìn)程保護(hù)系統(tǒng)。該系統(tǒng)結(jié)合了主動防御(反調(diào)試、內(nèi)存保護(hù)、反注入、Hook 檢測等)和被動防御(窗口檢測、內(nèi)存特征掃描等),動態(tài)地保護(hù)游戲進(jìn)程。Virbox 反外掛引擎的主要功能如下:
? 反調(diào)試
編寫外掛或者盜版補丁,首先要做的是使用調(diào)試器(如 OllyDbg、x64dbg、Windbg、 Cheating Engine 等)調(diào)試軟件進(jìn)程,分析關(guān)鍵代碼邏輯和數(shù)據(jù)。Virbox 反外掛引擎對所保護(hù)的進(jìn)程進(jìn)行調(diào)試檢測,并防止內(nèi)核調(diào)試器(如 WinDbg)調(diào)試 Virbox 反外掛引擎自身,使各種調(diào)試器失效,對逆向分析過程造成了極大阻礙。
? 內(nèi)存保護(hù)
黑客在分析軟件時,除了調(diào)試之外,還會通過內(nèi)存搜索(如使用 Cheating Engine)等方式定位關(guān)鍵數(shù)據(jù)的內(nèi)存,另一方面,大部分外掛或是盜版補丁會通過另外的進(jìn)程修改內(nèi)存,Virbox 反外掛引擎通過驅(qū)動級內(nèi)存保護(hù),防止其它進(jìn)程讀寫、修改被保護(hù)的進(jìn)程,保證了被保護(hù)進(jìn)程的安全。
? 反注入
修改進(jìn)程內(nèi)存,除了跨進(jìn)程的內(nèi)存訪問之外,還可以通過注入 Dll 或者 ShellCode 的方式進(jìn)行,Virbox 反外掛引擎通過內(nèi)存保護(hù)和監(jiān)控模塊加載的方式攔截了絕大部分注入方式,并配合內(nèi)存特征檢測功能,攔截非法模塊。
? 特征掃描
反外掛引擎可以檢測內(nèi)存特征、窗口特征、模塊特征、驅(qū)動特征(如 HideToolz, PCHunter, StrongOD 等)
安全問題一定要引起重視,反外掛本身就是一個伴隨游戲全生命周期的問題,你所碰到的問題也是其它游戲開發(fā)商碰到的問題,你先行一步,解決好反外掛的問題,可以領(lǐng)先其它開發(fā)商一大步。