讀書筆記:游戲安全防外掛

游戲安全防外掛

什么是外掛

  • 內(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)品

  1. VMProtect 是新一代的軟件保護(hù)系統(tǒng)详恼,將保護(hù)后的代碼放到虛擬機(jī)中運(yùn)行,這將使分析反編譯后的代碼和破解變得極為困難引几。使用 MAP 文件或內(nèi)建的反編譯引擎昧互,您可以快速選擇需要保護(hù)的代碼。
  2. 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ì)思路和步驟

  1. 把核心功能模塊注入目標(biāo)游戲進(jìn)程蒲列。
  2. 外掛模塊進(jìn)入游戲空間后窒朋,隱藏外掛模塊,避免被人或者安全模塊檢測(cè)到嫉嘀。
  3. 外掛和用戶指令交互炼邀,構(gòu)建完全的交互環(huán)境,防止被安全分析人員定位剪侮。
  4. 接受操作指令后拭宁,開始執(zhí)行與游戲相關(guān)的核心功能洛退,吸怪,加速杰标,釋放技能兵怯,加紅藍(lán)(技術(shù):CALL函數(shù),HOOK)
  5. 分析游戲的安全保護(hù)方案腔剂,并且繞過(guò)他媒区。
  6. 外掛的自我保護(hù)。

反外掛的思路

  1. 防止外掛開發(fā)者分析游戲客戶端代碼:去掉調(diào)試信息和明文字符串等掸犬,給客戶端加保護(hù)殼袜漩。
  2. 防止外掛模塊注入游戲客戶端:常用雙進(jìn)程保護(hù)的啟動(dòng)方式,或者在驅(qū)動(dòng)里添加監(jiān)控加載模塊的功能湾碎。
  3. 防止外掛開發(fā)者分析游戲通訊協(xié)議:通信協(xié)議必須要加密宙攻,最好經(jīng)常更換密鑰或算法,還有防止重放數(shù)據(jù)包的功能
  4. 防止外掛模塊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):

  1. 就是把內(nèi)存中運(yùn)行的PE進(jìn)程的數(shù)據(jù)园细,從內(nèi)存中抓取出來(lái)惦积,然后在用文件的形式保存下來(lái)。
  2. 在系統(tǒng)中找到目標(biāo)進(jìn)程猛频。
  3. 在進(jìn)程中確定進(jìn)程的大小imagesize狮崩。
  4. 把進(jìn)程中的數(shù)據(jù)保存到文件蛛勉。

分析工具介紹

  1. GameSpider WINDOWS下的外掛和游戲輔助分析工具。是DLL模塊厉亏。
  2. Kernel Detective 用于檢測(cè)董习,分析和修改WINDOWS NT內(nèi)核的免費(fèi)工具。強(qiáng)大的靜態(tài)逆向分析工具爱只。
  3. 脫殼工具: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)和反后坐力

  1. 反后坐力:測(cè)試出開錢前后的反彈距離Z窝趣,然后調(diào)用mouse_event(...,x,y+z,..)函數(shù)。
  2. 自動(dòng)開槍:通過(guò)模擬按鍵和像素檢測(cè)來(lái)自動(dòng)射擊训柴。

D3D9的HACK點(diǎn)(通過(guò)調(diào)用SetRenderState)

  1. 線框透明:渲染時(shí)忽略圖形表面的材質(zhì)和紋理哑舒。
  2. 禁用光照:可以高亮顯示要關(guān)注的物體對(duì)象。
  3. 禁用煙霧效果:繪制場(chǎng)景中煙霧效果會(huì)消失幻馁。
  4. 禁用Z緩存:Z坐標(biāo)判斷深度失效洗鸵,導(dǎo)致被擋住的物體會(huì)出現(xiàn)在面前。
  5. 修改材質(zhì)ALPHA實(shí)現(xiàn)透明效果仗嗦。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末膘滨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子稀拐,更是在濱河造成了極大的恐慌火邓,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德撬,死亡現(xiàn)場(chǎng)離奇詭異铲咨,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)蜓洪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門纤勒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人隆檀,你說(shuō)我怎么就攤上這事踊东。” “怎么了刚操?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)再芋。 經(jīng)常有香客問我菊霜,道長(zhǎng),這世上最難降的妖魔是什么济赎? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任鉴逞,我火速辦了婚禮记某,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘构捡。我一直安慰自己液南,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布勾徽。 她就那樣靜靜地躺著滑凉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪喘帚。 梳的紋絲不亂的頭發(fā)上畅姊,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音吹由,去河邊找鬼若未。 笑死,一個(gè)胖子當(dāng)著我的面吹牛倾鲫,可吹牛的內(nèi)容都是我干的粗合。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乌昔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼隙疚!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起玫荣,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤甚淡,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后捅厂,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體贯卦,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年焙贷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了撵割。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辙芍,死狀恐怖啡彬,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情故硅,我是刑警寧澤庶灿,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站吃衅,受9級(jí)特大地震影響往踢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜徘层,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一峻呕、第九天 我趴在偏房一處隱蔽的房頂上張望利职。 院中可真熱鬧,春花似錦瘦癌、人聲如沸猪贪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)热押。三九已至,卻和暖如春妄帘,著一層夾襖步出監(jiān)牢的瞬間楞黄,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工抡驼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鬼廓,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓致盟,卻偏偏與公主長(zhǎng)得像碎税,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子馏锡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 一雷蹂、溫故而知新 1. 內(nèi)存不夠怎么辦 內(nèi)存簡(jiǎn)單分配策略的問題地址空間不隔離內(nèi)存使用效率低程序運(yùn)行的地址不確定 關(guān)于...
    SeanCST閱讀 7,813評(píng)論 0 27
  • APK加固,Android開發(fā)杯道,APP保護(hù)匪煌,游戲反外掛,應(yīng)用安全加固 摘要:興起的手游市場(chǎng)背后隱藏著嚴(yán)峻外掛問題党巾,...
    御安全_李大師閱讀 626評(píng)論 0 1
  • 轉(zhuǎn)自長(zhǎng)亭知乎專欄萎庭,實(shí)習(xí)時(shí)小姐姐的約稿,已經(jīng)不在那邊了所以版權(quán)不歸我哈 筆者一直自認(rèn)玩過(guò)不少游戲齿拂,無(wú)奈水平太菜驳规,日常...
    hyrathon閱讀 1,625評(píng)論 0 0
  • 最近一直在思考人際關(guān)系,覺得自己是那種平和的人署海,不會(huì)跟誰(shuí)莫名其妙的不和吗购。確實(shí),我這大專兩年多來(lái)跟班上同學(xué)也相處的非...
    王者魯夫閱讀 371評(píng)論 1 0
  • 初冬的午后,又一次打開音樂刀森,陳奕迅在《十年》里唱到:“直到和你做了多年朋友贯底,才明白我的眼淚,不是為你而流也...
    定西北閱讀 365評(píng)論 0 2