如何使用 Detours 挂钩 exe 函数?

Posted

技术标签:

【中文标题】如何使用 Detours 挂钩 exe 函数?【英文标题】:How to hook an exe function with Detours? 【发布时间】:2015-07-03 13:58:48 【问题描述】:

我刚开始使用ms Detours 库,我想知道如何使用它来挂钩一个exe 文件。我得到了来自IDA Pro 的函数偏移量,但是我不知道应该连接到哪个地址。如果我使用withdll.exe 工具钩到偏移量,它会给出access violation。如果可能的话,有人可以给我看一个挂钩 exe 的例子吗?

【问题讨论】:

你试过偏移量减去图像基本偏移量吗? @fassl 不,我没有。我如何得到它?如果通过获取当前进程并将其转换为 void 指针,则我无法减去它。 您可以在检查文件的摘要中看到图像基本偏移量,这是 IDA 视图中任何代码之前的第一件事。您可以将其转换为 DWORD 或 QWORD 并添加函数 offset 减去 imagebase。还要确保您是否正在覆盖东西(我不知道绕道如何挂钩)以使用 VirtualProtect 准备地址,例如允许写入或执行内存范围。可能还有detours给你做这个,我不知道,只是给个提示。 嗯...不能让它工作...图像库是0x400000,功能位置是0x401652,即使我将它们转换为DWORD并减去图像库该程序只是因错误StackHash_4c0d 而崩溃。 图片句柄地址要加0x1652。 【参考方案1】:

StackHash 崩溃的发生是因为您可能正试图从没有 EXECUTE 访问权限的页面执行代码。您可以禁用 DEP 以确保这是导致崩溃的原因。随后,如果确实如此,您应该使用VirtualProtectVirtualProtectEx 来修改页面保护,使用包括执行访问的保护常量之一(您可以查看常量列表here)。根据地址/偏移量计算,我在您的描述中没有看到任何问题。

以下是有关如何禁用 DEP 的说明:

    单击“开始”菜单,然后转到“控制面板”。 点击系统维护,然后点击系统。 选择高级系统设置。 在系统属性下,从顶部的性能部分中选择设置。 单击“数据执行保护”选项卡。 选择“为除我选择的程序和服务之外的所有程序和服务启用 DEP”。 查找触发错误的应用程序的可执行文件。 选择导致错误的应用程序并单击“打开”将其添加到您的 DEP 例外列表中。 单击“确定”保存新设置。

希望这会有所帮助。

【讨论】:

以上是关于如何使用 Detours 挂钩 exe 函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 C++ 挂钩 Delphi 函数

Detours - 挂钩类成员函数 - 设置目标函数偏移的语法?

为啥 Detours 不能再在 Windows 7+ 中挂钩 shell32.dll 函数

可以使用 Microsoft Detours 来挂钩系统范围的调用而不注入每个 proc 吗?

detours hooked CreateFile 函数触发堆栈溢出

MS Detours 2.1 - 出栈