2023年8月1日发(作者:)
Detour安装及简单使⽤实例Detours是微软开发的⼀个函数库,可⽤于捕获系统API。在⽤其进⾏程序开发之前,得做⼀些准备⼯作:来看⼏个关键函数:
在Detours库中,驱动detours执⾏的是函数
[cpp] view plain copy
LONG DetourAttach(
PVOID * ppPointer,
PVOID pDetour
);这个函数的职责是挂接⽬标API,函数的第⼀个参数是⼀个指向将要被挂接函数地址的函数指针,第⼆个参数是指向实际运⾏的函数的指针,⼀般来说是我们定义的替代函数的地址。但是,在挂接开始之前,还有以下⼏件事需要完成:
需要对detours进⾏初始化. DetourTransactionBegin()
需要更新进⾏detours的线程. DetourUpdateThread(GetCurrentThread())
在这两件事做完以后,detour函数才是真正地附着到⽬标函数上。
在此之后,调⽤DetourTransactionCommit()是detour函数起作⽤并检查函数的返回值判断是正确还是错误。
想把HOOK的函数改回來则可以使⽤
[cpp] view plain copy
LONG WINAPI DetourDetach(
PVOID *ppPointer,
PVOID pDetour)
参数与DetourAttach相同付使⽤简单例⼦:HOOK MessageBoxW函数
[cpp] view plain copyinclude “stdafx.h”include “DetourHook.h”includepragma comment(lib, “”)pragma comment(lib, “”)static int (WINAPI* OLD_MessageBoxW)(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)=MessageBoxW;
int WINAPI NEW_MessageBoxW(HWND hWnd,LPCWSTR lpText,LPCWSTR lpCaption,UINT uType)
{ //修改输⼊参数,调⽤原函数
int ret=OLD_MessageBoxW(hWnd,L"输⼊参数已修改",L"[测试]",uType);
return ret;
}VOID Hook()
{
DetourRestoreAfterWith();
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread()); //这⾥可以连续多次调⽤DetourAttach,表明HOOK多个函数
DetourAttach(&(PVOID&)OLD_MessageBoxW,NEW_MessageBoxW);
DetourTransactionCommit(); }VOID UnHook()
{
DetourTransactionBegin();
DetourUpdateThread(GetCurrentThread()); //这⾥可以连续多次调⽤DetourDetach,表明撤销多个函数HOOK
DetourDetach(&(PVOID&)OLD_MessageBoxW,NEW_MessageBoxW);
DetourTransactionCommit();
}
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
MessageBoxW(0,L”正常消息框”,L”测试”,0);
Hook();
MessageBoxW(0,L”正常消息框”,L”测试”,0);
UnHook();
return 0;}
还有⼀個DetourCreateProcessWithDll函数,该函数是在以DLL注⼊⽅式拦截API时使⽤的,它其实就是封装“CreateProcess”,以“CREATE_SUSPEND”⽅式创建进程,然后修改IAT,把和您的*.dll插⼊到它的导⼊表,然后再启动进程。所以它的参数就是在普通的CreateProcess基础上增加了两个DLL的路径参数,最后⼀个参数为创建进程的函数指针,默认为CreateProcessA,简单的说就是可以在创建进程的時候加载⼀個dll吧
⽰例代码:
[cpp] view plain copyundef UNICODEincludeincludeincludeundef UNICODEincludeincludeinclude
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690873604a452099.html
评论列表(0条)