我正在创建一个修改目标进程行为的'mod'dll。我成功地注入了我的dll并挂了一些目标函数。
但是当我需要在主模块启动之前挂钩一些API时更需要做更多的工作(更清楚地说,在入口点之前)。我需要使用CREATE_SUSPENDED属性手动启动目标程序,注入,然后恢复。但是有些应用程序从它自己的启动程序开始,有些应用程序通常从x64进程开始......这样的各种环境使其很难实现自动化。
似乎是最好的方法是为所有进程注入挂钩dll并处理CreateProcess。但有时它需要UAC,x64开发。
任何建议都将受到赞赏。
答案 0 :(得分:7)
您可以滥用Image File Execution Options并将修改DLL注册为“调试器”(有关详细信息,请参阅How to: Launch the Debugger Automatically)。
程序很简单:
每当启动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 Vista,Windows 7 and Windows Server 2008 R2必须为AppInit_DLLs做好准备。
答案 1 :(得分:-3)
您想要实现的目标称为DLL Hooking,可以轻松找到要执行此操作的库。
您可以尝试Microsoft Detours,但必须根据您的使用情况购买(Detours Express可免费使用32位和非商业用途)。替代方案包括EasyHook,madCodeHook,...