本帖最后由 bester 于 2021-5-24 17:03 编辑
下载MHOOK库
下载地址:
https://github.com/TsudaKageyu/minhook/releases //源码
https://github.com/liunan1111/use-example-of-minhook //例子
添加到VC工程
需要的文件:<br>
1.libMinHook.x86.lib
2.MinHook.x86.lib
必要的项目设置
1.常规--字符集--使用Unicode字符集<br>
2.调试--命令 设置加载该动态链接库的宿主进程,需注意的是宿主进程需主动调用该动态链接库,如需远程注入调用,则无法使用VS进行调试动态链接库代码
实际应用
MH_Initialize 初始化
MH_CreateHook 创建HOOK
MH_EnableHook 开启HOOK
MH_DisableHook 关闭HOOK
MH_RemoveHook 卸载HOOK
MH_Uninitialize 卸载初始化
//该翻译仅为我个人理解
1.打开minhook-master\build\VC16中的MinHookVC16.sln文件,由于我的是vs2017 所以我直接选的是vc16,根据对于的vs版本选择对应的文件夹
2.点击生成--生成解决方案,得到libMinHook.x86.lib和MinHook.x86.lib并复制到我们的dll项目文件夹当中并引入
3.在我们的dll项目中的dllmain.cpp的最上边,include代码的下边,添加
#pragma comment(lib, "MinHook.x86.lib")
#pragma comment(lib, "libMinHook.x86.lib")
4.将minhook-master中的include文件夹复制到我们的dll项目文件夹当中并引入
#include"./include/MinHook.h"
5.由于我是调试环境,所以我用MFC写了一个demo动态加载DLLHOOK动态链接库,所以我写了一个没用hello导出函数,像远程注入到其他进程的话,不需要写这个导入函数
6.MinHOOK 相对于mhook使用是复杂些的,MH_CreateHook(&MessageBoxA, &DetourMessageBoxW, reinterpret_cast<LPVOID*>(&P_MyMessage)) != MH_OK 中注意,第一个是API函数,第二个是中转函数,第三个是函数指针
7.图中DetourMessageBoxW应该是DetourMessageBoxA,因为参数是窄字节的,我忘记把W改成A了 hhh。
|