问题标签 [detours]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1328 浏览

c++ - 注入 dll 在 Windows XP 上不起作用

所以我正在尝试制作一个注入器来注入我Detours用于挂钩游戏客户端的 dll,这很简单,但是有一个问题我不知道出了什么问题,它在 XP 上运行良好Windows Vista+但在 XP 上运行不正常......这是我的代码

两者都是用 VC++2010 构建的,所以它应该可以工作,但在 Windows XP 上它会启动游戏但 dll 没有被注入,我知道这里有什么问题!

编辑:我相信这是因为我的 XP 缺少 MSVCR100D.DLL ,有没有办法让我的 dll 不依赖它?

0 投票
1 回答
1227 浏览

c++ - CreateProcessWithDLLEx-Hooked 进程启动但无法恢复

我试图使用微软的弯路来获得一个基本的钩子。我的程序能够成功运行 CreateProcessWithDllEx 并注入一个 dll。但是,我似乎无法恢复实际的挂钩程序。我正在使用记事本进行测试,我可以看到notepad.exe 在我的进程列表中运行,但记事本窗口实际上从未出现过。

我的dll如下:

而我的喷油器如下:

我用 .def 文件构建了我的 dll,确保在序号 1 处有所需的函数,以便绕道正常工作:

有谁知道是什么导致进程无法运行?附带说明一下,我也尝试过使用空白 dll,它只包含序号 1 处所需的函数,没有其他内容,它似乎具有相同的结果。

此外,只要 notepad.exe 进程显示在进程列表中,我的注入器就会永远运行。这是对 WaitForSingleObject 的响应,这似乎表明进程已正确生成。

0 投票
0 回答
674 浏览

c++ - 钩住参数包含未知对象的方法

我通过弯路钩住了一个 C++ 成员方法。

该方法的声明是从 IDA 中的符号文件 (*.pdb) 中检索的

以下是我替换真实的方法

钩子起作用并被MyFoo调用而不是真正的方法。但是在调用真实方法时出现错误:

Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call. This is usually a result of calling a function declared with one calling convention with a function pointer declared with a different calling convention.

你对我有什么建议吗?当参数之一作为对象传递时如何处理这种钩子,但我不知道它的实现。

0 投票
2 回答
28700 浏览

c++ - C++ 函数挂钩(仅限内存地址)

我有一个内存地址,它是另一个程序(它的一个 dll)中的函数的内存地址。我已经通过 DLL 注入加载到程序中。我已经有了低音地址,以及每次程序加载时函数的实际位置。所以,这不是问题。

我只想简单地钩住那个位置,然后抓取变量。我知道函数的伪代码。所以这不是问题。或者另一种很棒的方法是在该内存位置做一个断点并获取调试寄存器。

我找不到任何明确的例子。我也没有函数的“名称”,我只有内存地址。有没有办法只使用内存地址?大多数(如果不是所有)示例都使用函数的名称,而我没有。

如果有人能指出我正确的方向,以便我能够完成这项任务,我将不胜感激。它也可能会帮助许多可能有相同问题的其他人。

编辑:我还应该提一下,我宁愿不要用其他人的代码使我的程序超载,我真的只想要准系统,就像一辆带有卷帘窗的基本汽车。请不要给我豪华套餐。

0 投票
3 回答
1446 浏览

hook - Win 7 x64 上的 MS Detours 3.0?

我想详细了解 win api hooking。这是来自 MS Detours 3.0 下载页面的引用:

Detours Express 3.0 可在免费、点击许可下立即下载,用于研究、非商业和非生产用途。Detours Express 仅限于 x86 处理器上的 32 位进程。

我正在使用 Win 7 x64。这是否意味着 Detours(至少是免费版)对我没用?我之所以问,是因为我阅读了很多推荐 MS Detours 的帖子,但现在我认为几乎每个人都在使用 x64 机器。

有人在 x64 操作系统上使用过它吗?它有效吗?

0 投票
0 回答
388 浏览

c# - 防止绕行功能。避免开裂

Check有一个使用 DLL函数检查激活的应用程序。Check如果应用程序被激活,则返回 1,否则返回 0。我使用 MS detours lib 进行函数挂钩,创建了简单的应用程序和包含函数(始终返回 1)的简单应用程序和 DLL ,该函数具有与我的版本MyCheck相同的签名和迂回函数。Check显然它可以工作并且应用程序被成功破解,所以我需要避免它。

  1. 我试图Check直接调用函数(通过指定确切的地址),甚至不使用GetProcAddress,但看起来 detours lib 正在修改函数体本身,而不是导出表。

    }

  2. 然后我尝试读取函数体,我发现绕道后 MD5 校验和与原始校验和不同。所以我试图读取内存中DLL的全部内容并检查它以确认DLL内容没有改变,但它也不起作用。它抛出AccessViolationException

    Process.EnterDebugMode();

    ProcessModule 模块 = Process.GetCurrentProcess().MainModule; 字节[] 数据 = 新字节[module.ModuleMemorySize]; Marshal.Copy(module.BaseAddress, data, 0, module.ModuleMemorySize);

我在这里使用了 MainModule,但它对Process.GetCurrentProcess().Modules集合中的每个模块都给出了相同的错误。

我将不胜感激,我不一定希望以我描述的一种方式解决它,任何好的解决方案都是可以接受的。

谢谢。

0 投票
1 回答
794 浏览

c++ - Deviarev2 Hook API:挂钩到现有进程 winapi 调用?

我想使用 Deviare V2 API 来拦截来自测试应用程序的 winapi 调用。问题是挂钩和系统调用在同一个进程中,因此不会拦截调用。

如果我为它们中的每一个打开单独的进程,那么拦截将起作用。有没有其他人遇到过这种情况/问题?

问题是我正在尝试将一些单元测试添加到代码的和平中,而不是修改现有的生产代码来包装/模拟所有系统调用,我认为我可以简单地拦截所有这些调用并按照我的意愿伪造它们。

0 投票
1 回答
190 浏览

c++ - 编译器优化合并相同的函数实现意味着要在运行时绕行的存根

我有一个 C++ 测试项目,其中包含一堆具有相同实现的存根函数。这些存根旨在使用 Windows Detours 在运行时“替换”。问题是,在发布模式下,编译器使所有这些存根指向相同的实现。为了说明这一点,请考虑以下代码:

在调试模式下,指针值会有所不同。在发布模式下,它们是相同的。我尝试了编译指示优化指令(我使用的是 Microsoft 编译器),但它没有解决问题。结果,我的 Windows Detours 挂钩拦截了对相同存根的所有调用。

我怎样才能解决这个问题?谢谢。

0 投票
1 回答
2473 浏览

c++ - 带有 Detours 3.0 Express 的简单数据包记录器

我的系统:Microsoft Windows XP Professional 32 位

IDE/编译器:Microsoft Visual C++ 2010 Express Edition

图书馆:Detours 3.0 Express

目标:编写简单的数据包记录器。

我的代码:

mydll.cpp

注射器.cpp

错误信息:

(iexplore.exe) 应用程序

问题: 我的代码有什么问题?为什么我会收到此错误?

0 投票
1 回答
943 浏览

winapi - 如何在 Windows 中覆盖应用程序的单实例限制?

我正在尝试覆盖我没有源的应用程序的单个实例限制。我知道该应用程序正在使用使用 CreateMutex 来确定是否有另一个实例正在运行的好方法。(如果互斥锁创建成功,它会继续,如果 getlasterror 说互斥锁已经创建,它会立即退出)。我通过嗅探 Win32 api 调用发现了这一点。我认为使用 Detours 可以解决问题,但效果并不理想。我正在拦截 CreateMutexW,但由于某种原因,它没有捕获对它的前四个调用。(通过嗅探 win32 调用并查看互斥体的名称,我再次知道这些调用是什么)。我确实截获了第五个,但我真正想要截获的是第一个。

我通过带有dll的示例应用程序使用弯路。我想知道问题是绕道太晚还是因为这些电话可能有某种保护。弯路是最好的方法吗?也许使用其他东西可能是一个更好的主意?