去年黑防鹿剑发了一篇利用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。
调试机器上不了网,这里都是伪代码,请各位指点,谢谢啊!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)