Compile Detours.lib
最近想起来看了下Microsoft出的Detours Express工具。出于研究目的,于是试了下这个工具。
事实上,开始使用的时候,发现了一个问题,缺少Detours.lib。
适用版本:Detours Express 3.0(目前最新版)
首先是从http://research.microsoft.com/en-us/projects/detours/下载Detours Express 3.0,然后安装。默认安装目录为C:\Program Files\Microsoft Research\Detours Express 3.0。(x86环境)
复制Detours Express 3.0下的src文件夹和system.mak至Visual Studio目录下的VC目录中。默认VS2008目录为C:\Program Files\Microsoft Visual Studio 9.0\VC。使用VS2008命令提示符(即加载vcvarsall.bat),进入拷贝到的C:\Program Files\Microsoft Visual Studio 9.0\VC\src目录,输入namke即可。
生成的文件分别放入lib和include,主要是方便以后的使用。
然后放一个示例就好了。
#include <Windows.h>
#include <detours.h>
#pragma comment(lib,"detours.lib")
static LONG dwSlept = 0;
static VOID(WINAPI *TrueSleep)(DWORD dwMilliseconds) = Sleep;
VOID WINAPI TimedSleep(DWORD dwMilliseconds)
{
OutputDebugString("API Hooked!");
}
int WINAPI WinMain(HINSTANCE hInstance, // handle to current instance
HINSTANCE hPrevInstance, // handle to previous instance
LPSTR lpCmdLine , // command line
int nCmdShow)
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourAttach(&(PVOID&)TrueSleep, TimedSleep);
DetourTransactionCommit();
Sleep(1);
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread());
DetourDetach(&(PVOID&)TrueSleep, TimedSleep);
DetourTransactionCommit();
return 0;
}
// Hook前:
7C802442 mov edi,edi
7C802444 push ebp
7C802445 mov ebp,esp
7C802447 push 0
7C802449 push dword ptr [ebp+8]
7C80244C call 7C80239C
7C802451 pop ebp
7C802452 ret 4
// Hook后:
7C802442 jmp TimedSleep (41103Ch)
7C802447 push 0
7C802449 push dword ptr [ebp+8]
7C80244C call 7C80239C
7C802451 pop ebp
7C802452 ret 4
更具体的使用说明,则可以参见C:\Program Files\Microsoft Research\Detours Express 3.0下的Detours.chm。
BTW:发现一个非常奇怪的问题,仔细看了一下是示例代码的问题,即,使用示例进行withdll -d:traceapi.dll cmd.exe测试的时候,发现使用了CreateProcessWithTokenW函数,这个函数是Vista以后系统才有的,即,例子是无法在没修改的情况下在Windows XP上运行的。
BTW2:编译例子如traceapi.dll时会报错,主要是rc的参数/nologo的问题,这个需要修改mak文件解决。
------------------------------
文章的授權使用CC BY-ND2.5協議。凡是標示“轉載”的文章,均來源於網絡並儘可能標註作者。如果有侵犯您的權益,請及時聯繫刪除或者署名、授權。
Gtalk/Email: cmd4shell [at] gmail.com