首页
社区
课程
招聘
还是关于 HOOK 全局API
发表于: 2010-2-22 12:17 7642

还是关于 HOOK 全局API

2010-2-22 12:17
7642
HOOK本进程的API很简单 直接修改IAT就可以了
全局的貌似就不是那么简单了,当然这里不讨论内核级的东西,默认是在Ring3下
网上查了下全局的API HOOK   大都是用dll注入进程来实现的

但是看《Windows 核心编程》 22.8.3一节  Last MessageBox Info 示例程序
简单看了下代码实现  他里面却是没有用到dll注入
那么有一个问题  既然没有用到dll注入 那修改完其他进程的IAT后(修改IAT本质上是修改API的地址)   如何做到其他进程调用我们自己写的API(这是指hook中用到的自己写的api,里面应该会调用真正的api。这段代码一般是在我们写的一个dll里面)呢?  我认为肯定会造成内存访问违规。

还有这一节的源文件我编译运行后没有得到预期的效果 应该是Hook没成功,谁弄个编译好的附件发上来 看看

期待大侠指点一二

附件是 《Windows核心编程》全部的源代码

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 8333
活跃值: (2911)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
你看错了吧..

注入其他进程.有N个办法.

他采用的方式是.安装一个全局消息钩子.

关于消息钩子的运行原理.

可以简单的说.(为了通俗.并不代表书上的正规观点仅是个人理解).

当操作系统回调目标窗体的消息回调函数的时候(或者更简单的说.操作系统通知目标窗体发生了某个消息之前).会先检查是否有Hook存在.若存在.则调用之.而调用Hook的时候会检查.这个Hook处理函数所在DLL.是否已经映射入了目标进程地址空间.若没有.则回调ClientLoadLibrary来加载这个DLL..就是因为这个机制..他的DLL也就轻松的进入了其他进程的地址空间...进入之后.就可以随意替换IAT或者InLine Hook了.这你已经没 疑问了就不多说了.

附上一个图..



说个题外话.这种方式进入其他进程地址空间虽然容易.但对像控制台程序这类CUI程序是无效的.因为消息总是针对某个窗口才有意义...
上传的附件:
  • 1.jpg (79.11kb,294次下载)
2010-2-22 12:27
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
3
感谢楼上解释  原来Hook msg 也是一种dll注入啊   学习了
另外 这一节的源文件我编译运行后没有得到预期的效果 应该是Hook没成功,谁弄个编译好的附件发上来 看看
2010-2-22 12:43
0
雪    币: 75
活跃值: (803)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
长知识了玩不转C++,呵呵
2010-2-22 12:45
0
雪    币: 8333
活跃值: (2911)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
我也编译了一个.效果是出来了.运行成功了.

但是它这种方式有很多因素会干扰的.比如你装有杀软.等..

先看这个图片.显示DLL的确注入了其他进程..



再看这个图片..

貌似管用了..



最后提供一个编译好的...
桌面.rar
上传的附件:
2010-2-22 12:56
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
帅呆了   学习了  多谢!我编译出来的对explorer.exe进程确实可以
但是对我自己写的一个exe程序就不行了  如图  我点完 确定 按钮后那个LastMsgBoxInfo.exe程序的框里的内容还是那样不会发生变化 仍然是“Waiting for a Message Box to be dismissed”  不知道是什么原因
上传的附件:
2010-2-22 13:08
0
雪    币: 204
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
最近想学习HOOK
2010-2-23 21:38
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
原来是这个道理导致注入到其他进程...
2011-3-5 17:14
0
游客
登录 | 注册 方可回帖
返回
//