概述:MinHook——一个mini的Hook库。如何使用及原理解析
MinHook 说明
MinHook 是一个用C语言实现的 mini 的 Hook 项目,可同时适用于 x86/x64环境下,支持静态编译到项目中,目前 :star: Github Start 4K。
Github地址:TsudaKageyu/minhook: The Minimalistic x86/x64 API Hooking Library for Windows
使用
如何使用 MinHook ?
使用非常简单,初始化、创建Hook、启用Hook。大致代码如下所示:
Hook 实现修改弹窗: 实现Hook MsgBox弹窗,该库的原理与我们上面手动实现的方式是相同的.
/*
代码来自 C/C++ MinHook 库的使用技巧 - lyshark - 博客园
https://www.cnblogs.com/LyShark/p/13653435.html
*/
#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 原理分析
参考文章: