esay 发表于 2011-8-7 15:03:04

浅谈Inline Hook

大概原理就是利用JMP指令来实现HOOK。

思路其实也很简单,我感觉比IAT HOOK还简单。

首先当然是伪造这个被HOOK的函数,MessageBoxA吧,那么就是FakeMessageBoxA 当然了

WinXp版代码如下


_declspec(naked)   //必须加这句否则容易出错

VOID __stdcall my_MessageBox(

HWND hWnd,          // handle of owner window

LPCTSTR lpText,   // address of text in message box

LPCTSTR lpCaption,// address of title of message box

UINT uType          // style of message box

)

{

// old_MessageBoxA(hWnd,"Hook ok",lpCaption,uType);

__asm

{

PUSH EBP

MOV EBP,ESP

}

printf("取得参数 %x,%s,%s,%x\n",hWnd,lpText,lpCaption,uType);

__asm

{

mov ebx,old_MessageBoxA
add ebx,5
jmp ebx

}

printf("hook Error\n");


}

注意这个必须用在WinXp环境下,因为注意到函数里面的内联汇编,   那么是为了来使堆栈平衡的,如果在其他系统,因为MessageBox可能会跟XP下的不同,具体我没研究过,反正在Win7下运行会报出一个错误,应该就是对战不平衡。 注意Naked是必须的,不然也会报错。
**** Hidden Message *****

wqs3568 发表于 2012-3-19 14:29:38

似懂非懂,我的汇编基础很差

abcgoodwei 发表于 2012-3-23 14:27:11

撸管无罪啊啊啊啊

qq412158094 发表于 2019-3-28 16:40:04

支持楼主,支持看流星社区,以后我会经常来!
页: [1]
查看完整版本: 浅谈Inline Hook