DOS 時代程式碼獨立,重複造輪子。靜態鏈接將庫文件編譯進 EXE,導致程式臃腫。Windows 引入動態鏈接庫(DLL):庫文件預編譯為獨立模組,提供 API 接口,程式運行時調入內存、執行所需函數、返回結果、卸載,實現代碼共享、減小體積。Windows 核心由數千 DLL 組成,kernel32.dll、user32.dll、gdi32.dll 為基礎三大 DLL。
API(應用程式介面)是 DLL 導出的標準化函數名稱。DLL 木馬將木馬功能代碼編譯為 DLL,導出相關 API,外觀上是普通 DLL,實則攜帶完整木馬功能。優勢:運行時掛載於調用進程,不產生獨立進程,難以被發現。
Windows 加載 DLL 需入口函數 DllMain(類似 EXE 的 main)。若無 DllMain,系統用預設空函數加載。DLL 木馬必須在 DllMain 或其指向的執行模組中編寫核心代碼。
DllMain 為標準入口。CreateRemoteThread)將 DLL 注入正常系統進程(如 explorer.exe),無新進程產生,唯有宿主進程結束木馬才停止。rundll32.exe、註冊表 AppInit_DLLs、svchost.exe(需寫為 NT Service,入口 ServiceMain)。Loader 隱蔽性關鍵。