程式注入之DLL注入

bj9532發表於2018-04-17

前言

DLL注入是我在大一的時候接觸的一種技術,那時候還不懂,最近結合小程式詳細的理解了一下。

DLL注入是將程式碼注入到一個遠端程式中,並讓遠端程式呼叫LoadLibrary()函式,從而強制遠端程式載入一個DLL程式到程式中。而當DLL被載入時就會執行DLL中的DllMain()函式,所以就會為惡意程式碼的執行提供機會,而因為DLL本身是由感染後的程式載入的同時PE檔案也並沒有對系統進行過多的敏感操作,所以這種技術具有相當強的一種隱蔽性。

圖解


程式分析

這裡的程式是由一個PE檔案和一個DLL檔案構成,毫無疑問,DLL檔案是需要注入的,裡面也會有相應的惡意程式碼,執行一下之後,啟動explorer.exe就會出現異常,每分鐘都會出現彈窗。

首先我們來分析一下主要的PE檔案。進入main()函式是這樣的


首先載入了psapi.dll並且匯入了三個函式,EnumProcessModules(),EnumProcesses(),GetModuleBaseNameA()。

然後獲取DLL的路徑,呼叫EnumProcesses()獲取記憶體中所有程式的PID,形成一個陣列,讓陣列中的每一個程式的pid成為引數傳入sub_401000()。

所以我們進入sub_401000(),這個函式長這樣


應該是對pid相應的程式名與explorer.exe進行比對,如果相同就返回1,進入後面的操作

獲取explorer.exe的控制程式碼,使用VirtualAllocEx()函式動態的在explorer.exe中分配一塊記憶體,成功之後指向那塊記憶體的指標會儲存在lpParameter中,與程式控制程式碼一起作為引數傳入WriteProcessMemory(),寫入的資料就是DLL的路徑。

然後Kernel32.dll中的LoadLibraryA()函式載入DLL也會被CreateRemoteThread()函式強行呼叫,從而執行DLL注入。

而我們看到DLL中就會有彈窗的相關程式碼。




DLL注入技術是比較經典的技術,我本身也覺得比較厲害,所以還是值得一學

程式與內容源自《惡意程式碼分析實戰》一書12-1

相關文章