HookDump
EDR 函数钩子转储
请参考 Zeroperil 博客文章获取更多信息 https://zeroperil.co.uk/hookdump/
构建源码
- 要构建此项目,你需要 Visual Studio 2019(社区版即可)和 CMake。批处理文件 Configure.bat 将创建两个包含 Visual Studio 解决方案的构建目录。
- 如果使用正确的 CMake 命令行,项目可能可以使用 MinGW 构建,但此过程未经测试,你的体验可能有所不同。
- 项目依赖于 zydis 反汇编器,因此在配置项目之前,请确保更新 git 中的子模块。
- 此项目包含 32 位和 64 位版本,EDR 可能会在 32/64 位中挂钩不同的函数,因此构建并运行两个可执行文件可能会提供更完整的结果。
注意事项
- 一些 EDR 会替换 TEB 结构中的 WOW 存根(特别是 Wow32Reserved),以便挂钩 32 位二进制文件的系统调用。在这种情况下,你可能会看到零个钩子,因为 NTDLL 中没有跳转指令。最可能的情况是,你会在 x64 版本中看到钩子,因为该版本使用 syscall 指令而非 WOW 存根进行系统调用。
- 我们注意到 Windows Defender 不使用任何用户模式钩子。
- 此工具设计为以标准用户身份运行,无需提升权限。
检测到的钩子类型
JMP
函数中已修补了一个跳转指令,用于重定向执行流。
WOW
检测到 WOW64 系统调用存根被挂钩,这允许过滤所有系统调用。
EAT
导出地址表中的地址与磁盘上副本的导出地址表中的地址不匹配。
GPA
GetProcAddress 钩子,一个实验性功能,仅在详细模式下输出,当 GetProcAddress 的结果与手动解析的函数地址不匹配时显示。你的体验可能不同,需要谨慎验证结果。
验证
真正验证程序是否正常工作的唯一方法是在调试器中检查钩子是否存在。如果你得到零钩子的结果但预期会看到不同的情况,请先在调试器中验证,然后与我们联系。