TsudaKageyu/minhook
GitHub: TsudaKageyu/minhook
一个极简的 Windows x86/x64 API Hooking 库,用于拦截和重定向函数调用
Stars: 5595 | Forks: 1044
# 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
### 版本历史
- **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 更改为 2-clause BSD License。
- **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_EnableHook``` 和 ```MH_DisableHook``` 函数在传入 ```MH_ALL_HOOKS``` 参数时能够启用/禁用所有已创建的 hook。这也是一种处理多个 hook 的高效方法。
* 如果目标函数太小而无法用跳转指令修补,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 Hooking, Bash脚本, C/C++, _detours, Hook 库, inline hook, MinHook, Windows 开发, x64, x86, 中高交互蜜罐, 事务性I/O, 二进制分析, 云安全运维, 云资产清单, 内存修改, 内核交互, 函数劫持, 客户端加密, 开源库, 恶意软件开发, 搜索引擎爬虫, 游戏安全, 端点可见性, 系统编程, 逆向工程