一、外掛的分類
外掛一般的分為2類,脫機式 和 內(nèi)掛式。
脫機式外掛的定義:完全脫離官方發(fā)布的客戶端程序,可以與游戲服務器自由的進行通訊的外掛程序,這類外掛的實現(xiàn)是2類外掛里最困難的,主要難點在于外掛制作者需要對游戲的通訊協(xié)議進行充分的分析,包括解決封包的加密解密問題,使得封包合法化,這樣游戲服務器才能接受并處理。
內(nèi)掛式外掛的定義:內(nèi)掛需要以官方發(fā)布的客戶端程序為載體,依靠客戶端程序來完成與游戲服務器的通訊,主要通過反匯編手段分析并修改客戶端代碼后實現(xiàn)功能,一般通過直接調(diào)用游戲客戶端的發(fā)包函數(shù)進行發(fā)包,或者調(diào)用游戲客戶端的封包加密解密函數(shù)自行處理發(fā)包收包。
二、制作外掛常用的技術手段
制作外掛一般使用的分析工具:
動態(tài)分析 OllyDbg(OllyICE)
靜態(tài)分析 IDA Pro
制作外掛一般使用的開發(fā)工具:
VisualStdio系列(VC++,VB)
Borland系列(Delphi,BCB,BC++)
中國人自己的開發(fā)工具(易語言)(編者注:此開發(fā)工具優(yōu)勢在于控件種類上,有專門的用于外掛制作的控件)
制作外掛的技術要點:
鼠標鍵盤模擬技術:這類技術在RING3層可通過調(diào)用WIN32 API實現(xiàn),在RING0層可通過驅動模擬鼠標鍵盤輸入來實現(xiàn)。按鍵精靈就采用在RING0層通過驅動來模擬鼠標鍵盤,比較底層。
Hook技術:包括API HOOK 、普通的對游戲代碼進行HOOK等。這類技術有個特點,對目標進程的代碼會進行修改。
腳本技術:擴充外掛功能的技術之一,能讓外掛使用者編寫腳本來擴充外掛功能。
三、反外掛中常用的技術手段
反外掛一般使用的分析工具:
動態(tài)分析 OllyDbg(OllyICE)
靜態(tài)分析 IDA Pro
制作反外掛一般使用的開發(fā)工具:
依據(jù)游戲客戶端采用的開發(fā)工具來決定。
制作反外掛的技術要點:
代碼校驗:包括磁盤代碼及內(nèi)存代碼校驗,防止代碼被非法更改。
虛擬機保護:虛擬機(VM )其實就是Virtual Machine的縮寫,這里說的VM并不是像VMWare那樣的虛擬機,而是將一系列的指令解釋成bytecode(字節(jié)碼)放在一個解釋引擎中執(zhí)行,能有效的干擾非法調(diào)試者對保護的代碼進行分析。是反外掛技術中的重中之重。
驅動保護:采用底層鉤子技術,一般采用SSDT HOOK來對游戲進程進行保護。但這種技術有一個致命的缺陷,就是兼容性問題。
反調(diào)試:對調(diào)試過程產(chǎn)生干擾,阻止非法調(diào)試者進行正常的調(diào)試。反調(diào)試代碼加多后會導致兼容性穩(wěn)定性出現(xiàn)問題。
四、一般保護的思路及步驟
防止脫機式外掛:
合理的設計封包通訊協(xié)議及對封包加密解密算法進行虛擬機保護能有效的防止脫機外掛,反脫機外掛的難度比較低。而且技術要求也不高。
防止內(nèi)掛式外掛:
反該類外掛主要從代碼校驗上著手,并配合虛擬機保護,必要時候加上簡單的驅動。簡單的可以采用如下步驟處理:
(1) 將封包加密解密獨立成一個動態(tài)連接庫(DLL),供游戲主程序調(diào)用進行封包加解密。
(2) 更換封包加密解密方式,防止破解者采用替換舊客戶端的方式進入游戲。
(3) 反外掛功能在獨立出來的動態(tài)連接庫里實現(xiàn),在獨立出來的動態(tài)連接庫中加入對主程序代碼段校驗。建立一個新的反外掛線程來校驗代碼段,加入敵意進程或模塊的特征檢測,對關鍵的API進行檢測。檢測到非法可以對服務器進行報告,并在客戶端主動切斷與游戲服務器的連接。
(4) 在加密解密函數(shù)里加入對反外掛線程的檢測,檢測反外掛線程是否正常運行,如果檢測到非法情況,同樣對服務器進行報告并主動切斷與游戲服務器的連接。
(5) 對獨立出來的DLL進行虛擬機保護(封包加解密及反外掛線程代碼)。
(6) 加入一些反調(diào)試技術。
(7) 根據(jù)實際情況采用驅動技術,對游戲進行保護。
五、對反外掛工作的建議
反外掛工作具有長期性,復雜性等特性,故建立專門進行此類工作的軟件安全小組是必須的,及時的收集外掛后分析外掛的所使用的技術和破解反外掛系統(tǒng)的方式,寫出相應的檢測及防護代碼,提交后進行游戲更新。通過不斷的完善反外掛系統(tǒng),我有理由堅信,外掛會在這樣的保護措施下銷聲匿跡。