首页
社区
课程
招聘
[求助]Inline Hook中,如何计算jmp指令应该跳转到哪里?
发表于: 2008-6-26 18:06 8998

[求助]Inline Hook中,如何计算jmp指令应该跳转到哪里?

2008-6-26 18:06
8998
我用的Inline Hook方法是备份原函数,修改原函数的入口前5字节,执行自己的代码之后再跳转到备份的函数中执行.

但是,在跳转的时候不知道怎么计算jmp后面的数值.例如:

E9 34 0A 00 00   jmp         BeHookedFunction (411B10h)

保存原函数的地址我是用VirualAlloc函数申请到的,地址是0x003b0000,如果直接jmp到0x003b0000,则是这样的

E9 00 3B 00 00   jmp         ___xi_z+101h (415615h)

415615h处都是cccccc,程序crash.

我知道E9是相对跳转,意思是跳到 当前地址+ 0A 34 处,但是如何求得当前地址?如何改写,才能跳到0x003b0000?

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

收藏
免费 0
支持
分享
最新回复 (6)
雪    币: 212
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
搜索一下非安全的汇编ring3下实现HOOK API这边文章,里面讲解的办法就是采用JMP跳转法来实现的。
2008-6-26 21:08
0
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
你的自定义函数地址---JMP在的地址---JMP的指令长度==你想要的
2008-6-26 23:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
// 10001032   E9 79000000     JMP     100010B0
// E9 = JMP
// 79000000 --> 00000079
// 00000079 + 5 = 0000007E
// 0000007E + 10001032 = 100010B0
// 得出JMP     100010B0
2008-6-27 10:30
0
雪    币: 269
活跃值: (25)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
5
你的自定义函数地址---JMP在的地址---JMP的指令长度==你想要的


3楼正解……论坛里面inline很多 多看看代码就ok……
2008-6-27 14:17
0
雪    币: 218
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
NaX
6
0xE9 (code) -> code = 目标地址(就是你hook函数所在地址) - 源地址(就是被hook地方地址) - 5
2008-6-28 07:29
0
雪    币: 211
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
谢谢大家的帮助!试验成功!
2008-6-29 11:15
0
游客
登录 | 注册 方可回帖
返回
//