问题标签 [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.
c++ - 从注入过程中跟踪 HDC
我正面临着一个两难的境地。我已经将我的 DLL 注入到其他进程中,并从那里挂钩了几个 WinAPI 调用,具体来说是 ExtTextOutW@GDI32、DrawTextExW@GDI32 和 AlphaBlend@Msimg32。现在,问题是当另一个应用程序用这两个 GDI32 函数编写一些东西时,我不知道它出现的确切位置。这是因为包含文本的 DC 使用 AlphaBlend 进行处理,最终也将其放入窗口的 DC。
那么,如何跟踪某些 HDC?在伪代码中,其他应用程序如何将文本绘制到屏幕上:
就像我说的,当字符串在 AlphaBlend 之前获得新的 DC 时,我失去了原始 h 的轨道。任何想法,我如何从 h > h2 与其中的某些字符串建立连接?
我不知道我是否能够正确解释问题,如果您有任何问题,请询问...
c++ - c++ d3d hooking - COM vtable
试图制作一个 Fraps 类型的程序。请参阅评论以了解失败的地方。
c++ - DetourAttach(&(PVOID &)BindKeyT, BindKeyD); 是什么?意思是?将绕道附加到内存地址
这只是一个简单的问题。我一直在阅读附加到子程序的内存地址的东西的源代码,使用DetourAttach(&(PVOID &)BindKeyT, BindKeyD);
whereBindKeyT
是内存中子程序的地址。我很好奇,(&(PVOID &)
英文到底是什么意思?我知道这PVOID
是一个 void 指针,但是如何将其转换为可用于附加绕道的函数?
c++ - 需要从迂回函数中调用原始函数
我正在使用 Detours 挂钩到可执行文件的消息函数,但我需要运行自己的代码,然后调用原始代码。从我在 Detours 文档中看到的内容来看,这听起来绝对应该自动发生。原始函数会在屏幕上打印一条消息,但是一旦我附加了一个弯路,它就会开始运行我的代码并停止打印。
原函数代码大致为:
我的功能是:
我知道原始函数所在的内存位置,因此使用:
让我进入这个功能。这段代码工作得几乎完美:我的函数是用正确的参数调用的。但是,执行会离开我的函数,并且不会调用原始代码。我试过 jmping 回来,但这会使程序崩溃(我假设代码 Detours 移动以适应钩子是导致崩溃的原因)。
编辑:我已经设法解决了第一个问题,没有返回程序执行。通过将 OrigPos 值作为函数调用,我可以转到“trampoline”函数并从那里转到原始代码。但是,在某些地方,寄存器正在发生变化,这导致程序在我回到原始代码后立即因段错误而崩溃。
Edit2:最终工作代码:
并使用 TrueAddr 作为 DetourAttach 中的第一个参数。
c++ - Microsoft Detours - DetourUpdateThread?
我有几个关于 Microsoft Detours Library 的快速问题。我以前(成功地)使用过它,但我只是想到了这个功能:
LONG DetourUpdateThread(HANDLE hThread);
我在别处读到,这个函数实际上会挂起线程,直到事务完成。这似乎很奇怪,因为大多数示例代码调用:
DetourUpdateThread(GetCurrentThread());
无论如何,显然这个函数“登记”线程,这样,当事务提交(并且绕道)时,如果它们的指令指针位于“目标函数或蹦床函数的重写代码内”,它们的指令指针就会被修改。
我的问题是:
当事务提交时,当前线程的指令指针是否会在 DetourTransactionCommit 函数中?如果是这样,我们为什么要费心去更新它呢?
此外,如果登记的线程被挂起,当前线程如何继续执行(假设大多数示例代码调用 DetourUpdateThread(GetCurrentThread());)?
最后,您能否暂停当前进程的所有线程,避免竞争条件(考虑到线程可能随时被创建和销毁)?也许这是在交易开始时完成的?这将使我们能够更安全地枚举线程(因为似乎不太可能创建新线程),但 CreateRemoteThread() 呢?
谢谢,
保罗
作为参考,以下是简单示例的摘录:
detours - C/C++ Detours 库 - 在哪里可以找到?
我找到了一段包含“HookEngine/CDetours.hpp”的代码,搜索了一些信息,然后找到了 Microsoft Project,但我找不到我要找的东西。我下载了 Express Edition,但这个版本不包含 HookEngine。
c++ - Dev-C++ 和 Detours 编译错误
正如标题所说,我正在尝试使用 Detours 使用 Dev-C++ 编译一个简单的 DLL,但出现此错误:
在这行:
完整的代码是
.net - 我可以在运行时将 .NET 方法调用重定向到新方法吗?
假设我有以下 .NET 类:
和
这 2 个类驻留在不同的命名空间中,在不同的程序集中。有没有办法让所有调用C.M()
自动“重定向”到D.N()
?所以,调用方法是它调用的东西C.M
,但实际上,D.N
是实际被调用的东西,带有任何C.M
可能采用的参数。这是否发生在类的所有实例化或仅发生在一个特定对象上都没有关系。
MS Research 有Detours 库,它可以为正常的 Win32 DLL 导出做一些非常相似的事情。我正在寻找一种使用 .NET 方法的方法。
c++ - 使用弯路钩住记事本中的文字
我正在尝试使用弯路来挂钩文本输出,例如在记事本中。
我写了以下代码。我不会在这里放所有代码,而是最重要的部分。
DLL部分:
客户端部分:
问题是所有 4 个绘制文本的函数都没有被钩住。我做错了什么。我已经开始研究弯路,并没有在文档中找到我的问题的答案。
如果需要其他部分代码,我稍后会放在这里。
c - C - 从外部进程调用函数而不导出函数
我试图弄清楚如何在不导出函数的情况下调用函数。
好的,所以我有一个 exe 文件,其中定义了“add”,这个 exe 是一个 win32 控制台应用程序并加载一个 DLL。DLL 还旨在使用 exe 文件中的 add 函数(没有导出)
这是我的主要 win32 控制台应用程序文件:
这是 hook.dll 的代码:
我反汇编了我的win32控制台应用程序,找到了add函数的地址
问题是当我调用 LoadLibrary 时,它返回 998,我认为这是错误代码访问冲突。我想这是有道理的,因为该内存区域可能受到保护。
有小费吗?
(另外我用的反汇编器是Ida Pro免费版,detours库是微软提供的。)