问题标签 [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++ - MS Detours 2.1 - 出栈
我不会绕道 Minesweeper 中的 PlaySoundW 功能。游戏一调用 PlaySoundW 函数就会崩溃。如果我在我的代码中取消注释 Beep,游戏会发出哔哔声,然后崩溃。
现在代码正在从挂钩函数调用原始函数,所以它不应该做任何事情。但无论如何它都在崩溃。
你能告诉我有什么问题吗?
在 Olly 中调试应用程序后,我发现当 detour 处于活动状态时,并非所有垃圾都会从堆栈中弹出。如何解决?
这是我的代码:
c++ - DLL 源代码中的 C++ 函数挂钩
我有来自 C++ DLL 的源代码。此 DLL 是应用程序的一部分。我想挂钩一个由另一个DLL加载到内存中的函数,以便我的挂钩函数被所有其他DLL而不是原始函数调用。我把这段代码放在我的代码中:
问题是:如果我在一个 DLL 中搜索偏移量并通过该偏移量修补函数,这不是错的吗(我认为它更复杂,因为我在另一个 DLL 中并且想为所有 DLL 挂钩该函数)?顺便说一句,有人知道我如何在 IDA PRO 中获得标准(fex。0x0100344C)偏移量吗?
c++ - C++ 接收函数
我正在从我的服务器(C++)挂钩一些功能。我想挂钩某些功能,以便能够转储数据包,一些客户端发送(连接/断开包)。我已经连接了函数 recv/recvfrom 和 WSARecv/WSARecvFrom。只有 WSARecvFrom 函数被调用(多次),但仅在服务器启动时。我必须挂钩哪些功能来查找远程机器的连接/断开连接包?我注意到,在服务器上播放时,这 4 个接收函数永远不会被调用!为什么?
例子:
c++ - 时间:2019-05-10 标签:c++functionhook(dll,asm)
我编写了一个dll。在这个 dll 中,我想挂钩另一个 dll 的函数加载到内存中。这是许多小时工作的结果:
看来,我的钩子不起作用。我想我在代码中放了一些逻辑错误,但我是初学者并且需要帮助!
c - 如何挂钩/转换 __userpurge func 到 __stdcall 或 __cdecl?
有人知道钩子__userpurge
类型的函数吗?我挂机成功__thiscall
,,,, __stdcall
.__cdecl
__usercall
如何使用转换为__stdcall
或挂钩这种类型的函数__cdecl
?
我首先必须挂钩的功能是:
c++ - Microsoft Detour - 带有汇编程序“调用”指令的挂钩函数
这个板上的第一个问题,已经是一个很长的问题了——我很抱歉(在此感谢大家为我从这个平台获得的重要提示)。
我正在尝试使用 Microsoft Detours 挂钩几个函数(它或多或少是插件代码,因此我要挂钩的函数不是我编写的/不能由我更改,但可以在同一进程/线程中直接访问)。
每个应该被挂钩的函数都是由 c 风格的编译器生成的,并且总是具有以下汇编程序“启动”代码:
正如你所看到的,一些寄存器被压入堆栈,然后调用指令被调用到下一行(请不要要求更改它,因为我已经说过我无权访问这个生成的代码)。call 指令更改堆栈 - 此堆栈更改保存在 eax 寄存器中并用于进一步处理(!!!)
此方法将与:
hooking 函数被定义为一个裸函数,它只是跳转到 trampoline 函数。
具有以下蹦床功能:
主要问题是,蹦床汇编代码中的调用指令 1) 向堆栈添加了错误的值(在本例中为 031f0064 而不是 045A1A89)-> 使用 eax 进行进一步处理将收到错误的结果 2) 或多或少地破坏堆栈帧,因为下一个“ret”将跳回“031F0069”==>相同的处理将进行两次;ret 将被再次调用,导致错误的功能..
请理解,不保证我要挂钩的每个功能都以上述序言开头..因此我无法重写挂钩功能,并忽略蹦床方法...
所以在所有这些文本之后的基本问题:是否可以用 Microsoft Detour 挂钩一个函数,在函数的前 5 个字节中调用一个调用指令?(如果没有,还有其他选择吗?)
非常感谢您的阅读(希望对您有所帮助)
c++ - 将 sleep() 注入到外部进程的函数中
我知道如何将 DLL 注入正在运行的进程中,以及如何利用进程内部使用的函数,例如
现在我想将 sleep() 添加到正在运行的进程中的现有方法中 - 这是程序的主循环,不会停止一秒钟并耗尽所有处理能力。
我知道使用 detours 之类的框架,我可以创建一个蹦床函数,它调用我的函数,然后调用原始函数 - 但是我的问题是 while(1) 循环在外部进程的函数中的某个位置。所以我知道循环开始的偏移量 - 之后我想先调用 sleep() 然后继续循环的正常路线。
到目前为止,我看到的唯一选择是二进制编辑程序,但这不是一个好的解决方案。
有什么建议吗?谢谢
c++ - “空”功能的外部进程中的弯路钩子不起作用
我通过函数偏移量在外部进程中挂钩函数。到目前为止,这对于我挂钩的函数来说效果很好——但是我发现了一个“debugLog(char ...)”函数,它仍然存在于二进制文件中但不做任何打印——它看起来像这样
它是这样称呼的
现在调试消息显然已被禁用,我想连接到这个,因为我已经能够简单地连接到二进制文件中的类似 func(char..)。
这是代码:
一种类似的方法适用于我迄今为止连接到这个二进制文件的所有其他功能。我还确保甚至使用调试器调用 debugMessage。
任何想法为什么这个钩子根本不起作用?也许是因为该函数可能有 var args?我已经尝试过使用 const char*,...)。
c++ - 为什么我的绕行代码会因 NOP 而崩溃
嗨,这是我的第一个问题,所以请温柔对待我。我正在绕行一个 exe,使用 MS detours 和 Visual Studio 2005,我的 dll 被加载并且我的钩子工作了但是当我尝试扩展我的钩子代码时出现了问题并且整个事情崩溃了,我认为它在 exe 中创建了一个异常,它弹出了一个消息框联系支持。
这有效,没有例外,我的日志文件充满了“它的工作”,但是,我需要在我的 Real_GenterateStrings() 调用之后捕获 EAX,因为它包含一个指向 unicode 字符串的指针。
但是如果我在 Real_GenterateStrings 调用之后放置任何代码,只要它被钩住就会导致崩溃。即使只是一个nop
有任何想法吗?
我挂钩的功能是
我不认为它返回一个值?