TsudaKageyu/minhook
GitHub: TsudaKageyu/minhook
MinHook 是一个用纯 C 编写的 Windows 平台极简 x86/x64 API Hooking 库,提供高效、低占用的函数拦截能力。
Stars: 5890 | Forks: 1071
# MinHook
[](https://opensource.org/licenses/BSD-2-Clause)
Windows 平台极简的 x86/x64 API Hooking 库
[https://www.codeproject.com/articles/MinHook-The-Minimalistic-x-x-API-Hooking-Libra](https://web.archive.org/web/20260130063806/https://www.codeproject.com/articles/MinHook-The-Minimalistic-x-x-API-Hooking-Libra#comments-section)
### 版本历史
- **v1.3.4 - 2025 年 3 月 28 日**
* 改进了枚举和挂起线程时的错误处理。
* 支持 Visual Studio 2022。
* 支持 CMake。
* 修复了使用 Clang 的编译问题。
* 修复了作为 C++ 代码编译的问题。
- **v1.3.3 - 2017 年 1 月 8 日**
* 添加了辅助函数 ```MH_CreateHookApiEx```。(感谢 asm256)
* 支持 Visual Studio 2017 RC。
- **v1.3.2.1 - 2015 年 11 月 9 日** (仅限 Nuget 包)
* 修复了对 Visual Studio 2015 的支持不足问题。
- **v1.3.2 - 2015 年 11 月 1 日**
* 支持 Visual Studio 2015。
* 支持 MinGW。
- **v1.3.2-beta3 - 2015 年 7 月 21 日** (仅限 Nuget 包)
* 支持 MinGW。(实验性)
- **v1.3.2-beta2 - 2015 年 5 月 18 日**
* 修复了一些细微的 bug。(感谢 RaMMicHaeL)
* 添加了辅助函数 ```MH_StatusToString```。(感谢 Jan Klass)
- **v1.3.2-beta - 2015 年 5 月 12 日**
* 修复了 x64 模式下可能出现的线程死锁问题。(感谢 Aleh Kazakevich)
* 进一步减小了资源占用。
* 支持 Visual Studio 2015 RC。(实验性)
- **v1.3.1.1 - 2015 年 4 月 7 日** (仅限 Nuget 包)
* 支持 WDK8.0 和 8.1。
- **v1.3.1 - 2015 年 3 月 19 日**
* 自 v1.3.1-beta 以来没有重大更改。
- **v1.3.1-beta - 2015 年 3 月 11 日**
* 添加了辅助函数 ```MH_CreateHookApi```。(感谢 uniskz)。
* 修复了某些工具误报的内存泄漏问题。
* 修复了一个导致兼容性退化的问题。
- **v1.3 - 2014 年 9 月 13 日**
* 自 v1.3-beta3 以来没有重大更改。
- **v1.3-beta3 - 2014 年 7 月 31 日**
* 修复了一些小 bug。
* 改进了内存管理。
- **v1.3-beta2 - 2014 年 7 月 21 日**
* 将参数更改为对 Windows 友好的类型。(将 void* 改为 LPVOID)
* 修复了一些小 bug。
* 重新组织了源文件。
* 进一步减小了资源占用。
- **v1.3-beta - 2014 年 7 月 17 日**
* 使用纯 C 重写,以减少资源占用和内存使用。(由 Andrey Unis 建议)
* 简化了整个代码库,使其更具可读性和可维护性。
* 将许可证从 3-clause BSD 许可证更改为 2-clause BSD 许可证。
- **v1.2 - 2013 年 9 月 28 日**
* 移除了 boost 依赖([jarredholman](https://github.com/jarredholman/minhook))。
* 修复了 GetRelativeBranchDestination 函数中的一个小 bug([pillbug99](http://www.codeproject.com/Messages/4058892/Small-Bug-Found.aspx))。
* 添加了 ```MH_RemoveHook``` 函数,用于移除使用 ```MH_CreateHook``` 函数创建的 hook。
* 添加了以下函数,以便一次性启用或禁用多个 hook:```MH_QueueEnableHook```、```MH_QueueDisableHook```、```MH_ApplyQueued```。这是处理多个 hook 的首选方法,因为每次调用 `MH_EnableHook` 或 `MH_DisableHook` 都会挂起并恢复所有线程。
* 当传入 ```MH_ALL_HOOKS``` 参数时,使函数 ```MH_EnableHook``` 和 ```MH_DisableHook``` 能够启用/禁用所有已创建的 hook。这也是一种处理多个 hook 的高效方法。
* 如果目标函数太小而无法使用跳转指令进行 patch,MinHook 会尝试将跳转指令放置在函数上方。如果同样失败,```MH_CreateHook``` 函数将返回 ```MH_ERROR_UNSUPPORTED_FUNCTION```。这修复了在 Windows 7 x64 上 hook LoadLibraryExW 函数的问题([由 Obble 报告](http://www.codeproject.com/Messages/4578613/Re-Bug-LoadLibraryExW-hook-fails-on-windows-2008-r.aspx))。
- **v1.1 - 2009 年 11 月 26 日**
* 更改了接口,一次性创建 hook 和 trampoline 函数,以防止在创建 trampoline 函数之前调用 detour 函数。([由 xliqz 报告](http://www.codeproject.com/Messages/3280374/Unsafe.aspx))
* 将函数名从 ```MinHook_*``` 缩短为 ```MH_*```,使其更便于使用。
- **v1.0 - 2009 年 11 月 22 日**
* 初始版本。
### 构建 MinHook - 使用 vcpkg
你可以使用 [vcpkg](https://github.com/Microsoft/vcpkg) 依赖管理器下载并安装 MinHook:
```
git clone https://github.com/microsoft/vcpkg
.\vcpkg\bootstrap-vcpkg.bat
.\vcpkg\vcpkg integrate install
.\vcpkg\vcpkg install minhook
```
vcpkg 中的 MinHook 移植版本由 Microsoft 团队成员和社区贡献者保持更新。如果版本已过期,请在 vcpkg 仓库中[创建 issue 或提交 pull request](https://github.com/Microsoft/vcpkg)。
标签:API Hook, Bash脚本, C/C++, Gophish, 事务性I/O, 客户端加密, 底层开发, 开发库, 端点可见性