鱼C论坛

 找回密码
 立即注册
查看: 4469|回复: 11

[技术交流] HOOK API 技术谁能给个实例

[复制链接]
发表于 2014-7-11 16:47:45 | 显示全部楼层 |阅读模式
10鱼币

最佳答案

查看完整内容

代码给你 由于MessageBox是user32.dll的函数。模块地址一般情况下不变。所以直接获取自己进程的MessageBoxA地址作为目标进程的地址 。代码写的比较挫。参考下未点击前 点击后 至于你要的看目标是否调用指定API的。那个你自己在接管函数搞个计数器就行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-11 16:47:46 | 显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2014-7-12 14:29 编辑

代码给你
由于MessageBox是user32.dll的函数。模块地址一般情况下不变。所以直接获取自己进程的MessageBoxA地址作为目标进程的地址
。代码写的比较挫。参考下未点击前
11.jpg


点击后
22.jpg





至于你要的看目标是否调用指定API的。那个你自己在接管函数搞个计数器就行
新建文件夹.rar (123.98 KB, 下载次数: 26)




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-11 20:45:04 | 显示全部楼层
本帖最后由 メ㊣逆ご帅☆ 于 2014-7-11 20:47 编辑

首先从OD的手动HOOK开始。程序自动HOOK如果需要的话可以告诉我(练手用的附件在下面)
1.jpg
这是我以前fishc不知道给谁下载的win32asm记事本程序。可以看到点击帮助的时候会有MessageBox的调用
OD载入该程序
暂时不清楚是调用ASCII版的MessageBoxA还是Unicode的MessageBoxW
所以先尝试F2下断A版的

2.jpg

再次点击帮助按钮
3.jpg

断下了
OK,确定是这里了
。开始hook。(HOOK有好几种手法。比如IATHOOK是改IAT表的数据。INLINE HOOK是直接改机器码,还有虚表HOOK等这里自行了解)
这里采用最常用简单的方式INLINE HOOK(其实其他几种方法也不复杂只要你有概念就行)
HOOK前先考虑要怎么HOOK
看看MeessageBox的参数情况,如图

4.jpg

这里可以看到ESP+C处的标题参数为NULL,这里把他HOOK改成了和Text一样好了
首先决定HOOK位置
INLINE HOOK在长跳转的情况下需要5个字节。短跳转需要2个字节(汇编的知识)
这里需要找一个数据全为0的空白地址(也可以自己申请空白地址)

5.jpg

MessageBox 77D507E和00401a00相差73D367E
这不是1个字节能装下的位移。所以需要5个字节来HOO
K



这里选择开头的5个字节来HOOK
OD改写指令jmp 00401a00

6.jpg

可以看到前三条指令被覆盖了
现在来到00401a00处
首先确定目的是
改写esp+c处的参数

7.jpg

00401A00       8B4424 08                 mov eax,dword ptr ss:[esp+8]//取出Text参数
00401A04       894424 0C                 mov dword ptr ss:[esp+C],eax//覆盖esp+c的title参数
00401A08       8BFF                      mov edi,edi//重新模拟一遍被覆盖的指令
00401A0A       55                        push ebp//重新模拟一遍被覆盖的指令
00401A0B       8BEC                      mov ebp,esp//重新模拟一遍被覆盖的指令
00401A0D     - E9 DDED9477               jmp user32.77D507EF//跳回去继续执行


这里选择利用EAX寄存器来传输内容。因为EAX寄存器这里内容被破坏是无所谓的

如果利用了其他寄存器的值。要记得还原寄存器的内容。避免出现崩溃等情况。具体要自己调试
这样就HOOK完了
运行起来试试看

8.jpg

可以看到标题不是“错误”了

1.rar (112.59 KB, 下载次数: 10)

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-11 22:10:33 | 显示全部楼层
这里有小甲鱼转载的一个关于HOOK的一段话你可以看一下:
http://bbs.fishc.com/forum.php?m ... p;page=1#pid1290919
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-11 22:22:18 | 显示全部楼层
表示看不懂,求教该学哪些内容?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 10:10:50 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2014-7-11 20:45
首先从OD的手动HOOK开始。程序自动HOOK如果需要的话可以告诉我(练手用的附件在下面)

这是我以前fishc不 ...

其實 這個我知道
我想用VC 代碼 实现
比如當我指定某個进程他在調用 MessageBox API 时 我要知道他触发了该函数的调用
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 10:13:32 | 显示全部楼层
青玄 发表于 2014-7-11 22:11
哎!还是给你发上来吧!

论坛里有关于HOOK API的贴子, 但其实现在方式显示得麻烦, 其实现在拦截API一 ...

版主 有VC 实现的方法吗???

点评

哦! 这应该是delphi的语法,vc实现的方法可以的, 但是我想只要把原理掌握的话,vc实现照着delphi的原理实现也是可以的! 呵呵! 其实这篇文章也是我转载别人的,嗯....,你可以试一下!  详情 回复 发表于 2014-7-15 10:33
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-12 15:30:04 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2014-7-12 14:27
代码给你
由于MessageBox是user32.dll的函数。模块地址一般情况下不变。所以直接获取自己进程的MessageBox ...

谢谢 能留个联系方式吗? HOOK API的问题以后可以请教一下你
请容我 叫一声 师傅{:7_174:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-12 15:35:44 | 显示全部楼层
C域 发表于 2014-7-12 15:30
谢谢 能留个联系方式吗? HOOK API的问题以后可以请教一下你
请容我 叫一声 师傅

864388942
我要去游泳。有事晚上说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-7-14 11:48:30 | 显示全部楼层
メ㊣逆ご帅☆ 发表于 2014-7-11 16:47
代码给你
由于MessageBox是user32.dll的函数。模块地址一般情况下不变。所以直接获取自己进程的MessageBox ...

组建时有错误
未命名.JPG
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-7-15 10:33:27 | 显示全部楼层
C域 发表于 2014-7-12 10:13
版主 有VC 实现的方法吗???

哦! 这应该是delphi的语法,vc实现的方法可以的, 但是我想只要把原理掌握的话,vc实现照着delphi的原理实现也是可以的! 呵呵! 其实这篇文章也是我转载别人的,嗯....,你可以试一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-8-19 18:30:51 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 00:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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