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

其實有些技術是被偷藏起來的...
本來是有大大說不要公開這技術的...
不過既然有人先發了,很多人應該也都會了吧XD?
那我吧以前打好的一篇文章發出來,不然以前打了沒發覺得有點浪費 :)


上一篇: [簡易篇]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)

留言

本月最夯