TsudaKageyu/minhook

GitHub: TsudaKageyu/minhook

一个极简的 Windows x86/x64 API Hooking 库,用于拦截和重定向函数调用

Stars: 5595 | Forks: 1044

# MinHook [![License](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 ### 版本历史 - **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, 二进制分析, 云安全运维, 云资产清单, 内存修改, 内核交互, 函数劫持, 客户端加密, 开源库, 恶意软件开发, 搜索引擎爬虫, 游戏安全, 端点可见性, 系统编程, 逆向工程