我有一个将DLL添加到注册表项HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs的恶意软件样本。注册表项引用的DLL中存在恶意功能,但是此恶意软件示例不会加载或调用DLL,也不会表现出任何其他恶意行为。键?

#1 楼

基本上,启动任何进程时,都会加载该注册表项中列出的所有DLL。
有关详细信息,请参阅使用AppInit_DLLs注册表值。当前登录会话。


它们通常被恶意代码(不一定是恶意的)用作DLL注入的一种方式,例如钩住函数。更确切地说,正如彼得·费里指出的那样,AppInit DLL实际上仅由链接user32.dll的进程加载。
实际的注册表路径在64位和32位版本的OS之间有所不同。

因此,对于32位系统上的32位DLL,路径为: />
对于64位系统上的64位DLL:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs] 


对于64位系统上的32位DLL:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs]


多个条目用空格或逗号分隔,并且出于明显的原因,DLL的路径不得包含任何空格。
在Vista和更高版本上,需要对AppInit DLL进行签名,可以将注册表值RequireSignedAppInit_DLLs设置为0,以禁用此要求。

评论


更准确地说,是在加载user32.dll本身时由user32.dll加载AppInit_DLL dll,并且可以动态发生(延迟加载或手动加载)。那里也可以有多个注册的DLL。

–彼得·弗里
13年3月29日在22:36

在Vista / Windows7周围添加了AFAIK RequireSignedAppInit_DLLs,但默认情况下仍处于关闭状态,并且默认情况下仅在Windows 10更新中处于启用状态。

– NirIzr
17年9月11日15:56

我认为这不再适用于Windows 10。

–c00000fd
19年1月1日,9:56

#2 楼

Windows 7中AppInit DLL的实现如下:在user32.dll!ClientThreadSetup中,除LogonProcess之外的任何进程都调用从kernel32.dll导出的LoadAppInitDlls

kernel32.dll!LoadAppInitDlls检查LoadAppInit_DLLs注册表项,如果设置,则调用BasepLoadAppInitDlls(PEB的偏移量3的值为2时除外)。如果需要签名(设置了BasepLoadAppInitDlls注册表值时),则会将AppInit_DLLs标志传递给LoadLibraryEx。

因此,通过设置此注册表项,将在设置此注册表项后启动的每个进程中注入恶意软件dll 。在以前的操作系统版本中,没有针对非GUI /控制台进程调用AppInit DLL,但至少在Windows 7上,也针对非GUI /控制台进程调用了