概述:MinHook——一个mini的Hook库。如何使用及原理解析
MinHook 说明
MinHook 是一个用C语言实现的 mini 的 Hook 项目,可同时适用于 x86/x64环境下,支持静态编译到项目中,目前 ⭐ Github Start 4K。
Github地址:TsudaKageyu/minhook: The Minimalistic x86/x64 API Hooking Library for Windows
使用
如何使用 MinHook ?
使用非常简单,初始化、创建Hook、启用Hook。大致代码如下所示:
Hook 实现修改弹窗: 实现Hook MsgBox
弹窗,该库的原理与我们上面手动实现的方式是相同的.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include <Windows.h> #include <MinHook.h>
#pragma comment(lib,"libMinHook.x86.lib")
typedef int (WINAPI *OldMessageBox)(HWND, LPCSTR, LPCSTR, UINT);
OldMessageBox fpMessageBoxA = NULL;
int WINAPI MyMessageBoxA(HWND hWnd, LPCSTR lpText, LPCSTR lpCaption, UINT uType) { int ret = fpMessageBoxA(hWnd, "Hook Inject", lpCaption, uType); return ret; }
void SetHook() { if (MH_Initialize() == MB_OK) { MH_CreateHook(&MessageBoxA, &MyMessageBoxA, reinterpret_cast<void**>(&fpMessageBoxA)); MH_EnableHook(&MessageBoxA); } }
void UnHook() { if (MH_DisableHook(&MessageBoxA) == MB_OK) { MH_Uninitialize(); } }
BOOL APIENTRY DllMain(HMODULE hModule,DWORD ul_reason_for_call,LPVOID lpReserved) { switch (ul_reason_for_call) { case DLL_PROCESS_ATTACH: SetHook(); break; case DLL_PROCESS_DETACH: UnHook(); break; } return TRUE; }
|
这里还有其他一些例子,参考文章:C/C++ MinHook 库的使用技巧 - lyshark - 博客园
MinHook 原理分析
参考文章: