TsudaKageyu/minhook

GitHub: TsudaKageyu/minhook

MinHook 是一个用纯 C 编写的 Windows 平台极简 x86/x64 API Hooking 库,提供高效、低占用的函数拦截能力。

Stars: 5890 | Forks: 1071

# MinHook [![许可证](https://img.shields.io/badge/License-BSD%202--Clause-orange.svg)](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, 客户端加密, 底层开发, 开发库, 端点可见性