C++17、x86/x64 挂钩库
运行环境:如 WIN10
涉及工具:VS2017/VS2019
如 VS2008、eclipse
编程语言:C++
如 C、java
以下为主题内容:
[*]capstone 和 zydis 都支持作为反汇编后端,并且是完全抽象的。
[*]内联挂钩(x86/x64 Detour)
[*]在序言处放置一个 jmp 到回调,然后分配一个蹦床以继续执行原始函数
[*]完全在中间指令对象上运行,反汇编引擎是可交换的,默认包含顶点
[*]编译时未知调用 conv 时的 JIT 回调(参见 ILCallback.cpp)
[*]遵循已经挂钩的功能
[*]解决间接调用,例如通过 iat 和 hooks 底层函数
[*]重新定位序言并解析所有位置相关的代码
[*]分支到覆盖部分被解析到新的移动位置
[*]从移动的序言回到原始部分的 jmp 是通过 jmp 表解决的
[*]已移动部分内的重定位已解决(不使用重定位表,使用引擎反汇编)
[*]x64 trampoline 不限于 +- 2GB,可以在任何地方,避免阴影空间 + 没有寄存器被破坏。
[*]如果内联钩子在中间步骤失败,则原始函数不会格式错误。所有写入都是批处理的,直到我们知道后面的步骤成功为止。
[*]完全支持跨架构挂钩。包括覆盖内存访问例程以允许从 32 位进程读取/写入 64 位内存。如果您足够聪明地编写回调所需的 shellcode,您可以从 32 位进程中挂钩 64 位。
[*]实现了有效的重新挂钩逻辑。这可用于对抗第三方将序言覆盖回原始字节。这被优化为几个简单的 memcpy,而不是在 hook() 中重新执行整个逻辑。
[*]运行时内联挂钩
[*]普通内联挂钩的所有优点,但 JIT 是与给定 typedef 和 A??BI 兼容的翻译存根。翻译存根会将参数移动到一个小结构中,该结构作为指向回调的指针传递,并允许欺骗返回值。这允许工具在运行时生成钩子翻译存根,允许在运行时才知道 typedef 的函数的完全内联钩子。
[*]虚拟功能交换 (VFuncSwap)
[*]交换 C++ VTable 中给定索引处的指针以指向回调
[*]虚拟表交换 (VTableSwap)
[*]在 c++ VTable 上执行深拷贝,并用新分配的副本替换指向表的指针。然后交换副本中的指针条目以指向回调
[*]软件断点挂钩(BreakpointHook)
[*]用 0xCC 覆盖函数的第一个字节并在异常处理程序中调用回调。为用户提供一种自动恢复原始覆盖字节的方法
[*]硬件断点挂钩(HWBreakpointHook)
[*]设置 CPU 的调试寄存器,为调用线程添加一个硬件执行 BP。在异常处理程序中调用回调。请记住,HW BP 是每个线程的,调用 hook() 的线程必须与被挂钩的线程相同。您可能会发现一个快速绕道,然后在绕道回调中设置 HWBP,然后取消挂钩成为一个有用的构造。
[*]导入地址表挂钩 (IatHook)
[*]通过 PEB 解析加载的模块,找到 IAT,然后将 thunk 指针交换到回调。
[*]导出地址表挂钩(EatHook)
[*]通过 PEB 解析加载的模块,找到 EAT,然后交换指针以导出到回调。由于这是一个 32 位的偏移量,我们可以选择分配一个蹦床存根,以在超过 32 位时将其完全传输到回调。`
下载地址 https://lomo.lanzouo.com/ipW1Jyucm4h
大佬无敌 被标题吸引进来了,回复看看 谢谢分享 威武霸气! 大佬牛批!顶!! 大佬无敌 好家伙,我直接好家伙!! 谢谢分享 感谢楼主