文章目录
- Detours介绍
- Detours配置
- Detours进行Sleep Hook
Detours介绍
Detours是微软研究院开发的一款软件工具,用于Windows平台上的应用程序重定向和修改。
它可以在运行时修改应用程序的执行路径,允许开发人员注入自定义代码来改变应用程序的
行为,而不需要修改其源代码。Detours通常用于进行应用程序的跟踪、调试、性能分析以及
行为修改等任务。Detours的工作原理是通过截取目标应用程序的API调用,然后将这些调用
重定向到开发人员自己编写的代码中。这使得开发人员可以在应用程序执行过程中拦截、检
查和修改其行为,从而实现各种目的,比如记录函数调用、插入日志、进行性能分析、实现安
全措施等。Detours提供了一个灵活的API,使得开发人员可以轻松地编写自己的重定向代码,
并且支持对32位和64位的应用程序。它在Windows平台上被广泛应用于软件开发、调试和研
究领域,特别是在需要对二进制程序进行修改和分析的场景下,Detours是一个非常有用的工具。
Detours配置
1.使用新版VS支持NuGet安装
对项目右键单击管理NuGet程序包
2. 在浏览中输入Detours并搜索下载第一个并安装
3.安装完成会项目目录中可以看到Detours
4.配置include目录
正常情况下NuGet将自动适配如果出现问题手动进行如下配置。
该目录位于packages\Detours.4.0.1\lib\native\include下打开VS的项目属性打开
C/C++ -> 常规 -> 附件包含目录将include输入进去。
5.配置lib库文件
在C/C++ -> 输入 -> 附加依赖项中填写libs目录中对应位数的lib文件。
Detours进行Sleep Hook
下面是进行的Sleep Hook演示代码,在调用Sleep函数的时候进行一个弹窗。
#include <Windows.h>
#include "detours.h"
static VOID(WINAPI* OldSleep)(_In_ DWORD dwMilliseconds) = Sleep;
VOID WINAPI NewSleep(_In_ DWORD dwMilliseconds)
{
MessageBoxA(0, "hook ok", "hook ok", 0);
return OldSleep(dwMilliseconds);
}
void Hook(PVOID* oldAddress, PVOID newAddress)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(oldAddress, newAddress);
DetourTransactionCommit();
}
void UnHook(PVOID* oldAddress, PVOID newAddress)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(oldAddress, newAddress);
DetourTransactionCommit();
}
int main()
{
Hook(&(PVOID&)OldSleep, NewSleep);
Sleep(0);
return 0;
}