惡意代碼の奇客pdf分析
遠控木馬奇客PDF轉換器暗刷流量,我們對他進行惡意代碼分析。
首先我們拿到惡意代碼樣本后,一共用如下幾種方法對其就行分析
- 靜態分析基礎技術
- 動態分析基礎技術
- 程序代碼邏輯分析
- 程序動態調試分析
- 惡意程序分析思路總結
奇客PDF安裝包分析
靜態分析基礎技術
上傳殺毒網
我們先將惡意程序上傳到https://www.virustotal.com/ 網站進行殺毒,進行一個大概的查殺過程。
上傳后發現沒有一個殺毒軟件報毒,那么有可能是這些殺毒軟件都沒有收集到特征碼,或者這程序進行了加殼加密等免殺技術。
查殼
我們利用StudyPE+ 工具對程序進行查殼操作,我們主要看文件類型這個地方,程序如果加殼了那么在文件類型這地方就會顯示殼的特征,如果程序沒有加殼呢那么就會顯示用什么語言開發或者用什么編譯器進行編譯的,還有一種情況會顯示Unknow Exe Type
,一般遇到這種情況是沒有分析出什么類型,這時候點擊一下下面的深度搜索按鈕即可。
這里我們可以看到是Delphi進行開發的。
編譯時間
接着我們再來看看程序是什么時候被編譯的,首先我們要知道PE程序他的編譯時間存放在哪里,這時候我們可以根據PE結構圖來查閱,我這里准備了一張PE結構圖,我們可以看到在PE頭中有一個_IMAGE_FILE_HEADER
結構體里面有個成員時間戳TimeDateStamp
(熒光筆位置)。
這里我們可以利用StudyPE+ 工具查看自動計算后的編譯時間,載入程序后點擊PE頭選項里面->時間戳->時間計算器。
導入表分析
程序會進行文件的查找,文件的寫出等操作,程序中還有資源和動態庫載入等的操作。
資源查看
我們用Restorator
程序對其程序資源進行查看,載入程序后我們可以看到在RC數據資源處有一個名為CHARTABLE的數據,其內容看着像是被加密了的十六進制數據,並且在版本資源段處可以看到這個程序是一個安裝包程序。
這里我們用壓縮軟件打開安裝包后可以看到里面帶壓縮包的內容,初步懷疑惡意程序可能會釋放這些文件到系統目錄,進行病毒木馬的一個釋放。其中這里的2.0和4.0代表的並不是程序版本,我觀察后發現他其實是用.NET FrameWork2.0和4.0編譯的程序,他這里之所以分為2.0和4.0是因為為了兼容用戶電腦上安裝的.NETFrameWork框架,像XP系統自帶的可能是.NETFrameWork2.0框架,而像win7系統自帶的都是.NETFrameWork4.0框架且無法安裝.NETFrameWork2.0框架。
動態分析基礎技術
動態分析基礎技術我們主要利用到三個工具,一款是Process Monitor
行為分析工具,另外一款是Process Explorer
進程分析工具,還有一個WireShark流量分析工具。
Process Monitor監控
首先我們打開Process Monitor,然后設置過濾器,選Process Name填入我們要監控的程序名。
Process Explorer
打開Process Explorer然后我們實時的關注進程的信息
接着我們把WireShark開啟監控后,就可以雙擊運行我們的奇客PDF轉換.exe了,然后留意Process Explorer的窗口。
惡意程序創建奇客PDF轉換.tmp進程
雙擊后出現了安裝界面,並且在Process Explorer窗口中先出了進程名並且進程名下有一個.tmp進程。
我們鼠標放在這個.tmp文件上后,可以看到他的命令行和路徑,可以看出奇客PDF轉換器他釋放出這個.tmp程序然后在用.tmp程序進行解壓奇客PDF轉換.exe里面壓縮包內容然后進行安裝。
具體我們還可以看看奇客PDF轉換.exe創建了哪些Handle句柄,我們鼠標點到奇客PDF轉換.exe上面
可以看到奇客PDF轉換.exe創建了一個進程.tmp
接着我們在Process Monitor過濾器里面把奇客PDF轉換.tmp也加上,然后我們點擊快速安裝進行程序的安裝,這時候還是注意留意Process Explorer窗口。
惡意程序創建FnClientService進程
當我們運行程序后在Process Monitor中出現過一個cmd.exe並且還有taskkill進程,因為出現太快就沒有截圖成功,接着還出現了一個FnClientSerice.exe進程,這個進程下面還出現了net.exe等進程。所以初步懷疑這個惡意程序會釋放進程FnClientService.exe並且運行。
好的接着我們繼續切換到Process Monitor中。
Process Monitor詳細過濾
在Process Monitor中我們設置Operation添加RegSetValue和WriteFile,看看他寫入的文件和注冊表操作。
奇客PDF轉換.exe創建奇客PDF轉換.tmp文件
可以看到exe程序寫出了.tmp程序,並且還寫出了一個日志文件$LogFile
奇客PDF轉換.tmp寫出大量dll和.zip
接着主要來看.tmp程序寫出的文件和注冊表操作,可以看到.tmp程序在其目錄下寫出了大量的dll和資源文件還有.zip壓縮包。
對釋放文件詳細分析
我們右鍵跳轉到其目錄,查看.tmp程序釋放出的所有文件,其中有個.bat和.zip引起了我們的注意。
qk.bat內容
其中qk.bat文件他會關閉fn服務,然后刪除fn服務,並且結束FnClientService.exe,我懷疑他這里進行這些操作是為了把別人裝的同樣的惡意程序給結束關掉,安裝自己的服務好讓自己的惡意程序成功安裝,如果不先前結束這些服務的話很有可能惡意程序會安裝失敗。
psdk.zip內容
然后這個psdk.zip壓縮包,正好是我們之前在奇客PDF.exe里面看到的壓縮包內容,這里他應該是利用unzipw32.dll動態庫對psdk.zip解壓並且釋放到某個路徑下去。
分析程序如何解壓釋放惡意文件
我們在Process Explorer中確實可以看到.tmp程序有調用到unzipw32.dll解壓庫。
可以看到解壓后的文件被釋放到了C:\Users\Administrator\AppData\Roming
目錄。
觀察進程歷史信息
然后接着我們在Process Monitor中點擊Process Tree,來查看進程歷史運行的命令或歷史進程信息等。
可以看到.tmp程序創建的歷史進程和進程運行的命令
首先和我們分析的一樣,他先運行了qk.bat關閉服務和結束進程等操作。
然后接着他運行了壓縮包解壓后釋放出來的start.bat,看歷史記錄他應該是創建了Start4.0.exe,Start4.0.exe安裝了fn服務,並且啟動服務。
我們來看看Start.bat的內容,其中Start.bat的內容主要是為了兼容XP,如果目標系統是XP系統則會運行Start2.0.exe啟動對應的.NET FrameWork2.0框架支持的程序,因為我虛擬機里面是Win7所以默認啟動的是Start4.0.exe
對了這里補充下,查看服務的話可以按win+r運行,然后輸入service.msc
運行后顯示的這些就是服務了。
安裝包分析總結
首先我們經過了一系列的靜態分析還有動態分析后,對這個安裝包大概流程可以做個分析了。
惡意代碼分析
到目前為止我們對惡意程序的安裝包已經有了一個大概的認知,其安裝包主要的功能是釋放惡意代碼並執行,接下來我們就要詳細的對惡意代碼進行分析了。
Start4.0.exe 分析
查殼
程序並未加殼,顯示程序用.NET開發,可以使用c#反編譯工具dnspy
對其源碼進行還原。
代碼分析
打開dnSpy反編譯工具拖入Start4.0.exe
,接着找到Main入口函數,他是程序執行的起點,程序執行的第一句代碼是從Main入口函數開始。
Main函數分析
前兩句代碼都是系統自帶的我們不需要關注,大概內容是設置程序窗口樣式,可視化樣式,我們重點從第三行代碼開始入手。
CheckServerClentExe函數分析
分析這個函數我們能知道,程序會先獲取FnClientService
進程,如果存在這個進程就會先將其關閉,然后再執行函數OpenSercerExe()
,其函數主要的內容是獲取FnClientService.exe的路徑並運行創建進程。
Start4.0.exe總結
由於C#程序被編譯后並沒有成為可運行的二進制文件,而是一種中間狀態,所以被反編譯后基本上能得到源碼,所以這里我們就不需要再動態分析了,看代碼基本上就能知道這個程序的基本行為了。
Start4.0.exe主要做的事情是關閉FnClientService.exe
進程,並運行本地的FnclientService.exe
程序。
FnClientService.exe分析
接着我們經過一系列分析,已經知道了其最重要的惡意程序是FnClientService.exe
,接下來對其就行動靜態分析。
靜態基礎分析
首先我們還是對其進行基礎的一個靜態分析。
查殼
未加殼,顯示為C#程序開發,可用dnSpy反編譯
軟件對其源碼還原。
Strings字符串查看
使用方法
這里還沒介紹Strings這款工具,這是微軟開發的一款可以查看PE程序字符串的工具,可在官網https://docs.microsoft.com/zh-cn/sysinternals/downloads/strings處進行下載,因為前面分析的安裝包實在是過大,用Strings查看其字符串內容太多。
軟件使用方法
Strings.exe xxxx.exe //xxxx.exe表示你要分析的程序
敏感字符串發現
通過Strings分析我們發現了幾處網址http://www.qikels.com/FnClientService/4.0/UpdateXml.xml
、zproxy.lum-superproxy.io:22225
、live.com
還有http get請求等關鍵字,接着還能發現一堆的類似代理池ip帶端口號。
這種帶xxx-master的文件夾一般都是在github上的開源項目zip解壓后的目錄,所以我們這里可以簡單的進行數據挖掘,我們可以直接去github搜這個NewLife.Net的項目。
簡單數據挖掘
從github項目源碼介紹上大概可以知道這是一個很強的網絡通信框架,所以我們這里可以簡單的猜測這個FnClinetService是集成了NewLife的網絡通信后門程序。
熟悉NewLife.Net框架
從簡單的數據挖掘中我們知道了,其惡意程序主要用NewLife框架開發,那我們可以仔細的看看NewLife官方的文檔對其框架進行熟悉,方便我們在分析FnClientService.exe的時候能夠進行快速的定位。
NewLife.Net框架主要分為客戶端和服務端,服務端負責監聽一些端口然后接受客戶端連接和數據,進行處理,然后響應。
我們這個惡意程序應該是一個客戶端,然后由控制者,控制大量的客戶端進行數據處理。
這里我們主要關注客戶端就行,因為我們這邊的程序應該就是一個客戶端程序,接着我們了解了如下信息
var uri = new NetUri("協議:ip:端口");//NewLife用NetUri來創建http https tcp等協議對象並且包含ip地址 端口號
uri.CreateRemote();//創建連接 進行協議的連接
Xtrace.Log;//用Xtrace進行回顯到控制台,或者輸出到日志
client.Send()//用Send函數來發送數據給服務端
熟悉服務管理NewLife.Agent
NewLife.Agent應該是一個Windows的服務管理程序,用來安裝、卸載、啟動服務。
我們下載官方的例子,並且修改如下地方進行編譯,編譯后會生成一個exe的控制台程序,運行后用命令操作后會安裝顯示服務名稱為:惡意代碼分析
的服務,服務名為:TestService
。
其安裝的服務,可以看到服務名稱,顯示名稱,描述就是我們之前在代碼里面改的值。
代碼分析
MainClientService
因為我們熟悉了NewLife的一些框架,所以我們進行代碼分析的時候,心里面就有一個大概的模型了,根據之前對框架的熟悉我們可以快速的定位到MainClientService
構造函數和StartWork
函數,其中一個用來顯示服務名等信息,另外一個是業務的代碼,這里他創建的服務名為:fn,服務顯示名稱為:fnservice。
StartWork
其業務代碼會先創建一個計時器,然后執行ClientTools類的函數獲取http://fei.wanhuacongzhong.top/get_fixed_ip
獲取返回的Json數據,然后執行this.Closed()函數和this.Open()函數。
ClientTools.GetJson
請求網址,獲取response(json格式),返回字符串。
Client.Close
應該是些關閉線程操作
Client.Open
應該是創建兩個線程執行,其中調用了FnClient.dll
的代碼,所以我們接下來最后就是要對FnClient.dll
進行分析了。
FnClientService.exe總結
通過一些列的分析從最基礎的靜態分析到后面的NewLife框架再到代碼分析,我們已經摸透了這個FnClinetService.exe的功能和流程了,FnClientService.exe主要就是一個服務,類似與守護進程,為了重啟后能自動運行他主要的功能都在FnClinet.dll
里面。
FnClinet.dll分析
經過上面分析,我們已經知道了惡意程序核心東西都在FnClient.dll里,下面我們通過靜態來對FnClient.dll進行詳細的分析。
我們還是對照者NewLife項目進行分析https://www.yuque.com/smartstone/blood/net_server,方便我們快速定位到想要的代碼處。
因為我們在簽名分析FnClientService最后的時候發現他會從FnClient.dll引入代碼來創建SessionClient,所以我們先定位到SessionClient這個類,然后他會調用Start,Start其實調用的是StartSeesion.
StartSession
StartSession會從網址fei.wanhuacongzhong.top/get_fixed_ip
獲取Json數據並且拿到服務器ip和端口號進行tcp的連接,接着還會接收來自服務器的命令進行處理。
SendValidation
發送受害者的系統信息,操作系統版本、惡意程序版本、通過系統版本組裝一個簽名Sing發送給服務器。
獲取系統版本
利用獲取的系統版本和文件版本和固定字符串進行MD5加密生成Sign
Session_Received
因為筆者在寫這文章時候,這開發者還有公司都已經被端掉了,所以服務器什么的已經不能返回了,筆者在網上找了之前360分析文章的截圖。
首先我們在上圖中看到@@@@@@@
分割的字符串前面是一個數字,應該是任務id,然后后面是一個http請求,所以Session_Received
函數主要功能就是接受服務器發過來的任務,然后在本地完成http請求,來達到一個流量暗刷的目的.
ClientHandle
我們在ClinetHandle里面可以看到,傳進來一個id,還有一個設置代理的端口號應該是8080,接着會創建線程執行Rend
函數.
我們在Session_Received
中new ClientHandle(id,this.httpProxy_Port)
代碼中可以得知他會傳進來一個任務和一個用於http代理的端口號8080,而這一切在Rend
函數中全部可以解釋清楚了,惡意程序利用服務器派發的任務,然后通過代理上MainServer
中的ip和端口,最后利用http請求任務中的網址,達到用肉雞代理代理池中的ip來暗刷流量的這一整個過程。
Rend
中還有個else分支,主要功能是如果上面的MainServer沒有ip和端口就不代理訪問任務,而是通過肉雞本身來http請求訪問任務.
HttpProxy
創建sock代理
最后總結
通過這個例子,我們學習了如何使用動靜態分析Process Monitor、Process Explorer、WireShark等,並且通過線索找到開源項目然后利用C#反編譯器進行代碼分析。