如何HOOK asm 中的call 指令? |
缺席
|
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
71A21B62 8BD8 mov ebx, eax
:71A21B64 E8C7F6FFFF call 71A21230 //将被HOOK的机器码(第3种方法) :71A21B69 3BDF cmp ebx, edi :71A21B6B 5B pop ebx3,更改CALL指令的相对地址(CALL分别在71A21B12、71A21B25、71A21B64,但前面2条CALL之前有一个条件 跳转指令,有可能不被执行到,因此我们要HOOK 71A21B64处的CALL指令)。为什么要找CALL指令下手? 因为它们都是5字节的指令,而且都是CALL指令,只要保持操作码0xE8不变,改变后面的相对地址就可以转 到我们的HOOK代码去执行了,在我们的HOOK代码后面再转到目标地址去执行。 假设我们的HOOK代码在71A20400处,那么我们把71A21B64处的CALL指令改为CALL 71A20400(原指令是这样的:CALL 71A21230) 而71A20400处的HOOK代码是这样的: 71A20400: pushad //在这里做你想做的事情 popad jmp 71A21230 //跳转到原CALL指令的目标地址,原指令是这样的:call 71A21230 这种方法隐蔽性很好,但是比较难找这条5字节的CALL指令,计算相对地址也复杂。我用delphi7实现,现在可以计算出 HookProc的地址 也就是16进制码:E8 C7F6FFFF (71A21B64处的CALL指令改为CALL 71A20400)
------
The empty vessels make the greatest sound. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |