如何将 DLL 注入每个进程?能行SetwindowsHookEx()
吗?是否AppInit_DLLs
因为它曾经的工作?
如何进行全局DLL注入
TLDR:不,不,不。
您的帖子中隐藏着几个问题:
- 是否可以将 DLL 注入每个进程?
- 如果可能,以下方法是否可以做到这一点:
SetWindowsHookEx
?AppInit_Dlls
?
第一个问题的答案是“否”。
第二个问题的两个部分的答案都是“不,即使第一个问题的答案是肯定的”。
SetWindowsHookEx
和 AppInit_Dlls
让我们从第二个问题开始。这两种方法仅适用于加载user32.dll
. 所以这已经不是你问的“每个过程”。
最重要的是我在对 NirIzr 的回答的评论中提到的所有内容:
- 从 Windows 8 开始,
AppInit_Dlls
在启用了安全启动的机器(即所有真实世界的机器)上默认禁用。 - 通过设置
ProcessExtensionPointDisablePolicy
缓解策略,进程可以选择退出这两种方法。
例如,ProcessExtensionPointDisablePolicy
设置的进程包括大多数 Chrome 进程(渲染器、gpu、ppapi)和一些系统进程(如RuntimeBroker.exe
)。
我不认为这只是一个警告。问题是能不能注入所有进程,答案是否定的。
DLL 注入和加载一般
但是还有其他方法可以进行 DLL 注入。他们呢?
这让我们回到第一个问题。
从 Windows Vista 开始,出于 DRM 的原因,某些进程是“受保护的进程”。看:
- 受保护的进程(来自 Windows Internals 5th edition)
- Windows Vista 内核内部:第 3 部分(滚动到“受保护的进程”)
要加载到这些过程中,您必须使用特殊证书进行签名,而您可能没有。
从那时起,Microsoft 越来越多地扩展了受保护的进程基础结构,以包含更多进程并允许保护第三方进程。请参阅保护反恶意软件服务。
有不同级别的保护,但要加载到其中一些进程中,您还必须使用您也没有的特殊证书进行签名,而要加载到其余进程中,您需要一个您不能的证书有(因为 Microsoft 不向任何第三方提供它)。
以这种方式保护的进程是smss.exe
,csrss.exe
,services.exe
,svchost.exe
以及任何尊重自身的 AV 进程的一些实例。你也不能注入那些,不管方法( SetWindowsHookEx
, AppInit_Dlls
,或者不依赖于的更健壮的东西user32.dll
)。
此外,ProcessSignaturePolicy
从 Windows 10 开始可用的另一个缓解策略可以防止加载未由 Microsoft、WHQL 或 Windows 应用商店签名的 DLL。与需要 Microsoft 证书的受保护进程不同,任何进程都可以选择加入ProcessSignaturePolicy
.
启用此缓解措施的进程包括WinStore.App.exe
(显然是 Windows 应用商店应用程序本身)、MicrosoftEdgeCP.exe
(仅限商店)、csrss.exe
(仅限 Microsoft)、wininit.exe
(仅限 Microsoft)和services.exe
(仅限 Microsoft)。
总结:您不能将任意 DLL加载到许多进程中,包括LoadLibrary
从程序自己的合法代码中调用。无论使用何种方法,都不能将 DLL 注入这些进程。
如果你找到一种方法来做到这一点,这将是对 Windows 10 安全机制的重大颠覆,这种新颖性更有可能在专业会议上而不是在 SE 网络上展示。
有关 Windows 8.1 受保护进程的更多链接,来自 Alex Ionescu 的博客:
DLL 注入是一个很大的主题,但要回答您的两个具体问题:
- 是的,
SetwindowsHookEx
可以注入所有当前正在运行的进程。这是通过向参数提供零值 (0
) 来完成的dwThreadId
。 - 是的,通常
AppInit_DLLs
适用于最近的 Windows 版本,但是微软正在努力禁用和严格限制其使用。例如,从 Windows 7 开始,一个名为的注册表值RequireSignedAppInit_DLLs
控制是否只允许加载代码签名的 DLL。虽然该值0
在 Windows 7 中设置为(关闭),但在 Windows 10 上默认开启。此外,在 Windows 8(及更高版本)AppInit_DLLs
中,在LoadAppInit_DLLs
具有安全启动的机器上自动禁用(使用注册表值启用)。
编辑:
Windows 版本中的多个反措施功能正在逐步淘汰(或完全阻止)这两种技术。不建议将它们用于合法软件(或恶意软件)(实际上,Microsoft 本身通常不鼓励它们)。用户在评论中堆积了警告和限制,但为了清晰和简单起见(并且因为这里有很多警告),我选择只包括一些。