14種DLL注入技術

本文只是介紹各個注入的核心思想,詳細的可以參照文末鏈接裏的源碼,一看就明白。
本文只是介紹各個注入的核心思想,詳細的可以參照文末鏈接裏的源碼,一看就明白。
本文只是介紹各個注入的核心思想,詳細的可以參照文末鏈接裏的源碼,一看就明白。

 

第一種  CreateRemoteThread遠程線程調用
DLL注入是指向某一個特定的進程空間強制插入一個特定的
DLL文件映像,值得注意的是這種插入是強制性的插入,從技術層面來看,DLL注入是利用LoadLibrary()加載特定的DLL文件到進程的內存空間。注入的對象是可以是自身,也可以是遠程進程。DLL注入技術實現主要分爲5個部分,

1.打開進程,獲取進程的句柄,

2.是在內存空間開闢一段內存空間

3.是向剛剛開闢的內存中寫入需要注入DLL的路徑,

4.是利用GetProcessAddree()獲取LoadLibrary的地址。

5.是調用遠程線程,利用LoadLibrary()去加載DLL。

 

第二種  RtlCreateUserThread創建用戶線程
RtlCreateUserThread
CreateRemoteThread的底層實現,所以使用RtlCreateUserThread的原理是和使用CreateRemoteThread的原理是一樣的。唯一的區別是使用CreateRemoteThread寫入目標進程的是Dll的路徑,而RtlCreateUserThread寫入的是一段shellcode。因爲直接調用了RtlCreateUserThread創建線程,繞過了win7/vista對這方面的檢測所以可以注入到系統進程中(比如winlogon.exe),當然此方法也有缺陷,因爲沒有和csrss通訊,可能在線程體裏面調用某些api函數可能會失敗。還有需要注意的是因爲RtlCreateUserThread沒有經過系統封裝所以線程體必須自己調用ExitThread來結束線程。

 

第三種 APC注入
通過CreateRemoteThread
函數創建一個線程就可以使用遠程進程中的一個函數。然而,線程創建需要系統開銷,所以調用一個現有的線程會更加高效。

Windows的異步過程調用(APC)可以滿足這種要求

APC可以讓一個線程在它正常的執行路徑運行之前執行一些其他的代碼。每個線程都有一個附加的APC隊列,它們在線程處於可警告的等待狀態時被處理。

所以只需要將目標進程的線程的APC隊列裏面添加APC過程,當然爲了提高命中率可以向進程的所有線程中添加APC過程。然後促使線程從休眠中恢復就可以實現APC注入。

 

第四種 設置進程上下文

核心是通過函數SetContextThread

實現注入,像很多方法比如內存注入,通過傀儡進程注入核心都是這個思想。都是掛起線程,然後往內存中寫入shellcode然後,重新設置Context,然後調用SetThreadContextResumeThread恢復線程執行。

 

第五種  反射式注入

反射式dll注入不需要dll文件落地,減少被查殺的風險。首先將需要注入的dll寫入進程內存,然後爲該dll添加一個導出函數,利用這個導出函數讓其自動的裝載dll。注射器是將DLL文件寫入目標進程內存。反射裝載器實現的就是模擬dll裝載器裝載dll文件的操作。

 

第六種  輸入法注入

切換輸入法時候,輸入法管理器imm32.dll就會加載IME模塊,這樣就形成了輸入法注入的充要條件。而由於這個Ime文件本質上只是個存放在C:\WINDOWS\system32目錄下的特殊的DLL文件,因此我們可以利用這個特性,在Ime文件中使用LoadLibrary()函數待注入的DLL文件。

 

第七種 全局鉤子注入

利用windows的消息機制,可以在事件發送到os之間設置一條鉤鏈,來鉤取不同的消息,如以下代碼,利用SetwindowsHookEx可以鉤取一個鍵盤消息。並且調用鉤子處理函數來處理這個消息,所達到的效果和dll注入是一樣的(執行dll內部的代碼)

 

第八種  DLL劫持

DLL劫持原理見鏈接  https://blog.csdn.net/liuhaidon1992/article/details/103815868

注入實現見文末鏈接

 

第九種  註冊表注入

REG注入原理是利用在Windows 系統中,當REG以下鍵值中存在有DLL文件路徑時,會跟隨EXE文件的啓動加載這個DLL文件路徑中的DLL文件。當如果遇到有多個DLL文件時,需要用逗號或者空格隔開多個DLL文件的路徑。

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \Windows\AppInit_DLLs中,os就會自動去加載位於該註冊表的有效的DLL。所以只需要在註冊表HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion \Windows\AppInit_DLLs中添加DLL的絕對路徑,並把數值改爲1,可以使得所有加載USER32.dll的進程全部加載目標路徑的DLL
利用AppCertDlls註冊表,將HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls下寫入dll的路徑,可以將此註冊表項下的DLL加載到調用CreateProcessCreateProcessAsUserCreateProcessWithLogonWCreateProcessWithTokenWWinExec的每個進程中。值得注意的是win xp-win 10 默認不存在這個註冊表項

 

第十種  掛起線程注入

OpenThread-->SuspendThread-->申請內存-->寫入代碼-->GetThreadContext-->獲取EIP-->修改EIP-->SetThreadContext-->ResumeThread

 

第十一種  掛起進程注入

CreateProcess注入方法之一,CREATE_SUSPENDED以掛起的方式打開進程,後面方法與掛起線程注入相似。

 

第十二種  進程替換技術(進程hollowing)

除了注入之外,我們還可以使用進程替換技術將一個可執行文件寫入一個運行的進程內部,這種技術讓惡意代碼擁有和被替換進程相同的特權,這個技術關鍵是:需要以掛起狀態創建進程,也就是說,這個進程將會被載入內存,但是主線程過去,在外部程序恢復主線程之前,程序不會工作,恢復主線程之後,程序工作。如下代碼是進程替換代碼的僞代碼.該程序通過調用CreateProcess並將進程創建標誌設置爲CREATE_SUSPENDED0x00000004)完成。新進程的主線程被創建爲掛起狀態,直到ResumeThread函數被調用纔會運行。接下來,惡意軟件需要用惡意的有效載荷來替換合法文件的內容。這可以通過調用ZwUnmapViewOfSectionNtUnmapViewOfSection來取消映射目標進程的內存(這一步的目的在於是重新寫入傀儡進程的時候,進程對於這部分待注入的內存還有所有權,爲了避免衝突,在重寫入進程之前,需要取消進程對內存的映射)。這兩個API基本上釋放了一個部分指向的所有內存。現在內存被取消映射,加載器執行VirtualAllocEx爲惡意軟件分配新內存,並使用WriteProcessMemory將每個惡意軟件的部分寫入目標進程空間。惡意軟件調用SetThreadContextentrypoint指向已編寫的新代碼段。最後,惡意軟件通過調用ResumeThread來恢復掛起的線程。

CreateProcess(...,"目標進程.exe",CREATE_SUSPENDED);//以掛起狀態創建進程

ZwUnmapviewOfSection()                             //釋放內存,解除內存映射

VirtualAllocEx()                                   //爲惡意代碼分配新空間

writeProcessMenory(header)                         //寫入數據(文件頭)

for(i=0;i<NumberOfSection;i++)

    WriteProcessMenory(section)                    //寫入節區數據

···

ResumeThread()                                     //重新啓動主線程

 

第十三種方法  調試器注入

CreateProcess注入方法之二,DEBUG_ONLY_THIS_PROCESS以調試的方法打開進程,利用CREATE_PROCESS_DEBUG_EVENT,向目標程序中寫入我們的ShellCode完成相應功能,並且我們的ShellCode中寫入以CC斷點,代碼執行指令時觸發EXCEPTION_DEBUG_EVENT事件,在EXCEPTION_DEBUG_EVENT的處理函數中回到原來的執行流程。

 

第十四種方法 導入表注入

靜態注入的方法。修改PE文件,添加一個新節,修改導入表添加一個新的DLL實現注入。

 

源碼鏈接: https://pan.baidu.com/s/1VeYcCcGvAOW8oxzclf6d4A 提取碼: 9spe 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章