小风o_0 发表于 2024-9-10 22:04

inline hook后jmp指令解析错误问题?

比如图片中我hook的函数是MessageBoxA,我复制完原来MessageBoxA的前几条指令到其他的内存中,我们知道jmp指令里面使用的是解析过后的地址,是一个基于上下文环境的相对地址,那么我在其他的内存中执行这段代码就会报错,有什么办法解决这个呢?
我目前想到的是,先在MessageBoxA头部写入一个jmp指令,跳到我们的函数,然后在我们的函数中恢复MessageBoxA挂钩,然后手动调用执行MessageBoxA后再重新挂钩,但是这样每次执行函数都要进行一次挂钩和解除挂钩,效率非常低,所以有什么办法能解决上面的问题呢?

希望大佬指点迷津,感谢!

小风o_0 发表于 2024-9-10 22:14

我还想到一个方法,就是对所有这种相对寻址的指令进行解析,解析成绝对地址,然后写到自己的函数里,但是感觉太麻烦了,不知道有没有更简单的办法?

爱飞的猫 发表于 2024-9-10 23:50

用现成的 Detour 库应该能正常处理这类情况,换它试试?
https://github.com/microsoft/Detours

小风o_0 发表于 2024-9-11 07:46

爱飞的猫 发表于 2024-9-10 23:50
用现成的 Detour 库应该能正常处理这类情况,换它试试?
https://github.com/microsoft/Detours

感谢版主的回答,我之前也用过这个库,不过我估计它的底层源码也是把这种相对指令解析成绝对地址,我去看看它的源代码

小风o_0 发表于 2024-9-11 07:47

爱飞的猫 发表于 2024-9-10 23:50
用现成的 Detour 库应该能正常处理这类情况,换它试试?
https://github.com/microsoft/Detours

对了,版主,我想问问论坛可以改名字吗,我想改名字,但是找不到设置的地方?

xlhwxyh 发表于 2024-9-11 09:42

先弄明白32位程序吧!上来就搞64位,肯定有难度

苏紫方璇 发表于 2024-9-11 10:07

小风o_0 发表于 2024-9-11 07:47
对了,版主,我想问问论坛可以改名字吗,我想改名字,但是找不到设置的地方?

改名字可以去申请区发帖,不过你cb不够,现在改不了

苏紫方璇 发表于 2024-9-11 10:10

这种问题想自己搞的话,可以用汇编和反汇编引擎,先反汇编获取指令,再汇编到对应内存地址写入

小风o_0 发表于 2024-9-11 10:43

苏紫方璇 发表于 2024-9-11 10:10
这种问题想自己搞的话,可以用汇编和反汇编引擎,先反汇编获取指令,再汇编到对应内存地址写入

是的 我是用的反汇编引擎计算的长度,不过我试了一下detours,它写入一个Jmp指令其实只改写了前面两条指令,不会覆盖到下面的相对地址,所以就不会出错

爱飞的猫 发表于 2024-9-11 17:05

小风o_0 发表于 2024-9-11 10:43
是的 我是用的反汇编引擎计算的长度,不过我试了一下detours,它写入一个Jmp指令其实只改写了前面两条指 ...

你可以把 hook 地址挪到相对地址指令,看看它会不会正常处理。

它应该也是内置了个反汇编引擎,分析要改多少字节。
页: [1] 2
查看完整版本: inline hook后jmp指令解析错误问题?