写在前面的话
演示环境VS2019+Windows10+微信win3.0.0.57+Detour
Detour库编译
项目地址:https://github.com/microsoft/Detours
代码直接git clone
拉取下来,打开VS2019的开发环境配置
nmake /f makefile
配置VS2019
配置项目属性
或者不用操作第三步
#pragma comment (lib,"detours.lib")
这样环境就算配置好了…
下面贴一下关键代码吧…
#include "pch.h"
#include "detours.h"
#pragma comment (lib,"detours.lib")
/*原函数指针*/
int ( __stdcall *pTextOutW)(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c) = TextOutW;
/*hook函数*/
int __stdcall MyTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_reads_(c) LPCWSTR lpString, _In_ int c)
{
if (c)
{
printf("%S\n", lpString);
}
return pTextOutW(hdc, x, y, lpString, c);
}
/*开始hook*/
VOID StartHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)pTextOutW, MyTextOutW);
DetourTransactionCommit();
}
/*解除hook*/
VOID EndHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)pTextOutW, MyTextOutW);
DetourTransactionCommit();
}
效果如下:
完整代码:Github
最后的话
关于为什么hookTextOutW
函数,调试一下就知道了…