首页
社区
课程
招聘
[求助]关于inline hook的问题!
发表于: 2010-1-5 22:36 7320

[求助]关于inline hook的问题!

2010-1-5 22:36
7320
去年黑防鹿剑发了一篇利用xde反汇编引擎实现通用inline hook内核的文章,文末说了下hook函数体的思路,这几天我想试试,但是遇到一堆问题,请各位指点。
还是以NtDeviceIoControlFile函数为例,在函数NtDeviceIoControlFile+25偏移处存在
e8d86e0000 Call nt!IopXxxControlFile(5字节)
将此处5字节替换为
E9XXXX
其中XXXX为DetourFun()绝对地址
DetourFun函数为钩子函数
DetourFunction()
{     
//自己功能
_asm
{
oldcode :     
nop
.....
nop
}
_asm push oldcode;
_asm pop  g_code_address;//传出nop地址
_asm ret;

}
在nop区应该拷贝Call nt!IopXxxControlFile,我使用的FF15XXXX
XXXX为IopXxxControlFile的绝对地址。
试验表明DetourFun被执行,但是执行到FF15XXXX时,访问异常错误。
跟踪过程中FF15XXXX已经可以反汇编为call nt!IopXxxControlFile。
访问异常错误地址非XXXX。
由于DetourFun地址离原地址较远,没试过E8XXXX。
调试机器上不了网,这里都是伪代码,请各位指点,谢谢啊!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
直接把call替换掉不就行了嘛,非要jmp
2010-1-6 08:07
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我是将原来的
e8d86e0000 Call nt!IopXxxControlFile
替换为jmp DetourFun
但是在DetourFun函数内要先实现Call nt!IopXxxControlFile,就是卡在这里了。
谢谢achillis的答复。

抱歉刚没看明白您答复。您的意思是替换原来CALL的操作数为DetourFun的地址是吗?那在DetourFun函数还是要实现CALL nt!IopXxxControlFile啊。
2010-1-6 14:51
0
雪    币: 292
活跃值: (70)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
应该是要保存进入钩子函数前的上下文环境吧。
2010-1-13 18:47
0
雪    币: 246
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
Jmp 相对地址  call 绝对地址
2010-1-15 09:25
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
2楼正解

JMP 和CALL 都是相对地址
2010-1-15 11:49
0
雪    币: 107
活跃值: (419)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
.......难道r0的inline hook有新方法??和r3不同?
2010-1-15 12:27
0
雪    币: 217
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
XXXX 怎么可能是绝对地址,E9明明是相对跳转。
FF15YYYYYYYY也不是跳向YYYYYYYY,而是跳向地址所存放的数据所指向的地址,你调试时的数据是长啥样的?
push YYYYYYYY
ret

mov reg32,YYYYYYYY
jmp reg32
才是跳向YYYYYYYY
2010-1-16 11:54
0
雪    币: 220
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
谢谢nameless和各位的答复,这几天学校放假,所以很久没上来了。
XXXX确实是DetourFun()的相对地址,已经可以顺利跳转到detourFun函数里。
现在遇到的问题是在detourFun函数里要先执行原来被替换的CALL ZZZZ,再跳转到原被替换函数的下一条指令地址,所以好像没法用jmp。
您所说的FF15YYYY是指令指针,我还没试验,手头代码不在,回头试试再说。
再次谢谢各位的细心答复!
2010-1-18 10:10
0
游客
登录 | 注册 方可回帖
返回
//