【问题标题】:Control Win32 process from injected DLL (VC++.NET 2010)从注入的 DLL 控制 Win32 进程 (VC++.NET 2010)
【发布时间】:2012-02-02 00:48:46
【问题描述】:

我已经将一个 DLL 文件注入到另一个进程中,我希望通过外部 EXE 与它进行通信。如何与注入的 DLL 进行通信? :/

【问题讨论】:

  • 为什么自称初学者从DLL注入开始?这不适合有经验的程序员吗?
  • 您的描述不清楚。到目前为止,您取得了什么成就?您是否设法将代码注入到正在运行的进程中?你能告诉我们代码吗?你怎么知道它到目前为止工作?
  • 我是否正确地假设您正在尝试对单击该按钮而不修改 EXE 做出反应?
  • 其实不是。我试图通过单击按钮在 DLL 中执行一个函数。 DLL 被注入到不同的进程中。
  • 我只是问,因为通常 DLL 注入是在目标进程不知道的情况下完成的(例如,“破解”目标进程)。我想知道你为什么还要使用 DLL 注入(你可以修改 EXE 以使用 LoadLibrary 加载 DLL)。

标签: c++ dll controls exe


【解决方案1】:

如果我正确理解了您的问题,您已经将一个 DLL 注入到一个进程中,并希望通过一些外部 EXE 与它进行通信。您可以在此处使用IPC(进程间通信)的标准方法。我知道不应单独发布链接,但 Windows 上的 IPC 主题过于广泛,无法在不复制和粘贴链接文章的情况下全面涵盖。

我已经完成了与您在此处尝试的操作相同的操作,并通过WM_COPYDATAnamed pipingdata copying 用于IPC。但是,我使用每种形式的 IPC 有一个特殊的原因,因此在推荐一种 IPC 之前,我们确实需要更多地了解您的问题领域。

与您正在做的无关的是,您正在对已强制转换为 LPTHREAD_START_ROUTINE 的函数调用 CreateThread,这意味着它应该指向 ThreadProc 回调。您当前的void WINAPI () 签名与所需的DWORD WINAPI (LPVOID) 不匹配。

如果您的 DLL 需要做的只是转发消息,则可以让它充当消息的代理。

  • 让 DLL 创建一个不可见的窗口
  • 将窗口句柄传递给源进程
  • 让源进程将消息发送到此窗口
  • DLL 将接收这些消息,然后可以将它们转发到目标窗口

但是,如果这就是您需要做的全部,那么根本不需要在中间有一个 DLL。这就是为什么我说我们需要有关您的问题域的更多信息。

如果您尝试以可执行文件的形式注入 DLL,然后与 DLL 通信并且 DLL 通信回来,您可能想看看我不久前工作过的project .这正是这样做的。

【讨论】:

  • 是的,我已将 DLL 注入到进程中,并希望通过 EXE 与它进行通信。 :)
  • 我正在考虑这样做。 :P
【解决方案2】:

您需要在您的 EXE 和您的 DLL 注入的应用程序之间进行通信。

因此,在您的 DLL 中,您需要 spawn a thread 等待来自 EXE 的某种通信。您不能等待 DllMain 中的事件,因为这会使应用程序死锁。

一个简单的方法是创建一个named eventwait for it to be set in your DLL。然后在你的外部EXE中,当你的按钮被点击时,你set the event

【讨论】:

  • 线程和事件当然不是处理注入 DLL 的最常用方法。钩子/弯路通常与此齐头并进。如果您知道 DLL 会提前运行并且可以正确设置事件,那么您根本不需要注入。
  • @peachykeen:正是我的想法。
  • 我没有说这是最常见的,我说这是一种简单的方法。显然,此时他不会理解走弯路。我们中的一个人可能误解了他的问题,但据我了解,他希望他创建并拥有源代码的不同应用程序中的按钮在被注入的应用程序中触发 GUI 事件。因此,在目标应用程序中不需要“正确设置事件”,除非注入的 DLL 获取事件句柄并等待它。
  • @peachykeen 你还没有理解。他没有注入回自己的 UI。他的 UI 是一个带有按钮的简单应用程序,与游戏完全分离。没有任何东西被注入到该应用程序中。 DLL 被注入到游戏中,他想通过单击他的简单外部应用程序中的按钮来触发 DLL 执行游戏中的某些代码。
  • 我之前曾入侵过 MapleStory,如果您确实是出于教育 的目的,我会建议您不要这样做。如果你的目标是学习逆向工程,你会被反作弊系统吓倒。有一些措施可以防止插入诸如 CRC 之类的小工具,也有防止加载 DLL 的方法。您将花费更多时间来破坏保护系统而不是编码作弊。出于教育目的,您最好在单人游戏中作弊。
猜你喜欢
  • 2010-12-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-14
  • 1970-01-01
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多