优雅的方法注入一个DLL进程之前,他们开始

我正在制作一个修改目标进程行为的“mod”dll。 我成功地注入了我的dll并钩住了一些target的函数。

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

看起来像最好的方式注入DLL的所有进程和处理CreateProcess。 但有时需要UAC,x64的开发。

任何意见,将不胜感激。

Solutions Collecting From Web of "优雅的方法注入一个DLL进程之前,他们开始"

您可能会滥用图像文件执行选项并将修改DLL注册为“调试程序”(请参阅如何:自动启动调试程序以了解详细信息)。

程序很简单:

  1. HKEY_LOCAL_MACHINE \ Software \ Microsoft \ Windows NT \ CurrentVersion \ Image File Execution Options键下添加一个带有目标进程名称(例如victim.exe)的密钥。
  2. 在这个键下,添加一个新的字符串值与名称调试器
  3. 将该值设置为修改二进制文件的路径名称。 这必须是完全限定的路径名​​,或者映像位置必须位于PATH环境变量中。

每当victim.exe启动时,您的修改二进制文件在victim.exe(及其依赖项)被加载之后,但在执行开始之前启动。 无论如何启动victim.exe,都会发生这种情况。

还要注意的是,在64位操作系统上,密钥也反映在Wow6432Node中,所以您的修改二进制文件将针对受害者文件的32位版本和64位版本启动。

将DLL加载到每个可执行文件(至少是那些链接到user32.dll的文件)的另一种方法是滥用AppInit_DLLs注册表项 (也称为Deadlock_Or_Crash_Randomly_DLLs )。 这比将一个随机的可执行文件注册为调试器更加麻烦,但是仍然有人认为任何自尊的恶意软件作者绝对需要熟悉。 还要注意,这个 – uhm – 功能可能在未来的Windows版本中不可用。 Windows Vista , Windows 7和Windows server 2008 R2必须为AppInit_DLLs准备工作。

你想实现什么叫做DLL Hooking ,可以很容易的找到库。

您可以尝试使用Microsoft Detours ,但必须根据您的使用情况购买(Detours Express对于32位和非商业用途免费)。 替代品包括EasyHook , madCodeHook ,…