差異分析定位Ring 3保護(hù)模塊
創(chuàng)新互聯(lián)公司長(zhǎng)期為千余家客戶(hù)提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開(kāi)放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為桃江企業(yè)提供專(zhuān)業(yè)的做網(wǎng)站、成都網(wǎng)站設(shè)計(jì),桃江網(wǎng)站改版等技術(shù)服務(wù)。擁有十載豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開(kāi)發(fā)。
由于保護(hù)模塊通常會(huì)Hook操作系統(tǒng)的原生DLL接口來(lái)進(jìn)行保護(hù),所以可以采用差異比較原生DLL文件和加載到內(nèi)存中的原生DLL直接的差別來(lái)定位Ring 3模塊。
在分析的過(guò)程中,為了防止被Ring 3保護(hù)模塊發(fā)現(xiàn),暫時(shí)可以先把除了自己線(xiàn)程外的其他線(xiàn)程暫停,如圖8-14所示。
圖8-14 懸掛除自己線(xiàn)程外的其他線(xiàn)程
從圖8-14中可以看出,除自己線(xiàn)程外,該游戲有58個(gè)線(xiàn)程,可以通過(guò)SuspendThread()函數(shù)懸掛這些線(xiàn)程以便后續(xù)的分析(GS的命令就是ste序號(hào))。
下面,我們?cè)賹?duì)3個(gè)常用原生DLL——ntdll.dll、kernel32.dll和user32.dll進(jìn)行文件和內(nèi)存的比較,如圖8-15所示。
圖8-15 差異分析原生DLL的變化
從圖8-15中可以看出,ntdll.dll有3處地址發(fā)生了變化,分別是0x7c921230、0x7c92DEB6和0x7c97077B。下面讓我們看看這3處地址目前的指令是什么,如圖8-16所示。
圖8-16 兩處地址jmp指令
在圖8-16中,有一處jmp指令是跳入地址0x45320F0。讓我們看看它屬于哪個(gè)模塊,如圖8-17所示。
圖8-17 模塊節(jié)信息
從圖8-17的地址區(qū)間來(lái)看,是包含0x45320F0的,所以,在ntdll.dll中地址0x7c92deb6會(huì)跳入X.dll模塊。到目前為止,我們基本可以判斷ring 3下的游戲保護(hù)模塊是X.dll。
為了能更準(zhǔn)確地判斷X.dll是否是真的保護(hù)模塊,下面讓我們看看ntdll.dll中3處發(fā)生變化的地址在原生ntdll.dll中的作用。
可以用IDA對(duì)ntdll.dll進(jìn)行分析,然后定位地址0x7c921230、0x7c92DEB6和0x7c97077B。
如圖8-18所示,原來(lái)此處地址是DbgBreakPoint函數(shù)。這個(gè)函數(shù)是供調(diào)試器下軟件斷點(diǎn)用的,而在游戲中卻被改成了ret指令,這樣做能起到防止下軟件斷點(diǎn)的作用。
圖8-18 0x7c921230地址所處函數(shù)
如圖8-19所示,0x7c97077B地址是屬于DbgUiRemoteBreakin函數(shù)的,這個(gè)函數(shù)的詳細(xì)介紹可以參見(jiàn)張銀奎老師的《軟件調(diào)試》一書(shū)的第10.6.4節(jié)。這里還是簡(jiǎn)單說(shuō)明一下這個(gè)函數(shù)的作用,以便讀者能了解。
圖8-19 0x7c97077B地址所處函數(shù)
DbgUiRemoteBreakin是ntdll提供的用于在目標(biāo)進(jìn)程中創(chuàng)建遠(yuǎn)線(xiàn)程下軟件斷點(diǎn)的函數(shù),其偽代碼如下。
DWORD WINAPI DbgUiRemoteBreakin( LPVOID lpParameter)
{
__try
{
if(NtCurrentPeb->BeingDebugged)
DbgBreakPoint();
}
__except(EXCEPTION_EXECUTE_HANDLER)
{
Return 1;
}
RtlExitUserThread(0);
}
當(dāng)調(diào)試器通過(guò)CreateRemoteThread函數(shù)在目標(biāo)程序中創(chuàng)建DbgUiRemoteBreakin線(xiàn)程的時(shí)候,從代碼上來(lái)看是下了int 3軟件斷點(diǎn)。由于在被調(diào)試狀態(tài),所以調(diào)試器可以捕獲這個(gè)異常。如果目標(biāo)程序沒(méi)有被調(diào)試的話(huà),DbgUiRemoteBreakin中的S.H.E顯然可以捕獲并處理它。
所以,游戲保護(hù)系統(tǒng)在對(duì)DbgUiRemoteBreakin進(jìn)行jmp操作,很明顯是為了防止被調(diào)試。下面再看看保護(hù)系統(tǒng)從DbgUiRemoteBreakin跳到了哪里。
如圖8-20所示是保護(hù)系統(tǒng)從DbgUiRemoteBreakin跳入執(zhí)行的函數(shù),很明顯,LdrShutdownProcess是一個(gè)關(guān)閉進(jìn)程的函數(shù)。
圖8-20 0x7C943DEF地址所處函數(shù)
下面再讓我們看看地址0x7c92DEB6處的含義。
如圖8-21所示,保護(hù)模塊對(duì)ZwProtectVirtualMemory函數(shù)進(jìn)行了Hook,以防止虛擬內(nèi)存所在頁(yè)面的保護(hù)屬性被改變。
圖8-21 0x7c92DEB6地址所處函數(shù)
關(guān)于更多分析游戲保護(hù)方案的思路見(jiàn)<<游戲外掛***藝術(shù)>>第8章。
作者簡(jiǎn)介
徐勝,2009年于電子科技大學(xué)獲得計(jì)算機(jī)科學(xué)與工程碩士學(xué)位,現(xiàn)就職于阿里巴巴,從事移動(dòng)安全的研究和移動(dòng)產(chǎn)品的研發(fā),主要研究方向包括:Windows平臺(tái)下的***、外掛、Rootkit、防火墻和二進(jìn)制逆向分析,Android和iOS客戶(hù)端軟件安全,以及Web和WAP安全。
本文節(jié)選自《游戲外掛***藝術(shù)》一書(shū)。徐勝著,由電子工業(yè)出版社出版。
網(wǎng)頁(yè)名稱(chēng):差異分析定位Ring3保護(hù)模塊
URL標(biāo)題:http://jinyejixie.com/article30/ppjcpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名、ChatGPT、云服務(wù)器、全網(wǎng)營(yíng)銷(xiāo)推廣、標(biāo)簽優(yōu)化、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)