1. 程式人生 > >惡意程式碼分析實戰-啟動一個惡意的DLL

惡意程式碼分析實戰-啟動一個惡意的DLL

如果不能把惡意程式碼執行起來,那麼動態分析基礎技術沒有什麼用。

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就可以正常單步除錯了。