如何将DLL注入到每个进程中? SetwindowsHookEx()可以解决问题吗? AppInit_DLLs是否能像以前一样工作?

#1 楼

TLDR:不,不,不。

您的帖子中隐藏了几个问题:


可以将DLL注入每个过程中?
如果可能,可以使用以下方法做到:



SetWindowsHookEx吗? br />

第一个问题的答案为“否”。
第二个问题的两个部分的答案均为“否,即使第一个问题的答案为是“。


AppInit_DllsSetWindowsHookEx


让我们从第二个问题开始。这两种方法仅适用于加载AppInit_Dlls的DLL。因此,这不是您所要的“每个过程”。

最重要的是我在对NirIzr答案的评论中提到的所有内容: br />在启用了安全启动的计算机(即所有实际计算机)上,默认情况下禁用从Windows 8开始的user32.dll

设置了AppInit_Dlls的进程包括大多数Chrome进程(渲染器,gpu,ppapi)和一些系统进程(例如ProcessExtensionPointDisablePolicy)。

我不认为这只是一个警告。问题是您是否可以注入所有进程,而答案是否定的。

DLL注入和加载通常

但是还有其他方法可以进行DLL注入。关于它们呢?
这使我们回到第一个问题。

由于Windows Vista,由于DRM的原因,某些进程是“受保护的进程”。请参阅:



受保护的进程(来自Windows Internals 5th Edition)

在Windows Vista内核中:第3部分(滚动到“受保护的进程” )

要加载到这些过程中,必须使用可能没有的特殊证书签名。

从那时起,Microsoft越来越多地扩展了受保护的流程基础结构,以包括更多的流程并允许保护第三方流程。请参阅保护反恶意软件服务。

有不同级别的保护,但是要加载到其中一些进程中,还必须使用同样没有的特殊证书进行签名,并且将它们加载到它们的其余部分中,则需要一个您没有的证书(因为Microsoft不向任何第三方提供该证书)。以这种方式受保护的进程是ProcessExtensionPointDisablePolicy的某些实例以及任何尊重自身的AV的处理。无论采用哪种方法(RuntimeBroker.exesmss.exe或不依赖csrss.exe的更强大的方法),您都不能注入这些变量。 10可以防止加载未经Microsoft,WHQL或Windows应用商店签名的DLL。与需要Microsoft证书的受保护进程不同,任何进程都可以选择加入services.exe。启用此缓解措施的进程包括svchost.exe(显然是Windows应用商店本身),SetWindowsHookExAppInit_Dlls(仅Microsoft),user32.dll(仅Microsoft)和ProcessSignaturePolicy(仅Microsoft)。

摘要:不能将任意DLL加载到许多进程中,包括从程序自己的合法代码。无论使用哪种方法,都不能将DLL注入这些进程中。


在Windows 8.1受保护进程上的更多链接来自Alex Ionescu的博客:


受保护进程的演变第1部分:Windows 8.1中的哈希传递缓解措施
受保护进程的演变第2部分:漏洞利用/越狱缓解措施,无法杀死的进程和受保护的服务
受保护的过程第3部分:Windows PKI内部(签名级别,方案,根密钥,EKU和运行时签名者)


#2 楼

DLL注入是一个很大的主题,但是要回答您的两个特定问题:是的,SetwindowsHookEx可以注入所有当前正在运行的进程。可以通过向0参数提供零值(dwThreadId)来完成。例如,从Windows 7开始,称为AppInit_DLLs的注册表值控制是否仅允许加载代码签名的DLL。对于Windows 7,将值设置为RequireSignedAppInit_DLLs(关闭)时,在Windows 10上默认为打开。此外,在Windows 8(及更高版本)中,在具有安全启动的计算机上,将自动禁用0(使用AppInit_DLLs注册表值启用)。 。

编辑:

Windows版本中的多种对策功能正在逐步淘汰(或完全阻止)这两种技术。不推荐使用它们(实际上,Microsoft本身通常不鼓励使用它们)使用合法软件(或恶意软件)。用户在注释中堆积了一些警告和限制,但是为了清楚和简单起见(并且由于这里有很多警告),我选择只包括一些。

评论


顺便说一句,AppInit_DLLs仅在进程加载user32.dll时有效。

–伊戈尔·斯科钦斯基♦
17年9月11日在16:37

PROCESS_CREATION_MITIGATION_POLICY_EXTENSION_POINT_DISABLE_ALWAYS_ON缓解策略禁用了AppInit_Dlls和全局挂钩。

– conio
17年9月11日在16:41

此外,从Windows 8开始,启用安全启动时,无论签名如何,默认情况下均禁用AppInit_Dlls。请参阅AppInit DLL和安全启动。您可能在VM上看不到此消息(除非您使用Hyper-V),但是实际计算机默认情况下启用了安全启动。

– conio
17年9月11日在16:43



谢谢,增加了一段,以指出有很多警告,不鼓励使用这些技术,请参考注释以获取其他警告。

– NirIzr
17年9月11日在16:57