- 注册时间
- 2011-3-10
- 最后登录
- 1970-1-1
该用户从未签到
|
大概原理就是利用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是必须的,不然也会报错。
|
|