惡意程式碼分析實戰-啟動一個惡意的DLL
阿新 • • 發佈:2019-01-11
如果不能把惡意程式碼執行起來,那麼動態分析基礎技術沒有什麼用。
Windows版本中包含rundll32.exe程式,提供了一個執行DLL的平臺。
rundll32.exe Dllname,Export arguments
Export值必須是一個DLL檔案匯出函式表中的函式名或者序號。
PEID可以看匯出函式表。
圖1
Install就像是啟動rip.dll的一個入口,所以可以用rundll32啟動該惡意程式碼
惡意的DLL在DLLMain(稱作DLL函式入口點)執行它們的程式碼,因為無論DLL什麼時候載入,DLLMain函式總會執行,這樣就能通過rundll32.exe載入DLL。
方法1:
C:\>rundll32.exe rip.dll,Install
方法2:
惡意程式碼也可以通過序號來匯出函式,也就是說,匯出函式只有一個序號,而沒有函式名。
在前面加#號字元即可實現。
C:\>rundll32.exe xyzzy.dll,#5
方法3:
從IMAGE_FILE_HEADER的特徵域裡擦除IMAGE_FILE_DLL(0x2000)標記。這樣的改變不會執行任何輸入函式,但它會呼叫DLLMain方法,而且有可能造成惡意程式碼意想不到的崩潰或者終止。這樣做的目的是能使DLL執行惡意部分
PE結構位置:
struct IMAGE_NT_HEADERS NtHeader E8h F8h Fg: Bg:0xFFE0FF struct IMAGE_FILE_HEADER FileHeader ECh 14h Fg: Bg:0xFFE0FF struct FILE_CHARACTERISTICS Characteristics FEh 2h Fg: Bg:0xFFE0FF WORD WORD IMAGE_FILE_DLL : 1 1 FEh 2h Fg: Bg:0xFFE0FF 0x2000 File is a DLL
有引數的情況
DLL形態的惡意程式碼也可能需要被安裝成一個服務。比如ipr32x.dll中匯出了InstallService函式。
C:\>rundll32.exe ipr32x.dll,InstallService ServiceName
C:\>net start ServiceName
ServiceName引數必須提供給惡意程式碼,讓它能被安裝並執行起來。而在Windows系統中啟動指定的服務,可以使用Net Start命令。
動態除錯單一的服務
新建快捷方式-然後拖進OD就可以正常單步除錯了。