x64(学习笔记) - 3(x64InlineHook)

inlineHook 过程

  1. 选择hook方式
  2. 获取hook地址(如果是导入表的函数注意jmp)
  3. 计算hook掉的字节(汇编引擎 / 手动计算)
  4. 保存要被替换掉的汇编,计算被替换掉字节下一行的地址
  5. 构建hook shellcode
  6. shellCode替换掉目标地址的代码(为了不破坏原有寄存器,需要保存当前寄存器,火哥推荐的是 构建的shellcode 使用asm push所有寄存器 然后提升栈顶 调用自己的函数 恢复栈顶 然后pop)
  7. 构建调用原函数的 shell code, 执行被替换掉的汇编,然后jmp到之前存储的地址

要点

  • 因为原有call都是相对偏移,如果hook call相关的 比较麻烦
  • 不能直接hook 函数的地址 因为可能会有jmp跳转,直接调用的函数的地址 可能不是函数头是jmp
    需要使用GetModuleHandleA 然后再GetProcAddress 获取到函数地址

注意


:D 一言句子获取中...