SetwindowsHookEx()
可以解决问题吗? AppInit_DLLs
是否能像以前一样工作?#1 楼
TLDR:不,不,不。您的帖子中隐藏了几个问题:
可以将DLL注入每个过程中?
如果可能,可以使用以下方法做到:
SetWindowsHookEx
吗? br /> 第一个问题的答案为“否”。
第二个问题的两个部分的答案均为“否,即使第一个问题的答案为是“。
AppInit_Dlls
和SetWindowsHookEx
让我们从第二个问题开始。这两种方法仅适用于加载
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.exe
,smss.exe
或不依赖csrss.exe
的更强大的方法),您都不能注入这些变量。 10可以防止加载未经Microsoft,WHQL或Windows应用商店签名的DLL。与需要Microsoft证书的受保护进程不同,任何进程都可以选择加入services.exe
。启用此缓解措施的进程包括svchost.exe
(显然是Windows应用商店本身),SetWindowsHookEx
( AppInit_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