Detour安装及简单使用实例

Detour安装及简单使用实例

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条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信