inline hook后jmp指令解析错误问题?
比如图片中我hook的函数是MessageBoxA,我复制完原来MessageBoxA的前几条指令到其他的内存中,我们知道jmp指令里面使用的是解析过后的地址,是一个基于上下文环境的相对地址,那么我在其他的内存中执行这段代码就会报错,有什么办法解决这个呢?我目前想到的是,先在MessageBoxA头部写入一个jmp指令,跳到我们的函数,然后在我们的函数中恢复MessageBoxA挂钩,然后手动调用执行MessageBoxA后再重新挂钩,但是这样每次执行函数都要进行一次挂钩和解除挂钩,效率非常低,所以有什么办法能解决上面的问题呢?
希望大佬指点迷津,感谢! 我还想到一个方法,就是对所有这种相对寻址的指令进行解析,解析成绝对地址,然后写到自己的函数里,但是感觉太麻烦了,不知道有没有更简单的办法? 用现成的 Detour 库应该能正常处理这类情况,换它试试?
https://github.com/microsoft/Detours 爱飞的猫 发表于 2024-9-10 23:50
用现成的 Detour 库应该能正常处理这类情况,换它试试?
https://github.com/microsoft/Detours
感谢版主的回答,我之前也用过这个库,不过我估计它的底层源码也是把这种相对指令解析成绝对地址,我去看看它的源代码 爱飞的猫 发表于 2024-9-10 23:50
用现成的 Detour 库应该能正常处理这类情况,换它试试?
https://github.com/microsoft/Detours
对了,版主,我想问问论坛可以改名字吗,我想改名字,但是找不到设置的地方? 先弄明白32位程序吧!上来就搞64位,肯定有难度 小风o_0 发表于 2024-9-11 07:47
对了,版主,我想问问论坛可以改名字吗,我想改名字,但是找不到设置的地方?
改名字可以去申请区发帖,不过你cb不够,现在改不了 这种问题想自己搞的话,可以用汇编和反汇编引擎,先反汇编获取指令,再汇编到对应内存地址写入 苏紫方璇 发表于 2024-9-11 10:10
这种问题想自己搞的话,可以用汇编和反汇编引擎,先反汇编获取指令,再汇编到对应内存地址写入
是的 我是用的反汇编引擎计算的长度,不过我试了一下detours,它写入一个Jmp指令其实只改写了前面两条指令,不会覆盖到下面的相对地址,所以就不会出错 小风o_0 发表于 2024-9-11 10:43
是的 我是用的反汇编引擎计算的长度,不过我试了一下detours,它写入一个Jmp指令其实只改写了前面两条指 ...
你可以把 hook 地址挪到相对地址指令,看看它会不会正常处理。
它应该也是内置了个反汇编引擎,分析要改多少字节。
页:
[1]
2