优雅的方法,在进程开始之前为进程注入一个dll

时间:2014-07-29 05:22:45

标签: windows winapi operating-system dll-injection

我正在创建一个修改目标进程行为的'mod'dll。我成功地注入了我的dll并挂了一些目标函数。

但是当我需要在主模块启动之前挂钩一些API时更需要做更多的工作(更清楚地说,在入口点之前)。我需要使用CREATE_SUSPENDED属性手动启动目标程序,注入,然后恢复。但是有些应用程序从它自己的启动程序开始,有些应用程序通常从x64进程开始......这样的各种环境使其很难实现自动化。

似乎是最好的方法是为所有进程注入挂钩dll并处理CreateProcess。但有时它需要UAC,x64开发。

任何建议都将受到赞赏。

2 个答案:

答案 0 :(得分:7)

您可以滥用Image File Execution Options并将修改DLL注册为“调试器”(有关详细信息,请参阅How to: Launch the Debugger Automatically)。

程序很简单:

  1. HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options 键下添加一个包含目标进程名称的密钥(例如victim.exe)。
  2. 在此键下,添加名为 debugger 的新字符串值
  3. 将值设置为修改二进制文件的路径名。这必须是完全限定的路径名​​,或者图像位置必须位于PATH环境变量中。
  4. 每当启动victim.exe时,您的修改二进制文件都会在加载victim.exe(及其依赖项)之后启动,但在执行开始之前。无论victim.exe如何启动,都会发生这种情况。

    另请注意,在64位操作系统上,密钥也会反映在 Wow6432Node 中,因此您的修改二进制文件将针对32位和64位版本的受害者启动.EXE。

    将DLL加载到每个可执行文件(至少是那些链接到user32.dll的文件夹)的另一种方法是滥用AppInit_DLLs registry key(也称为Deadlock_Or_Crash_Randomly_DLLs)。这甚至比将随机可执行文件注册为调试器更麻烦,但仍然是任何自尊的恶意软件作者绝对需要熟悉的黑客攻击。另请注意,此-uhm功能可能在将来的Windows版本中不可用。 Windows VistaWindows 7 and Windows Server 2008 R2必须为AppInit_DLLs做好准备。

答案 1 :(得分:-3)

您想要实现的目标称为DLL Hooking,可以轻松找到要执行此操作的库。

您可以尝试Microsoft Detours,但必须根据您的使用情况购买(Detours Express可免费使用32位和非商业用途)。替代方案包括EasyHookmadCodeHook,...