比如图片中我hook的函数是MessageBoxA,我复制完原来MessageBoxA的前几条指令到其他的内存中,我们知道jmp指令里面使用的是解析过后的地址,是一个基于上下文环境的相对地址,那么我在其他的内存中执行这段代码就会报错,有什么办法解决这个呢?.我目前想到的是,先在MessageBoxA头部写入一个jmp指令,跳到我们的函数,然后在我们的函数中恢复MessageBoxA挂钩,然后手动调用执行MessageBoxA后再重新挂钩,但是这样每次执行函数都要进行一次挂钩和解除挂钩,效率非常低,所以有什么办法能解决上面的问题呢?.希望大佬指点迷津,感谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)
qiusuper 挂钩到新地址上 新地址模拟函数的头部再调回来jump到函数的HOOK的地址下面 调用函数就直接调用该地址 这样就不需要恢复函数
yeyeshun 出错的两条指令,应该都是rip相关的,就是里面的内存地址、跳转目标都是以当前rip来计算偏移的,所以你把代码复制到新地址,就会出错。想维持原指令,只通过修复偏移地址的话,可能不太显示,因为储存偏移的空 ...
shuax 开头2行就足够hook了吧,应该和第三行汇编无关。