1. 程式人生 > 其它 >2020-2021 惡意程式碼 20181230實驗五——動靜態聯合除錯

2020-2021 惡意程式碼 20181230實驗五——動靜態聯合除錯

2020-2021 惡意程式碼 20181230實驗五——動靜態聯合除錯

目錄

實踐目標:

部分一:

1.將樣例程式碼上傳到線上防毒中心進行分析並檢視報告,從報告可以看出什麼資訊?

2.這個檔案是否加殼了?如果加殼了,請進行脫殼;

3.有沒有匯入函式能夠暗示出這個程式的功能?如果有,你認為是哪些函式,從這些函式你可以得到什麼資訊?

4.有沒有什麼線索可以被用來在被感染主機上進行該惡意程式碼的查詢?

5.這個檔案的作用可能是什麼?

部分二:

1.當計算機重啟後,這個程式如何確保它繼續執行;

2.為什麼這個程式會一直使用一個互斥量;

3.可以用來檢測這個程式的基於主機特徵是什麼;

4.檢測這個惡意程式碼的基於網路特徵是什麼;

5、這個程式的目的是什麼;

6、這個程式什麼時候完成;

實踐過程:

部分一:Lab01-02.exe

將Lab01-02.exe檔案上傳至http://www.VirusTotal.com/進行分析並檢視報告。檔案匹配到了已有的反病毒軟體特徵嗎?

分析報告如下


69家機構有50個顯示存在惡意程式碼,並且顯示進行了upx加殼。

下面是該病毒的一些特徵:

由上圖可以得出該病毒具有一下特徵:

Trojan/Win32.StartPage.C26214 修改瀏覽器主頁
Trojan Clicker 木馬點選病毒
Trojan Generic:擁有與特洛伊木馬病毒疑似功能的程式碼;
TR/Downloader.Gen 有下載功能
malware.gen 記錄鍵盤輸入,並傳出

問題二:

是否有這個檔案被加殼或混淆的任何跡象?如何是這樣,這些跡象是什麼?如果該檔案被加殼,請進行脫殼,如果可能的話。

通過PEiD的檢測,檢測結果為Nothing Found。即沒有找到殼,這種情況可能有兩種原因:1.該程式沒有加殼;2.該程式加殼了,但該殼比較新,該軟體檢測不出來。

但注意到了EP Section中的標識為UPX1,說明這個exe檔案很可能用了一個UPX技術的變種,所以PEiD才會識別不出來.

然後我們用Dependency Walker,我們就會發現這個程式碼的匯入表KERNEL32.DLL 中有兩個函式LoadLibraryA,GetProcAddress.這兩個函式都是加殼的跡象,因為加殼的程式執行時候脫殼是必須要這兩個函式的。

下面再使用PE viewer進一步檢測:

首先該程式的節部分很奇怪,顯示的是UPX0,UPX1,UPX2.而不是常見的.text .data .rdata .rsrc,很明顯這是UPX加殼後的表現.下面通過虛擬大小與原始資料大小的對比就能發現端倪。

分節 虛擬大小 原始資料大小
UPX0 00004000 00000000
UPX1 00001000 00000600
UPX2 00001000 00000200

IMAGE_SECTION_HEADER UPX0中可得出Virtual Size00004000 Size of Raw Data00000000, 所以Virtual SizeSize of Raw Data
IMAGE_SECTION_HEADER UPX1IMAGE_SECTION_HEADER UPX2中的也是Virtual SizeSize of Raw Data大,所以可以確定該程式被加殼了.

並通過查資料該程式可能是UPX加殼,所以我們嘗試一下脫殼:
使用UPX.exe進行脫殼,過程如下:
Lab01-02.exe複製到upx所在資料夾下

命令列執行upx.exe

執行命令:upx -d Lab01-02.exe進行脫殼,顯示成功。

再把已脫殼的檔案放到http://www.VirusTotal.com/進行分析並檢視報告,可以發現檔案以及脫殼了。

問題三:

有沒有任何匯入函式能夠暗示這個程式的功能?如果有,是哪些匯入函式,它們會告訴你什麼?

現在我們繼續對脫殼後的程式分析,使用Dependency Walker對該程式進行分析:

由上圖可以看見該程式共有四個動態連結庫:

KERNEL32.DLL ADVAPI32.DLL MSVCRT.DLL WININE.DLL

KERNEL32.DLL

SystemTimeToFileTime 是一個程序,即系統時間本地時間。

GetModuleFileNameA 獲取當前程序已載入模組的檔案的完整路徑,該模組必須由當前程序載入。

CreatWaitableTimerA 建立計時器物件

ExitProcess 退出程式

OpenMutex 開啟互斥

SetWaitableTimer 啟動一個可等待計時器

WaitForSingleObject

CreatMutex 建立一個互斥體

CreatThread 建立一個執行緒

ADVAPI32.DLL

Advapi32.dll,使用了登錄檔,提醒我們注意程式中象登錄檔鍵值的字串,還有服務管理.可能會惡意關閉一些服務是某些程式不能執行,或者自動開啟一些服務。

CreateServiceA 建立一個服務物件,並將其新增到指定的服務控制管理器資料庫

StartServiceCtrlDispatcherA 呼叫服務程式

OpenSCManagerA 建立一個連線到服務控制管理器並開啟它的資料庫

WININET.DLL

WININE.DLL使用了網路服務,InternetOpenUrl,可以訪問網站,這裡值得警惕,該惡意木馬可能會通過訪問網路下載更多病毒,或者實時監控該主機,InternetOpenA 初始化一個應用程式

問題四:

有沒有什麼線索可以被用來在被感染主機上進行該惡意程式碼的查詢?

使用Strings.exe檢視脫殼的程式,內容如下:

出現可疑的URL: www.malwareanalysisbook.com 還有IE8.0 推測應該是使用IE開啟該網站

猜測可以通過檢視瀏覽器瀏覽記錄來推測是否有感染的可能。

問題五:

這個檔案的作用可能是什麼?訪問一個非法網站

部分二:Lab07-01.exe

利用PEID分析目標程式匯入函式:

ADVAPI32.dll:

兩個API函式:

CreateServiceA

OpenSCMangerA

推測是建立一個服務來保證系統啟動後也能繼續執行——問題1。

WININET.dll:

InternetOpenUrlA

InternetOpenA

推測程式會連線一個網站

利用IDApro進行分析

main函式:

API 函式:

StarServiceCtrIDispatcherA:用於實現服務,決定服務控制管理器所呼叫的服務控制函式(這裡是sub_401040),sub_401040StarServiceCtrIDispatcherA被呼叫完後再被呼叫。

雙擊開啟sub_401040

首先呼叫OpenMutexA函式,該函式會嘗試獲取名為HGL345互斥量的控制代碼,如果互斥量存在則呼叫ExitProcess結束程式,如果不存在則按照右邊的流程繼續執行程式。

如果互斥量不存在則在該流程中會先呼叫CreateMutexA建立名為HGL345的互斥量,該互斥量是該惡意程式的一個本地特徵,通過該互斥量以及這些函式通過圖中的編碼方式是為了保證在任意時刻在夕惕若只有一個該程式執行。

OpenSCManagerA函式用於開啟一個服務控制管理器,以便於該程式可以新增和修改服務,接著呼叫GetCurrentProcess來獲取當前程序的偽控制代碼(可以被複制,但不能被繼承,而且在程式最後不需要呼叫closehandle來關閉控制代碼)

GetModuleFileNameA:獲取當前所執行程式的完整路徑。獲取之後呼叫CreateServiceA,用來建立一個新的服務。

三個特別重要的引數:

lPBinaryPathName:用於儲存獲取的當前所執行程式的完整路徑,用於服務的安裝。

dwStartType:服務的啟動選項,這裡是2,對應ServiceAutoStart,意思是服務會系統啟動時自動執行。

dwserviceType:服務的型別,這裡是10h,表明該服務運行於獨立程序的服務程式。

服務名稱為:Malservice

綜上所述:該程式會建立一個名為Malservice的服務來保證在每次系統啟動後可以自動執行,從而到達持久化的駐留。

edx先自我異或以到達置零的效果,方便後續賦值操作。

SystemTime:windows一個關於時間的結構體。wYearwDayOfWeekwHourwSecond

分別是年,星期,小時,秒,將這四個變數設定為0(edx),之後將年賦值為834h,換10進製為2100,即2100年。這些賦值下來意思為2100年1月1日的0點0分0秒。之後呼叫SysTimeToFileTime將系統的時間轉換為檔案的時間。

三個API函式:

CreateWaitableTimerASetWaitableTimerWaitForSingleObject

SetWaitableTimer存在一個IpDuetime引數,為SysTimeToFileTime返回的FileTime(檔案的時間),即需等待到的時間。然後呼叫WaitForSingleObject函式,進入等待,一直等待到上面所設定的2100年1月1日的0點0分0秒才繼續執行。

到達時間繼續執行後,存在一個名為esi的計數器,將14h(十進位制20)賦值給esi。並且迴圈最後esi會自減(dec esi),即迴圈執行20次。

在迴圈里程序呼叫CreateThread建立執行緒函式,其中lpstartaddress引數會顯示那些函式會線上程建立後得到執行。

雙擊開啟lpstartaddress

程式首先呼叫InternetOpenA來初始化一個網路連線,接著執行迴圈,在迴圈中呼叫InternetOpenUrlA,迴圈最後有一個無條件跳轉jmp跳轉到loc_40116D即該迴圈的起始位置,進行無限迴圈,不會終止,即一直不停的呼叫InternetOpenUrlA函式來訪問圖中的網址。並且是啟用20個執行緒不斷訪問該網址。

綜上所述這是一個典型的DDoS攻擊(分散式拒絕服務攻擊)。