Detours使用——踩坑之路

在官网安装https://github.com/microsoft/detours

下载下来后如下

现在我们需要nmake运行makefile文件

这需要我们下载vs(visual studio Visual Studio: IDE and Code Editor for Software Developers and Teams),不建议使用vscode,我整了好久都没整出来

下载的时候记住你下载的位置,默认·下载的话一般在这里面

C:\Program Files\Microsoft Visual Studio

然后我们需要找到nmake.exe所在的位置

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.38.33130\bin\Hostx64\x64

(我是x64,所以后面是Hostx64)

然后将这个路径添加到系统环境变量中,这样我们就可以使用namke了

进入我们保存Detours的文件夹下面

现在还不能直接nmake,因为会出现报错:fatal error C1034: windows.h: 不包括路径集(踩坑之一)

这个时候需要先运行vs中的一个bat文件,我的路径如下,直接将这个文件拖入cmd命令窗口中

C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvars64.bat

然后就可以运行nmake,但是我最后还是有报错,不过并不影响后续的操作,因此暂时忽略

运行完成后可以看到Detours里面的src文件夹下面有detours.h与detours.cpp,在lib.x64文件夹下面有detours.lib,我们后续使用Detours就需要这几个文件。

在vs2022中使用Detours

注意,这里使用这几个文件的需要将文件复制到项目下面来,打开你的项目文件,确保下面有这几个文件,因为vs添加文件的话是不会将文件复制过来的(踩坑之一)。

一个使用Detours实现Inline HOOK的实例代码

#include <windows.h>
#include <iostream>
​
#include "detours.h"
#pragma comment (lib,"detours.lib")
​
// 声明被Hook的原始函数指针
typedef BOOL(WINAPI* PFnMessageBoxW)(HWND, LPCWSTR, LPCWSTR, UINT);
​
// 定义一个指向原始MessageBoxW函数的指针
PFnMessageBoxW pfnMessageBoxW = MessageBoxW;
​
// 自定义的Hook函数,替代MessageBoxW
BOOL WINAPI MyMessageBoxW(HWND hWnd, LPCWSTR lpText, LPCWSTR lpCaption, UINT uType) {
    // 在这里可以添加你的Hook逻辑
    std::wcout << "成功HOOK" << std::endl;
​
    // 调用原始的MessageBoxW函数
    return pfnMessageBoxW(hWnd, L"Hooked!", lpCaption, uType);
}
​
int main() {
    // 初始化Detours库
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourAttach(&(PVOID&)pfnMessageBoxW, MyMessageBoxW); // 进行Hook
    DetourTransactionCommit();
​
    // 调用MessageBoxW,此时将调用到MyMessageBoxW
    MessageBoxW(nullptr, L"Hello, Detours!", L"Original", MB_OK);
​
    // 卸载Detours
    DetourTransactionBegin();
    DetourUpdateThread(GetCurrentThread());
    DetourDetach(&(PVOID&)pfnMessageBoxW, MyMessageBoxW); // 卸载Hook
    DetourTransactionCommit();
​
    return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值