概述
PolyHook 2.0 是一款采用 C++20 标准编写的 x86/x64 Hook 库,由 stevemk14ebr 开发维护。它提供了多种 Hook 技术实现,是 Windows 平台下逆向工程和安全研究的重要基础设施。
- GitHub Stars: ⭐ 1,856
- 语言: C++
- 许可证: MIT
- Fork 数: 252
- 最近更新: 2025年11月
支持的 Hook 技术
PolyHook 2.0 集成了目前主流的 Hook 技术:
| Hook 类型 | 支持架构 | 说明 |
|---|---|---|
| Inline Hook | x86/x64 | 经典的函数入口修改 Hook |
| VTable Hook | x86/x64 | 虚函数表 Hook |
| Veh Hook | x86/x64 | VEH (Vectored Exception Handling) Hook |
| HWBP Hook | x86/x64 | 硬件断点 Hook |
| PolyHook 模式 | x86/x64 | 动态代码重写 |
核心特性
1. C++20 现代设计
PolyHook 2.0 采用了现代 C++20 特性:
- Concepts 约束模板参数
- RAII 资源管理
- 类型安全的接口设计
- 零开销抽象
2. 跨架构支持
同时支持 32 位和 64 位架构,自动适配不同的指令集和调用约定。
3. 动态代码重写
PolyHook 2.0 最具特色的功能之一是动态代码重写(Dynamic Re-Writing):
- 在运行时重写函数内联代码
- 保持原始函数语义的同时注入 Hook
- 支持对指令边界进行精确处理
使用示例
#include "polyhook2/Detour/x86Detour.hpp"
// 原始函数
typedef int(__stdcall* tMessageBoxA)(HWND, LPCSTR, LPCSTR, UINT);
tMessageBoxA oMessageBoxA = nullptr;
// Hook 函数
int __stdcall hkMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) {
std::cout << "MessageBoxA called: " << lpText << std::endl;
return oMessageBoxA(hWnd, "Hooked!", lpCaption, uType);
}
// 安装 Hook
PLH::x86Detour detour;
detour.setupHook((uint64_t)MessageBoxA, (uint64_t)hkMessageBoxA, (uint64_t*)&oMessageBoxA);
detour.hook();
安装集成
通过 vcpkg
# x64
vcpkg install polyhook2:x64-windows
# x86
vcpkg install polyhook2:x86-windows
手动构建
git clone --recursive https://github.com/stevemk14ebr/PolyHook_2_0.git
cd PolyHook_2_0
git submodule update --init --recursive
cmake -B"./_build" -DCMAKE_INSTALL_PREFIX="./_install/" -DPOLYHOOK_BUILD_SHARED_LIB=ON
cmake --build "./_build" --config Release --target install
应用场景
- 游戏 Modding:Hook 游戏函数实现功能扩展
- 安全检测:Hook 系统 API 监控恶意行为
- 逆向工程:动态分析函数调用过程
- 性能监控:Hook 关键路径分析性能瓶颈
社区生态
PolyHook 2.0 拥有活跃的 Gitter 社区,同时在 CodeProject 上有三篇深度技术文章:
- Article 1: PolyHook — C++ x86/x64 Hooking Library
- Article 2: PolyHook 2.0 — C++17 x86/x64 Hooking Library
- Article 3: WOW64 Subsystem Internals and Hooking Techniques
总结
PolyHook 2.0 以其丰富的 Hook 技术支持和现代 C++ 设计,成为 Windows Hook 库领域的重要项目。对于安全研究人员来说,它是理解和实现 Hook 技术的优秀学习资源;对于实际项目而言,它提供了可直接使用的可靠 Hook 基础设施。MIT 许可证也让它可以灵活应用于各类商业和非商业项目中。
文档信息
- 本文作者:zhupite
- 本文链接:https://zhupite.com/sec/polyhook2.html
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)