[進階篇]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)
本來是有大大說不要公開這技術的...
不過既然有人先發了,很多人應該也都會了吧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)
留言
張貼留言