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

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

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

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

任何意见,将不胜感激。


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

程序很简单:

  • 在HKEY_LOCAL_MACHINE Software Microsoft Windows NT CurrentVersion Image File Execution Options键下添加一个带有目标进程名称的密钥(例如victim.exe)。
  • 在此项下,使用名称调试器添加新的字符串值。
  • 将该值设置为修改二进制文件的路径名称。 这必须是完全限定的路径名​​,或者映像位置必须位于PATH环境变量中。
  • 无论何时启动victim.exe,您的修改二进制文件在victim.exe(及其依赖项)被加载后,但在执行开始之前启动。 不管如何启动victim.exe,这都会发生。

    还要注意的是,在64位操作系统上,密钥也反映在Wow6432Node中,所以您的修改二进制文件将针对victim.exe的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挂钩,可以很容易找到的库。

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

    链接地址: http://www.djcxy.com/p/60315.html

    上一篇: elegant method to inject a dll to processes BEFORE they start

    下一篇: write hook. dll injection, windows hooks