游戲安全防外掛
什么是外掛
- 內(nèi)存掛:釋放核心功能模塊级野,注入到游戲客戶端粘秆。侵入性操作纵穿,修改游戲代碼和數(shù)據(jù)下隧,HOOK游戲代碼,CALL游戲函數(shù)等行為谓媒。
- 非內(nèi)存掛:不注入模塊到游戲空間淆院。分類為:資源修改掛,模擬客戶端收發(fā)包協(xié)議或脫機(jī)掛句惯,模擬按鍵掛土辩。
- 外掛分為 內(nèi)存掛和非內(nèi)存掛。根據(jù)是否有模塊進(jìn)入游戲客戶端抢野。
- 內(nèi)存掛啟動(dòng)后 遍歷進(jìn)程定位目標(biāo)游戲進(jìn)程拷淘,然后將核心模塊放到驅(qū)動(dòng)目錄下,
- 把DLL注入游戲進(jìn)程空間指孤。修改數(shù)據(jù)启涯,HOOK代碼,CALL游戲函數(shù)邓厕。
游戲的3個(gè)保護(hù)核心
- 外掛開發(fā)者感興趣: 游戲資源的破解和修改逝嚎,游戲通訊協(xié)議的破解,內(nèi)存對(duì)象的修改數(shù)據(jù)
- 游戲資源的加解密
- 游戲協(xié)議的加密保護(hù)
- 游戲內(nèi)存對(duì)象布局
VMProtect商業(yè)產(chǎn)品
- VMProtect 是新一代的軟件保護(hù)系統(tǒng)详恼,將保護(hù)后的代碼放到虛擬機(jī)中運(yùn)行,這將使分析反編譯后的代碼和破解變得極為困難引几。使用 MAP 文件或內(nèi)建的反編譯引擎昧互,您可以快速選擇需要保護(hù)的代碼。
- VMProtect保護(hù)原理 與其它大部分的保護(hù)程序不同伟桅,VMProtect可修改程序的源代碼 [2] 敞掘。VMProtect可將被保護(hù)文件中的部分代碼轉(zhuǎn)化到在虛擬機(jī)(以下稱作VM)上運(yùn)行的程序(以下稱作bytecode)中。您同樣可把VM想象為具備命令系統(tǒng)的虛擬處理器楣铁,該命令系統(tǒng)與Intel 8086處理器所使用的完全不同玖雁。例 如,VM沒有負(fù)責(zé)比較2個(gè)操作數(shù)的命令盖腕,也沒有有條件與無(wú)條件的移轉(zhuǎn)等赫冬。就象您現(xiàn)在看到的,黑客必須開發(fā)一款特定的工具以分析與反編譯bytecode溃列, 而且還相當(dāng)?shù)睾臅r(shí)劲厌。3
保護(hù)程序的三個(gè)方法
- 使用編譯器創(chuàng)建的MAP文件以及程序的可執(zhí)行文件。MAP文件包含有關(guān)應(yīng)用程序的所有過(guò)程和功能的名稱以及地址的所有必要信息听隐。如果使用MAP文件补鼻,則可以選擇按名稱保護(hù)的過(guò)程和函數(shù)。使用MAP文件,每次重新編譯項(xiàng)目時(shí)风范,VMProtect都會(huì)自動(dòng)確定過(guò)程和函數(shù)的新地址咨跌。
- 使用插入應(yīng)用程序源代碼的標(biāo)記。 標(biāo)記是VMProtect用于確定受保護(hù)片段邊界的特殊標(biāo)記硼婿。 此外锌半,VMProtect支持具有預(yù)定義編譯類型的標(biāo)記。當(dāng)你只想保護(hù)函數(shù)或過(guò)程的一部分時(shí)加酵,使用標(biāo)記非常有用的拳喻。使用標(biāo)記可以指定要保護(hù)的字符串常量的代碼部分。
- 通過(guò)可執(zhí)行文件中受保護(hù)過(guò)程的地址猪腕。 與上述兩種方式相比冗澈,這種方式使用起來(lái)不太方便。 每次修改和重新編譯應(yīng)用程序時(shí)陋葡,都必須再次指定所有地址亚亲。 對(duì)于沒有源代碼的應(yīng)用,建議使用此類保護(hù)腐缤。
外掛的說(shuō)明和解釋
- 外掛分為 內(nèi)存掛和非內(nèi)存掛捌归。根據(jù)是否有模塊進(jìn)入游戲客戶端。
- 內(nèi)存掛啟動(dòng)后 遍歷進(jìn)程以定位目標(biāo)游戲進(jìn)程岭粤,然后將核心模塊是否到驅(qū)動(dòng)目錄下惜索,把DLL注入游戲進(jìn)程空間。修改數(shù)據(jù)剃浇,HOOK代碼巾兆,CALL游戲函數(shù)。
- 非內(nèi)存掛:修改游戲資源包虎囚,模擬收發(fā)數(shù)據(jù)包角塑,模擬按鍵。
- 外掛開發(fā)者感興趣: 游戲資源的破解和修改淘讥,游戲通訊協(xié)議的破解圃伶,內(nèi)存對(duì)象的修改數(shù)據(jù)。
外掛的設(shè)計(jì)思路和步驟
- 把核心功能模塊注入目標(biāo)游戲進(jìn)程蒲列。
- 外掛模塊進(jìn)入游戲空間后窒朋,隱藏外掛模塊,避免被人或者安全模塊檢測(cè)到嫉嘀。
- 外掛和用戶指令交互炼邀,構(gòu)建完全的交互環(huán)境,防止被安全分析人員定位剪侮。
- 接受操作指令后拭宁,開始執(zhí)行與游戲相關(guān)的核心功能洛退,吸怪,加速杰标,釋放技能兵怯,加紅藍(lán)(技術(shù):CALL函數(shù),HOOK)
- 分析游戲的安全保護(hù)方案腔剂,并且繞過(guò)他媒区。
- 外掛的自我保護(hù)。
反外掛的思路
- 防止外掛開發(fā)者分析游戲客戶端代碼:去掉調(diào)試信息和明文字符串等掸犬,給客戶端加保護(hù)殼袜漩。
- 防止外掛模塊注入游戲客戶端:常用雙進(jìn)程保護(hù)的啟動(dòng)方式,或者在驅(qū)動(dòng)里添加監(jiān)控加載模塊的功能湾碎。
- 防止外掛開發(fā)者分析游戲通訊協(xié)議:通信協(xié)議必須要加密宙攻,最好經(jīng)常更換密鑰或算法,還有防止重放數(shù)據(jù)包的功能
- 防止外掛模塊CALL函數(shù)介褥,修改代碼或數(shù)據(jù)座掘。
注入技術(shù)
- 方法有:注冊(cè)表,遠(yuǎn)線程柔滔,依賴可信進(jìn)程溢陪,APC,消息鉤子,導(dǎo)入表睛廊,劫持進(jìn)程創(chuàng)建形真,LSP,輸入法,COMRES注入等
自我隱藏:無(wú)模塊化
- 斷開進(jìn)程的LDR_MODULE鏈超全。(WINDOWS西永中没酣,每個(gè)模塊都有一個(gè)結(jié)構(gòu)體 關(guān)鍵字:InLoadOrderModuleList)
- 抹去模塊的PE頭。(抹去MZ PE標(biāo)志卵迂。 GetModuleHandle VirtualProtect等)
安全的交互通道
- 消息鉤子
- HOOK游戲消息處理進(jìn)程
- GetKeyState()等函數(shù)
- 進(jìn)程間通信
CALL函數(shù)相關(guān)知識(shí)
- call stack 檢測(cè):利用棧幀信息中的調(diào)用返回地址來(lái)確定發(fā)起調(diào)用的地址是否合法。
- 多層堆棧檢測(cè)方法:HOOK調(diào)用鏈底層的函數(shù)或者地址绒净,然后多層堆椉洌回溯檢測(cè)。
- 躲過(guò)多層堆棧檢測(cè)方法:構(gòu)建假棧幀挂疆,在CALL函數(shù)之前給EBP一個(gè)假的椄睦溃基地址。
HOOK大全
- HOOK分 linline 和 非 inline HOOK.
- Inline HOOK:將程序中的某處地址處若干直接的代碼復(fù)制到其他地方缤言,然后再遠(yuǎn)地址寫出實(shí)現(xiàn)跳轉(zhuǎn)功能的指令宝当,改變程序流程。
- 非Inline HOOK: 改變CALL操作的目標(biāo)地址胆萧。
- 微軟Detours HOOK庫(kù) 來(lái) 動(dòng)態(tài)HOOK任意地址庆揩,截獲函數(shù)調(diào)用俐东,輸出打印信息。
- 硬件斷點(diǎn)HOOK: WINDOWS的 SEH-結(jié)構(gòu)化異常處理機(jī)制和 VEH-向量異常處理機(jī)制订晌。
INTEL X86處理器的RING級(jí)別訪問控制
- RING分為4層虏辫。 ring 0 - 4
- R0層擁有最高的權(quán)限,R3位最低的權(quán)限锈拨。
- 應(yīng)用程序在R3層砌庄,只能訪問R3層數(shù)據(jù),操作系統(tǒng)在R0奕枢,可以訪問所有層的數(shù)據(jù)娄昆。
應(yīng)用層防護(hù)
- 靜態(tài)保護(hù):加殼,去字符串缝彬,去全局指針和虛擬保護(hù)的軟件萌焰。
- 角色基地址拆分為多個(gè)值運(yùn)算返回。 DWORD VALUE = 0X876C20; PDWORD pdPlayer = (PDWORD)VALUE/2;
- 動(dòng)態(tài)保護(hù):反DUMP,內(nèi)存訪問異常HOOK跌造。
脫殼和加殼
- 從技術(shù)的角度出發(fā)杆怕,殼是一段執(zhí)行于原始程序前的代碼。原始程序的代碼在加殼的過(guò)程中可能被壓縮壳贪、加密……當(dāng)加殼后的文件執(zhí)行時(shí)陵珍,殼-這段代碼先于原始程序運(yùn)行,他把壓縮违施、加密后的代碼還原成原始程序代碼互纯,然后再把執(zhí)行權(quán)交還給原始代碼。
- 軟件的殼分為加密殼磕蒲、壓縮殼留潦、偽裝殼、多層殼等類辣往,目的都是為了隱藏程序真正的OEP(入口點(diǎn)兔院,防止被破解)。
- 最常見的加殼軟件ASPACK 站削,UPX坊萝,PEcompact,不常用的加殼軟件WWPACK32许起,PE-PACK十偶,PETITE NEOLITE。
Dump程序基本步驟(LordPE):
- 就是把內(nèi)存中運(yùn)行的PE進(jìn)程的數(shù)據(jù)园细,從內(nèi)存中抓取出來(lái)惦积,然后在用文件的形式保存下來(lái)。
- 在系統(tǒng)中找到目標(biāo)進(jìn)程猛频。
- 在進(jìn)程中確定進(jìn)程的大小imagesize狮崩。
- 把進(jìn)程中的數(shù)據(jù)保存到文件蛛勉。
分析工具介紹
- GameSpider WINDOWS下的外掛和游戲輔助分析工具。是DLL模塊厉亏。
- Kernel Detective 用于檢測(cè)董习,分析和修改WINDOWS NT內(nèi)核的免費(fèi)工具。強(qiáng)大的靜態(tài)逆向分析工具爱只。
- 脫殼工具:https://baike.baidu.com/item/%E8%84%B1%E5%A3%B3/9482636?fr=aladdin
加速外掛(全屏加速和角色加速掛)
- 通過(guò)HOOK來(lái)讓FPS中的SKIP時(shí)間滿足條件皿淋,對(duì)time.GetTime()函數(shù)進(jìn)行HOOK,放大系統(tǒng)運(yùn)行時(shí)間恬试。
自動(dòng)瞄準(zhǔn)和反后坐力
- 反后坐力:測(cè)試出開錢前后的反彈距離Z窝趣,然后調(diào)用mouse_event(...,x,y+z,..)函數(shù)。
- 自動(dòng)開槍:通過(guò)模擬按鍵和像素檢測(cè)來(lái)自動(dòng)射擊训柴。
D3D9的HACK點(diǎn)(通過(guò)調(diào)用SetRenderState)
- 線框透明:渲染時(shí)忽略圖形表面的材質(zhì)和紋理哑舒。
- 禁用光照:可以高亮顯示要關(guān)注的物體對(duì)象。
- 禁用煙霧效果:繪制場(chǎng)景中煙霧效果會(huì)消失幻馁。
- 禁用Z緩存:Z坐標(biāo)判斷深度失效洗鸵,導(dǎo)致被擋住的物體會(huì)出現(xiàn)在面前。
- 修改材質(zhì)ALPHA實(shí)現(xiàn)透明效果仗嗦。