windows操作系統允許將用戶提供的dll加載到所有的進程的內存空間中。該功能可以用來做后門持久化。有點類似於linux的ld_preload環境變量。在進程啟動的時候,操作系統會將用戶提供的dll加載。在設置該功能時,需要administrator權限。設置方法為修改注冊表中兩個選項
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows
微軟默認阻止用戶通過appinit功能去加載未知的dll。不過,可以通過修改注冊表鍵值LoadAppInit_DLLs為1去關閉該功能。將待加載的dll保存在Program Files文件夾,並且將AppInit_DLLs鍵值修改為待加載dll的路徑,即可讓所有windows進程都加載該dll。
這是因為在“ AppInit_DLLs”注冊表項中指定的DLL是由user32.dll加載的,幾乎所有應用程序都使用該user32.dll。
Enable LoadAppInit_DLLs - 32bit and 64bit
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\LoadAppInit_DLLs - 0x1
Registry Key for Arbitrary DLL via AppInit - 32bit and 64bit
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\WindowsAppInit_DLLs
HKEY_LOCAL_MACHINE\Software\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs

當然,每個進程都加載dll,並反彈shell的話,會很雜亂。所以,有人開發了一個dll工具https://www.didierstevens.com/files/software/LoadDLLViaAppInit_V0_0_0_1.zip,通過
LoadDLLViaAppInit.bl.txt文件來決定哪些應用程序去加載用戶指定的appinit dll。


