看流星社区

 找回密码
 注册账号
查看: 2773|回复: 3

浅谈Inline Hook

[复制链接]

该用户从未签到

发表于 2011-8-7 15:03:04 | 显示全部楼层 |阅读模式
大概原理就是利用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是必须的,不然也会报错。
游客,如果您要查看本帖隐藏内容请回复

该用户从未签到

发表于 2012-3-19 14:29:38 | 显示全部楼层
似懂非懂,我的汇编基础很差

该用户从未签到

发表于 2012-3-23 14:27:11 | 显示全部楼层
撸管无罪啊啊啊啊

该用户从未签到

发表于 2019-3-28 16:40:04 | 显示全部楼层
支持楼主,支持看流星社区,以后我会经常来!
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-4-26 11:16

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表