2015年1月24日 星期六

[進階篇]ICS追Eax+N或者從Call追源頭(利用Call達到無須Bypass就可以使用的數據)

作者:Onion
來源:http://ibf.tw/05GWH
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------

上一篇: [簡易篇]ICS解析(利用Call達到無須Bypass就可以使用的數據)

看懂了以後我們再來看看

ICS基本上就是在跟CALL玩遊戲...很重要的一點就是要追源頭,要追跳轉的源頭、Call的源頭...





因為ICS就是從源頭發現的,往上看

leave

Ret

這是一個call結束的特徵,ret後面也有可能有數字

例如:Ret 000c

Ret 的意思你知道嗎?Ret 的意思就是 返回

Ret XXXX呢?Ret 基本上就是跟call相對應的指令 Ret XXXX

像是我們有些call要push參數的...

舉例:Ret 10,0x10 = 16,16Bytes就是4個Dword

像是有四個參數,就要Push 4次,

Ret 就是用來清除前面push的參數用的

再來看看Leave指令,看看開頭...

push ebp

mov ebp,esp

這兩條的用意...因為你在call的過程中也會用到堆疊...用ebp來暫存堆疊

leave就是...

push ebp

mov ebp,esp

的反向操作

所以說leave跟ret是很重要的call結束特徵

[重點]要追源頭....通常會有兩種方式...

第一種很普通的直接call呼叫

先把Address移動到00400000,記憶體的開頭,搜尋反組譯碼..

第二種..

如果這個call是被call dword ptr 這種方式呼叫的....

就用4Bytes搜尋CAll的開頭...

底下附上Hook Eax+N的ASM數據...

//Hook Eax+N
[ENABLE]
Alloc(Hook, 128)
Alloc(MyAddress, 4)
RegisterSymbol(MyAddress)

Hook:
Mov [MyAddress], Eax //Hook Eax
Add [MyAddress], 18 //+N

Call dword ptr [Eax+18] //Opcode,Keep Working
Test Eax, Eax
Je 0082236B

Jmp 00822369 //Back to Memory

00822362: //The Add You Hook
Jmp Hook

[DISABLE]
00822362:

Call dword ptr [Eax+18]
Test Eax, Eax

DeAlloc(Hook)
//DeAlloc(MyAddress)
//UnRegisterSymbol(MyAddress)

沒有留言:

張貼留言