首页
社区
课程
招聘
HOT PATCH 方式Hook API的问题
发表于: 2013-12-15 14:46 8186

HOT PATCH 方式Hook API的问题

2013-12-15 14:46
8186
我们都知道HOT PATCH的方式是用API前面的7个字节来做PATCH,
修改之进行跳转.
一般的API前面是5个NOP, 还有一句MOV EDI,EDI占两个字节,一共7个字节.

但今天在hook ReadFile发现有问题,
用OD查看ReadFile在5个NOP后,是一句 PUSH 0C.
我了个去, 神马情况?
那还怎么用HOT PATCH的方式来HOOK呢?

难道要在自己的ReadFile函数后面加上PUSH OC ?

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 31
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
push 0xc不也是两个字节么,只是pacth的时候要记得执行这两个字节,比mov edi,edi稍微麻烦点。这类开头是push的貌似也不少
2013-12-15 16:23
0
雪    币: 1392
活跃值: (4867)
能力值: ( LV13,RANK:240 )
在线值:
发帖
回帖
粉丝
3
MOV EDI,EDI根本没用,所以一般的正规的API5个字节就够了。

话说既然有detours库何必自己写呢?
2013-12-15 16:40
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
Hook的时候管原来是什么呢,覆盖了就到自己的函数里执行下被覆盖后的代码不就可以了吗?
2013-12-15 18:39
0
雪    币: 2210
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
谢谢大家的回复.
已经按照1楼lovelyday的方法,在patch时把push 0C处理进去了
用push + jmp的方法代替了call,把push 0C patch了进去.
但有趣的是要计算EIP的值,直接取寄存器的值还不行,后来用的
call lable;
lable:
pop eax;
的方法来得到了EIP.

总之谢谢大家了回复
2013-12-15 21:25
0
游客
登录 | 注册 方可回帖
返回
//