作者:kkmomo
來源:
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------
CRC轉ICS(一)
TMS_v150.2
接觸這塊領域也才短短一個月,僅能提供一些小小的心得供大家參考
排版方面我不太在行,可能會寫得有些亂,請見諒^^"
我自己覺得需要的能力:
★★★★★ 邏輯
★★★★ 程式語法的了解
★★★★ 耐心、毅力
★★★ 查找資料
★★★ 經驗
★ 組合語言
所需工具:UCE、有CRCbypass佳
--------------------------------------------------------
一、要先有CRC代碼
--------------------------------------------------------
首先就從 物理無敵CRC 開始說起吧,這應該是數據界的HelloWorld!!!
最簡短的CRC版
[Enable]
00615994:
DB 75 //短程jne跳躍
[Disable]
00615994:
DB 74 //短程je跳躍
常見版本2
[Enable]
00615994:
jne 006159A2 // DB 75 0E 83 4D FC FF
[Disable]
00615994:
je 006159A2 // DB 74 0E 83 4D FC FF
從aob可以看出以上兩個數據是等價的
--------------------------------------------------------
二、找call dword ptr
--------------------------------------------------------
而要如何從CRC轉成ICS
基本上需要有3個地址
(1) ptr基址
(2) 被hook函數地址
(3) call的反回地址
基本形式如:
Addr_0 call dword ptr [Addr_1] : [Addr_2]
Addr_3 ***any code***
(1)=Addr_1
(2)=Addr_2
(3)=Addr_3
一般來說只要"往前"找到call dword ptr,(3)便可知
至於(1)、(2)通常都要用一些手段來得到
這數據往前多看兩行,就發現了!!
0061598C - FF 15 8C5EE200 - call dword ptr [00E25E8C] : [IsRectEmpty]
00615992 - 85 C0 - test eax,eax
00615994 - 74 0E - je 006159A4
感謝Inndy大大指點,winapi還是用函數名比較好XD
ps.758D0903 = IsRectEmpty,函數名本身即代表起始地址,用哪個都可以
這是最幸運的情況,3個願望一次滿足
(1)=Addr_1=00E25E8C
(2)=Addr_2=IsRectEmpty
(3)=Addr_3=00615992
--------------------------------------------------------
三、改寫
--------------------------------------------------------
3個地址都有了,那麼該如何改寫成ICS呢?
基本形如下:
CheckEsp:自定函數名
Size:大小
FunName:自定標籤名
[Enable]
Alloc(CheckEsp,Size)
Label(FunName)
CheckEsp:
cmp [esp],Addr_3 //看返回地點是不是我們要的
jne Addr_2 //不是則跳回原函數
mov [esp],FunName //將反迴值改成自己的函數
jmp Addr_2 //改變反迴值後一樣跳回原函數
FunName:
***copy code*** //把 [call dword ptr 下一行] 到 [je 006159A4] 之間的code複製過來
jne 006159A2 //從crc [enable]中copy過來
Addr_1:
DD CheckEsp
[Disable]
Addr_1:
DD Addr_2
DeAlloc(CheckEsp)
--------------------------------------------------------
成果如下
[Enable]
Alloc(CheckEsp,32)
Label(PGod)
CheckEsp:
cmp [esp],00615992
jne IsRectEmpty
mov [esp],PGod
jmp IsRectEmpty
PGod:
test eax,eax
jne 006159A2
00E25E8C:
DD CheckEsp
[Disable]
00E25E8C:
DD IsRectEmpty
DeAlloc(CheckEsp)
理解程式碼後可再自行縮減精簡代碼
沒有留言:
張貼留言