hook api 实现的无非就是实现几种组合:
1:hook api执行自己的函数 + 执行原API + 恢复hook
2:hook api执行自己的函数 + 不执行原API + 恢复hook
3:hook api执行自己的函数 + 执行原API + 不恢复hook
4:hook api执行自己的函数 + 不执行原API + 不恢复hook
你想到的肯定是直接把hook api头部的5个byte偷到自己的函数里执行,这种方法的确可以 不过会有几个问题 ,假设api头部 2 条指令 4byte 3条指令 6byte 你只偷了5个字节的话肯定是不行的 得偷6个字节,
方法就是用反汇编引擎确定字节, 用户层还好毕竟不差那么点代码,驱动层就麻烦了,哪经得起这种奢侈,所以用反汇编引擎始终不是办法
我的解决方法
1:hook前保存hook函数的5个byte //无论什么方法hook 这步肯定是必须的
2:修改要hook的api第一个byte为0e9就是far jmp 其实也可以修改成0e8h 不过需要用汇编
3:修改后面4字节为offset 需要计算 自己函数地址-API地址-5
4:现在已经完成hook了 可以在自己函数里解决上面那几种方法了
4.1: hook api执行自己的函数 + 执行原API + 恢复hook?
在自己的函数里首先恢复hook api头部的5个字节
执行自己的代码
执行原api
4.2:hook api执行自己的函数 + 不执行原API + 恢复hook?
在自己的函数里首先恢复hook api头部的5个字节
执行自己的代码
4.3:hook api执行自己的函数 + 执行原API + 不恢复hook?
在自己的函数里首先恢复hook api头部的5个字节
执行自己的代码
执行原api
hook原api
4.4:hook api执行自己的函数 + 不执行原API + 不恢复hook?
在自己的函数里首先恢复hook api头部的5个字节
执行自己的代码
执行原api
hook原api
可能我的表达能力有点让人无奈,看不懂我说的话没关系看代码,我尽量写的简洁了,只为了表达一个思路
[课程]FART 脱壳王!加量不加价!FART作者讲授!