x64(学习笔记) - 3(x64InlineHook)
inlineHook 过程
- 选择hook方式
- 获取hook地址(如果是导入表的函数注意jmp)
- 计算hook掉的字节(汇编引擎 / 手动计算)
- 保存要被替换掉的汇编,计算被替换掉字节下一行的地址
- 构建hook shellcode
- shellCode替换掉目标地址的代码(为了不破坏原有寄存器,需要保存当前寄存器,火哥推荐的是 构建的shellcode 使用asm push所有寄存器 然后提升栈顶 调用自己的函数 恢复栈顶 然后pop)
- 构建调用原函数的 shell code, 执行被替换掉的汇编,然后jmp到之前存储的地址
要点
- 因为原有call都是相对偏移,如果hook call相关的 比较麻烦
- 不能直接hook 函数的地址 因为可能会有jmp跳转,直接调用的函数的地址 可能不是函数头是jmp
需要使用GetModuleHandleA 然后再GetProcAddress 获取到函数地址