首页
社区
课程
招聘
[原创]代码Hook之指令级实现
发表于: 2014-1-16 22:09 8893

[原创]代码Hook之指令级实现

2014-1-16 22:09
8893

在工作中经常会使用到 Hook 技术,一般函数 Hook 会较为广泛的应用。
函数 Hook 分为很多种,修改 PE 的导入表是较为简单且常用的方法,但修改 PE 存在着实时性不高,时机不好掌握等特点,因为在 PE 文件被装载之后才能去动态地修改其导入表内容,进而达到函数跳转被截取的目的,但 PE 文件的加载可能很随意,任意一 PE 文件有导入表如果没有被 Hook 到,则就出现了漏洞,所以现在介绍一个古老但实用的技术,通过从根本上解决掉函数跳转来实现函数的 Hook。这就是今天的主角,指令级 Hook。
  函数Hook,本质就是在代码调用某个函数的时候,会先进入到自己预设的一个其它函数执行,好让我们得到一个控制的机会,那么指令级Hook,以 x86 平台为例,只要能完成跳转,即可跳转到我们自己的代码,有很多的指令可以完成如 call, jmp 系列的指令都可以做到,且 jmp 这种无条件跳转最能满足我们的需要。
  实现原理,那就很简单了,就是把目标函数的前五个字节替换成一个无条件跳转,然后保存这五个字节的内容,接着跳转到我们预设的函数里,然后我们就得到了控制权,此时你就可以无所欲为了,等您忙以后,再执行我们保存的指令,最后再跳转到目标函数的第六个字节的指令继续执行。
  下面以项目中会实际用到的代码为例,实地完成以上所说的技术。在一个大的项目中有时为了查找其它模块是否调用了 ExitProcess 导致程序退出,会对 ExitProcess 函数进行 Hook,或者查找内存申请和释放是否有泄漏,会对 malloc 和 free 函数进行 Hook,下面以实际项目中的代码为例来讲解一下。


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

上传的附件:
收藏
免费 5
支持
分享
最新回复 (21)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
嗯。经典的 5 字节了。 不过很容易检测出来。
2014-1-16 22:26
0
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
不就是inline hook么,标题起得太深奥
2014-1-16 22:31
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
4
我以为你要讲OPCode了……
2014-1-16 22:34
0
雪    币: 28
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
5
起名字一直是我的弱项,朝花儿拾,今天又看到微软的 hotfix 实现让我想起了这个古老的技术。
2014-1-16 22:45
0
雪    币: 28
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
那五个字节确实经典,不过微软经典的不是这5个字节,应该是 mov edi, edi 哈哈。
2014-1-16 22:50
0
雪    币: 95
活跃值: (119)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
是呀,名字起得好玄呀,,,,,,
2014-1-16 22:53
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
看标题还以为是指令拦截,没想到是inline  hook
2014-1-16 22:53
0
雪    币: 28
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
9
不好意思,让你失望了,古老但实用的技术拿出来 mark 一下而已,
2014-1-16 22:53
0
雪    币: 28
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
10
可以改名字吗,我已经后悔了,呵呵
2014-1-16 22:55
0
雪    币: 28
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
inline hook 这个词没怎么听过,对一些专业名词不是很敏感。
2014-1-16 23:02
0
雪    币: 773
活跃值: (442)
能力值: ( LV9,RANK:200 )
在线值:
发帖
回帖
粉丝
12
多谢楼主,好神奇
2014-1-16 23:03
0
雪    币: 11
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
还以为是vt呢……
2014-1-16 23:22
0
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
windows 内核 安全防护   这里面就用过这个词。 你out了!
2014-1-17 00:26
0
雪    币: 478
活跃值: (50)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
同4楼,哈哈
2014-1-17 01:08
0
雪    币: 882
活跃值: (350)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
虽然看不明白,好像很厉害那样
2014-1-17 02:02
0
雪    币: 28
活跃值: (42)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
我一般关注的重点都在内核的实现原理及算法和性能,对安全防护方面确实不太关注!
2014-1-17 08:41
0
雪    币: 77
活跃值: (48)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
MARK
2014-1-17 09:16
0
雪    币: 85
活跃值: (51)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
19
inline hook ,鉴定完毕,结贴............
2014-1-17 13:40
0
雪    币: 3229
活跃值: (3281)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
20
我以为是 HOOK 一字节的指令呢~
2014-1-17 13:59
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
跪求楼主修改标题和正文为inline hook吧
2014-1-19 23:26
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
靠,又被标题骗进来了
能不能改改啊
2014-1-21 01:11
0
游客
登录 | 注册 方可回帖
返回
//