问题标签 [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 回答
97 浏览

c - 使用 Detours 减少不确定性?

我想知道是否可以使用挂钩(如 Detours)来消除任意应用程序中的不确定性。

我们可以假设单线程应用程序(忽略由竞争和调度引起的不确定性)。

我的第一个猜测是重写rand(),以便为任何要求伪随机数的函数提供可预测和可重复的输出,而不管种子如何。

是否有任何其他常用功能我应该考虑覆盖?

我知道这里没有完美的解决方案,但适用于大多数应用程序的解决方案可能会做到。此外,如果有另一种方法可以解决这个问题,我会很感兴趣地阅读它。

0 投票
3 回答
1510 浏览

c - 是否可以挂钩任何时间检索功能

我需要挂钩任何试图检索系统时间的函数,以便为不同的应用程序生成“时间无关”的回放。某些事件(如伪随机数生成)依赖于对 time() 的调用,但例如其他一些事件则调用 timeGetTime() 或 _time64()。

我需要挂钩(在 Windows 中)以捕获所有时间检索函数的最小函数集是什么。真的可以挂钩这些功能吗?我正在尝试按时完成(),但我的钩子被忽略了。我已经成功连接到其他函数(如 rand),但我的 time() 钩子似乎被忽略了。

我正在使用 Detours,但我愿意使用任何其他 API 拦截工具。

0 投票
2 回答
4788 浏览

c++ - 微软走弯路遇到麻烦

我正在尝试用微软的弯路做一些基本的挂钩,但我无法让它工作。我基本上使用了在这个线程中发布的代码:

如何在 C/C++ 中挂钩 Windows 函数?

但没有骰子。我更新了 DLL 代码中的发送/接收函数以简单地将数据记录到文件中,并且我尝试将主程序挂接到“互联网检查程序”程序中,但从未创建过日志文件,所以看起来 dll没有被注射。

我正在运行 Windows 7 64 位、Visual Studio 10.0、Detours 3.0(我的环境似乎设置正确,构建或任何问题都没有)。我创建了一个 DLL 项目,从上面的链接粘贴到 DLL 代码中,发送/接收更新如下:

并编译。然后创建另一个项目,粘贴上面链接中的主代码,将其设置为查找chkrzm.exe程序(检查器),并将 DLL 路径硬编码为:

并运行它,但没有骰子。知道为什么我不能让它工作吗?

0 投票
2 回答
1094 浏览

c++ - 挂钩查找窗口

我正在尝试使用 Detours 3.0 来连接 FindWindowA 和 FindWindowW。这两个函数连接成功,我可以看到请求的类和窗口标题。但是当我尝试访问任何单词时

或类似的东西:

我收到错误(挂钩程序中的异常)。我无法访问此字符串,但我可以阅读它使用

http://s017.radikal.ru/i421/1201/73/54fa9046a46c.png我什么都不懂...有错误的错误代码。我使用这段代码:

而且琴弦没有损坏。所有工作...为什么我不能检查或直接访问这两个参数?

0 投票
1 回答
110 浏览

delphi - 将例程的内容复制到内存中的另一个位置

我想将内存中的例程代码复制到另一个位置。例如

假设我想将例程复制到内存中的另一个位置。我已经宣布了类似的东西

一些伪代码就像

我只是想知道是否有可能这样做。我已经修补了一个例程以调用一个新例程,但是由于我们使用代码绕道放置了 JMP 指令,我可能无法使用旧例程中提供的功能。

我以前的问题的参考是here

0 投票
1 回答
845 浏览

windows - 钩子静态链接的“malloc”函数族

我正在使用Detours挂钩任何目标 .exe 的 malloc/free,而无需访问其源代码。

我已成功挂钩从.exe 动态链接的 malloc/free。

我想知道是否可以使用 Detours 来挂钩静态链接的 malloc/free。

我知道这可能更困难,因为 malloc/free 代码已经在 .exe 中,甚至很难找到它们。“malloc”可能会变成“0x804f400”之类的东西。但我想可能存在一些其他技术可以在 .exe 中定位 malloc/free 函数。

有人试过吗?还是根本不可行?

0 投票
2 回答
1237 浏览

detours - Lnk 错误 2019 和 1120

我在构建绕道的解决方案时遇到了麻烦。我收到如下错误:

  1. 错误 LNK2019:未解析的外部符号 _DetourCopyInstruction@20 在函数 _DetourAttachEx@20 和

  2. 错误 LNK1120:1 个未解决的外部问题。

我现在该怎么办?

0 投票
0 回答
642 浏览

opengl - wglMakeCurrent 使用 DetourCreateProcessWithDll 失败

DetourCreateProcesswithDLL在 Visual Studio 2010 中使用并为 Opengl32.dll 、 glu32.dll 和 glut32.dll 提供替换 dll,同时从 glut 演示程序为 abgr.exe 演示应用程序创建进程。

这样我就拦截了 Opengl32、glu32、glut32 库。然后这些 api 从系统文件夹或通常的 dll 中调用相应的 api。

这些 dll 在其各自的库中定义了所有 api。

问题是wglMakeCurrent在 Win 7 x64 位的 NVidia GTX480 上使用 glut 演示应用程序(如 abgr.exe)返回 0 或失败。它也不适用于其他演示应用程序。

如果我更改正在调用的 abgr.exe 或 GLIntercept 可执行文件的兼容性,它确实有效DetourCreateProcesswithDLL。即右键单击exe -> 更改属性-> 兼容性-> 检查以256 色运行。

但是,这看起来像是一种解决方法,并且显示效果看起来并不那么好。我怎样才能使用而不必这样做。如何获得良好的价值wglMakeCurrentwglMakeCurrent从内部调用glutCreateWindow

这在 AMD Fusion GPU 上不是问题。那里wglMakeCurrent并返回一个很好的价值。问题仅出现在 NVIDIA GTX 480 上。有人知道如何解决此问题吗?我已更新驱动程序并在 NVIDIA 控制面板 Help->About 上显示版本 4.3.790.0

wglCreateContext 返回 0x00010000

0 投票
1 回答
1661 浏览

linux - 绕行和 GCC 内联汇编 (Linux)

我正在为一个为(我们)modder 提供 API 的游戏编写扩展程序。这个 API 提供了各种各样的东西,但它有一个限制。API 仅适用于“引擎”,这意味着基于引擎发布的所有修改(模组)不提供/具有任何类型的(特定于模组的)API。我创建了一个“签名扫描器”(注意:我的插件作为共享库加载,使用 -share 和 -fPIC 编译)找到感兴趣的功能(这很容易,因为我在 linux 上)。所以来解释一下,我将举一个具体的例子:我找到了一个感兴趣的函数的地址,它的函数头很简单int * InstallRules(void);. 它需要一个空值(void)并返回一个整数指针(指向我感兴趣的对象)。现在,我想做的是创建一个绕道(并记住我有函数的起始地址)到我自己的函数,我想这样做:

现在这是交易;我对函数挂钩没有任何经验,而且我对内联汇编(仅限 AT&T)知之甚少。网上预制的detour包适用于windows或者是使用其他方法(即预加载一个dll来覆盖原来的)。所以基本上; 我应该怎么做才能走上正轨?我应该阅读调用约定(在这种情况下为 cdecl)并了解内联汇编,还是应该做什么?最好的可能是用于 linux 绕行的已经有功能的包装类。最后,我想要这样简单的东西:

我知道我无法在这里得到一个完全令人满意的答案,但我非常感谢一些关于方向的帮助,因为我在这里如履薄冰......我读过关于绕道但几乎没有根本没有任何文档(特别是针对 linux),我想我想实现所谓的“蹦床”,但我似乎无法找到获取这些知识的方法。

注意:我也对 _thiscall 感兴趣,但从我读过的内容来看,使用 GNU 调用约定调用并不难(?)

0 投票
1 回答
354 浏览

c++ - 弯路捕捉纹理

有一个赛车游戏,我需要收集遥测和统计数据。并添加一个额外的 HUD

我编译了Detours。并且可以使钩子更改应用程序窗口的名称。例如:

并使用 withdll.exe 运行它。一切都好。

但我不知道如何拦截direct3d。在 API Monitor 的帮助下,我发现程序使用Microsoft.Xna.Framework.Graphics.dll IDirect3DDevice9::SetTexture

有人能告诉我如何获得这种纹理吗?一般来说,我想得到类似链接的东西