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