detours安装和使用

http://blog.youkuaiyun.com/evi10r/article/details/6659354

http://blog.youkuaiyun.com/donglinshengan/article/details/8544464

转载于:https://www.cnblogs.com/gdutbean/p/3242846.html

<think>好的,用户想了解Detours使用方法示例代码。我需要结合之前的引用内容来组织回答。首先,Detours主要用于函数钩取,用户可能需要基础步骤代码示例。引用中提到了DetourAttachDetourDetach的使用,还有示例代码的结构,比如事务处理、线程更新等。我应该分步骤讲解,先介绍基本流程,再给出示例代码,并解释关键部分。用户可能想知道如何注入DLL修改函数调用,参考引用14中的内容。需要说明如何定义原函数替换函数,事务的开始提交,以及DLL注入的部分。 还要注意常见问题,比如处理非导出函数,可能需要硬编码地址,如引用4所示。这部分可以作为注意事项提醒用户。最后生成相关问题,考虑用户可能的后续疑问,比如错误处理、64位程序兼容性、与WriteProcessMemory结合使用等,参考引用中的信息。</think>### Detours 使用教程 Detours 是一个用于函数钩取(Hook)的库,常用于修改目标函数的执行流程。以下是基础使用方法示例代码: --- #### **一、基础使用步骤** 1. **定义原函数替换函数** 需声明原函数指针替换函数,函数签名需一致[^2]。 ```cpp // 原函数声明 int (*Oldsystem)(const char*) = system; // 替换函数实现 int Newsystem(const char* command) { return Oldsystem("explorer.exe"); // 修改原行为 } ``` 2. **事务处理** Detours 通过事务机制管理钩子的附加(Attach)分离(Detach)[^3]: ```cpp void StartHook() { DetourTransactionBegin(); // 开始事务 DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)Oldsystem, Newsystem); // 绑定替换函数 DetourTransactionCommit(); // 提交事务 } ``` 3. **卸载钩子** 使用 `DetourDetach` 恢复原函数: ```cpp void EndHook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)Oldsystem, Newsystem); DetourTransactionCommit(); } ``` --- #### **二、完整示例代码** ```cpp #include <Windows.h> #include <detours.h> #pragma comment(lib, "detours.lib") // 定义原函数指针替换函数 int (*Oldsystem)(const char*) = system; int Newsystem(const char* command) { return Oldsystem("explorer.exe"); // 替换为打开资源管理器 } // 安装钩子 void StartHook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(&(PVOID&)Oldsystem, Newsystem); DetourTransactionCommit(); } // 卸载钩子 void EndHook() { DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourDetach(&(PVOID&)Oldsystem, Newsystem); DetourTransactionCommit(); } int main() { StartHook(); system("notepad.exe"); // 实际执行 explorer.exe EndHook(); return 0; } ``` --- #### **三、关键注意事项** 1. **非导出函数的处理** 若目标函数未导出,需通过硬编码地址绑定[^4]: ```cpp typedef void (WINAPI *pFunc)(DWORD); pFunc FuncToDetour = (pFunc)(0x0100347C); // 指定函数地址 ``` 2. **DLL 注入结合** 通常需通过 `WriteProcessMemory` 注入 DLL,再在 DLL 中调用 Detours 修改函数[^1]。 3. **线程安全** `DetourUpdateThread` 确保当前线程状态更新,避免钩子应用不一致。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值