1.樣本概況 1.1 應用程式資訊 1.2 分析環境及工具 1.3 分析目标 2.具體分析過程 2.1 主函數 2.2 分析sub_40819c 2.2.2 存在Desktop_.ini檔案則删除 2.2.3 讀取目前檔案檢測是否是被感染者 2.2.4 若目前檔案是病毒 2.2.5 若目前檔案是被感染者 2.3 分析sub_40d18c 2.3.2 分析 sub_40C374 維護 2.3.3 分析 sub_40BACC 區域網路傳播 2.4 分析sub_40d088 2.4.1 分析sub_40CEE4 提權、關閉視窗、關閉程序、自啟動、隐藏屬性 2.4.2 分析 sub_40D040 QQ代理下載下傳惡意程式并運作 2.4.3 分析 sub_40D048 關閉C槽共享 2.4.4 分析 sub_407430 關閉安全相關 2.4.5 分析 sub_40CC4C 使用QQ代理下載下傳指定連結資料 2.4.6 分析 sub_40C728 使用QQ代理下載下傳惡意程式并執行 3.總結 3.1 分析結果總覽 3.2 本分析感悟總結
1.樣本概況
1.1 應用程式資訊
檔案: C:\Windows\System32\drivers\spo0lsv.exe
大小: 30001 bytes
修改時間: 2007年1月17日, 12:18:40
MD5: 512301C535C88255C9A252FDF70B7A03
SHA1: CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870
CRC32: E334747C
簡單功能介紹:
- 自啟動
- 删除gho檔案
- 全盤感染指定類型檔案
- 區域網路傳播
- 從網絡下載下傳其他惡意檔案執行
- 删除安全管理軟體服務、啟動項
- 其他
說明: 該樣本是熊貓燒香的一個變種spo0lsv.exe,高危險級别
1.2 分析環境及工具
系統環境:windows 7 32bit
工具:火絨劍、PcHunter、IDA、OllyDebug
1.3 分析目标
使用火絨劍進行行為分析,結果如下:
- 檔案操作
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcsQXYtJ3bm9CXldWYtlWPzNXZj9mcw1ycz9WL49zdaVnQuxEeVRkT3tmeOh3Y61EewknT10ERPBzZU50dFpWT5FEVNVTRE1UewMlT6tGRPBzYU1kdBRVT1UERNlHOT5kerR0TwMGVNZ3YyI2cKJDT0ljMZVXTzold41WW15UbMRTRE1UejdlYwlTeMZTTINGMShUYvwlbj5yZtlmbkN3YuQnclZnbvN2Ztl2Lc9CX6MHc0RHaiojIsJye.jpg)
分析:在各敏感路徑建立了spo0lsv.exe、setup.exe、autorun.inf、Desktop_.ini等檔案并寫入了内容。其作用暫時不明,待後面具體分析。
- 系統資料庫操作
分析:系統資料庫操作很多,能隻管看出的是在啟動項下建立了新的鍵值,以及設定了隐藏屬性。
- 網絡操作
分析:網絡操作也有很多,能看到嘗試連接配接了很多目前區域網路内的其他主機,并連接配接了一些網站
- 程序操作
分析:主要操作重複關閉開啟了spo0lsv.exe
- 執行監控
分析:執行了很多次指令,包含删除C槽網絡共享等
- 其他行為
分析:提取了檔案于C:Windows\System32\drivers\spo0lsv.exe,在不同檔案夾建立了很多Desktop_.ini檔案,等等。
2.具體分析過程
2.1 主函數
分析:前面使用了“xboy”、“whboy”來進行解密,并進行比對,比對成功就開始逐個調用sub_40819c、sub_40d18c、sub_40d088三個函數,接下來我們詳細分析這三個函數
2.2 分析sub_40819c
2.2.1 檢測Desktop_.ini檔案
分析(序号對應圖檔裡的标号):
- 擷取目前檔案的絕對路徑(包含目前檔案名)
- 根據目前獲得的檔案路徑(包含目前檔案名)檔案名稱提取檔案所在目錄
- 拼接檔案路徑:目前檔案所在目錄 + “Desktop_.ini”
- 檢測拼接的檔案是否存在
2.2.2 存在Desktop_.ini檔案則删除
分析:(前面還有檔案屬性的設定等小細節)
- 再次組合目标檔案Desktop_.ini的路徑
- 删除檔案
2.2.3 讀取目前檔案檢測是否是被感染者
分析:
- 讀取指定檔案(目前檔案)
- 擷取長度
- 判斷檔案長度是否小于等于0
- 判斷末尾是否是‘\0’即空字元
- 如果不是空字元,就往前拷貝一個位元組(ebx是下标)
- 判斷用來存儲末尾字元串的是否為空,辨別是病毒還是被感染者
注:
讀取檔案内容的函數分析如圖 2-5所示:
2.2.4 若目前檔案是病毒
分為兩種情況:
情況1:目前是非System32\drivers中的病毒,分析如下圖
分析:
- 打開spo0lsv.exe句柄并結束程序
- 組合system32路徑 + “drivers\” + “spo0lsv.exe”作為新檔案路徑
- 調用CopyFileA()複制目前檔案到新拼接的檔案名中
- 執行新拷貝的system32\drivers\spo0lsv.exe檔案,并結束自身程序,非system32\drivers檔案夾下的spo0lsv.exe到此執行完畢,程式結束
注:
終止程序的代碼分析如圖 2-7所示:
情況2:目前是System32\drivers 中的病毒
不做其他操作,目前部分結束
2.2.5 若目前檔案是被感染者
- 删除末尾辨別字元串
- 提取感染辨別字元串中的資訊
分析:
- 删除“whboy”字元串,提取帶有雙.exe字尾的原檔案名稱
- 提取原檔案大小
- 提取并建立宿主PE檔案
分析:
- 以Rewrite()建立并打開一個新檔案,或覆寫已存在的檔案
- 根據長度資訊,從已讀資料中提取原PE檔案的資料
- 重新整理寫入緩沖區到外部檔案,確定前面的操作寫入成功
- 建立并執行批處理檔案
批處理檔案,建立在User\AppData\Local\Temp檔案夾中,名稱是一個随機數+“$$.bat”
批處理程式樣本如下:
分析:
循環等待删除成功,因為程式正在運作,是以一開始删除失敗;将新建立的程式重命名為單.exe字尾;最後删除bat檔案自生。
- 周遊程序,檢視spo0lsv.exe是否在運作
分析:
- 建立程序快照
- 擷取第一個程序資訊
- 比較程序名時候是“spo0lsv.exe”
- 擷取下一個程序資訊
注:
當周遊到“spo0lsv.exe”的時候就停止周遊,并傳回狀态碼1,代表正在運作。
- 如果沒有運作就删除然後重新建立并寫入新病毒程式
分析:
- 設定源檔案為普通檔案
- 拼接檔案路徑
- 删除System32\drivers\spo0lsv.exe檔案
分析:
- 提取病毒檔案内容,前面還有幾句,由于螢幕限制沒有截完全,有興趣的可以根據位址查找
- 拼接檔案路徑System32\drivers\spo0lsv.exe
- 将本檔案提取出的病毒塊寫入System32\drivers\spo0lsv.exe檔案,并執行
2.3 分析sub_40d18c
點選進入該函數後又出現了3個函數:sub_40A5B0、sub_40C374、sub_40BACC,接下來分别對其進行詳細的分析。
2.3.1 分析 sub_40A5B0 感染
一個開啟線程的函數,線程回調函數是sub_40A48c。主要作用是建立、維護每個檔案夾下面的Desktop.ini檔案以及感染指定類型的檔案,以及删除gho檔案。
點選進入該線程回調函數展開分析:
- 周遊盤符,存儲存在的盤符
分析:
- 使用一個個字母 + “:\”組合成根路徑使用GetDriveTypeA()擷取盤的類型
- 将固定硬碟、網絡盤的盤符存儲起來
- 控制是26次循環,對應26個字母
- 排除A、B盤符,對其他盤符拼接“:\”作為參數,調用sub_0x409348,進行全盤周遊感染
對sub_0x409348進行分析:
a) 進行檔案周遊,并判斷檔案是否是檔案夾以及檔案名是否是’.’
分析:
- 擷取第一個檔案
- 判斷檔案的類型是否是檔案夾以及檔案名是否是“.”
b) 如果是檔案夾
首先排除系統相關的檔案夾,比如下圖中的WINDOWS、WINNT、SYSTEM32等等檔案夾。
然後檢查目前檔案夾是否Desktop_.ini檔案
如果已經存在Desktop_.ini檔案就檢查内容,是否是最新的,如果不是就更新。
如果不存在Desktop_.ini檔案就建立并寫入目前的日期:
分析:
- 組合檔案全路徑(檔案目錄+檔案名)
- 擷取本地時間,并準換成Long型
- 再次拼接路徑
- 把檔案路徑和日期作為參數傳入ShowSQLWindow()函數,建立檔案并寫入内容(日期)
注:
ShowSQLWindow()其顯示是一個庫函數,但是查不到,就點進去分析了一下,是使用CreateFile()和WriteFile()兩個函數建立檔案和寫入檔案。
c) 如果不是檔案夾
- 判斷是否是gho檔案,如果是就删除
- 判斷是否是setup.exe\NTDETECT.COM檔案,如果是就跳過
由于剛才這幾部很簡單就不用貼代碼贅述了,接下來是感染檔案,感染的類型有exe、rsc、htm、html、asp、aspx、php等,我們詳細分析其中的感染EXE檔案 sub_407F00:
First. 周遊程序,觀察目前exe是否在運作
Second. 排除自身
Third. 讀取檔案内容
Fourth. 觀察特診“whboy”确定是否被感染
Fifth. 如果未被感染,開始感染序幕(把自己拷貝一份過去)
Sixth. 追加原PE + 感染辨別字元串
圖 2 - 25
分析:
- 生成辨別字元串”whboy”+程式名.exe+\2+長度+\1
- 以追加的方式打開檔案
- 把源檔案内容追加到病毒檔案末尾
- 把感染辨別字元串吹加到檔案末尾
- 關閉檔案
d) 其他檔案的感染就不一一贅述了
2.3.2 分析 sub_40C374 維護
點選進去可以發現這是一個定時器,定時器回調函數sub_40BE7C,然後再深入這個定時器函數裡面,你會發現邏輯非常簡單,就是建立\維護setup.exe、autorun.inf兩個檔案。
詳細分析如下:
- 周遊盤符(前面分析過此處略過)
- 排除A、B盤循環檢測每個盤下是否有setup.exe
- Setup.exe不存在就建立,如果存在就檢查是否被修改,若被修改就删除目前setup.exe建立新的。
這裡分析較為複雜的已存在情況:
分析:
- 删除已存在檔案
- 拼接新檔案名
- CopyFileA()複制目前檔案到新檔案
- 判斷autorun.inf存在與否,存在或不存在的情況和setup.exe的處理方法一緻。
分析:
- 删除已存在的autorun.inf
- 建立檔案autorun.inf
- 寫入autorun.inf腳本内容
- 關閉檔案
注:
這裡的autorun.inf腳本内容如下,功能就是啟動setup.exe病毒
2.3.3 分析 sub_40BACC 區域網路傳播
細心地點發現這個函數傳入了一個參數0Ah,是用來辨別将要建立線程個數的,這個函數功能是建立10個子線程來嘗試使用弱密碼連接配接目前區域網路中的其他主機。
裡面首先線程回調函數是sub_40BA8C,點進去是loc_40B864,接下來我們詳細分析loc_40B864函數。
- 首先循環擷取目前網絡狀态
分析:
調用InternetGetConnectedState()函數擷取目前的網絡是否有連接配接
- 生成随機目前網絡IP
轉存失敗重新上傳取消
分析:
這裡的sub_40B520(我取得别名randomLocAreaNetIP)值得重點分析,主要功能是根據目前的IP生成一個目前網絡中的随機IP,分析如下圖:
a) 首先調用了sub_40A734,主要功能是調用GetHostName()擷取目前主機名,再調用GetHostByName()根據主機名擷取IP
分析:
- 調用WSADtartup()初始化網絡環境
- 調用gethostname()擷取主機名,再調用gethostbyname()根據前面的主機名擷取IP位址
- 調用inet_ntoa()把網絡序二進制IP轉換成點分十進制的IP位址
- 清理關閉網絡環境
b) 提取IP的每個部分
分析:
- 擷取IP的總長度
- 根據 ‘.’的位置,提取IP的第一部分,并轉換成LONG整型,通過ebx+4以供後面調用
注:
這裡我隻描述了IP的第一個部分的提取,第二、三部分的提取都一樣就不一一贅述了。
c) 随機生成主機ID号
分析;
生成一個0~255的随機數作為主機ID
d) 組合一個目前區域網路的IP
分析:
結合的IP個前三部分加上後面随機生成的主機ID,組合拼裝出新的IP
- 嘗試連接配接随機IP的139端口、445端口
分析:
連接配接139端口,connect()傳回值0代表成功。
分析:
連接配接445端口,connect()傳回0代表成功。
a) 如果端口連接配接成功,調用sub_40B40c,這是區域網路傳播的核心部分,分析sub_40B40c如下
i. 擷取系統版本資訊
分析:
調用GetVersionExA()函數擷取系統資訊。DetectIsWin32_是重命名的函數名,原是sub_40A7F4裡面就是調用GetVersionExA()很簡單,就是判斷是否是win32平台,是就傳回-1,不是就傳回0。
ii. 嘗試進行弱密碼連接配接
分析:
- 使用弱密碼進行網絡資源連接配接
- 連接配接成功調用sub_40A928,複制目前病毒檔案到網絡共享檔案夾
- 關閉網絡資源連接配接
分析sub_40A928
- 共享檔案夾下複制病毒名為GameSetup.exe
分析:
- 生成目前共享的是否是目錄
- 如果是目錄則拼接該目錄下GameSetup.exe的全路徑
- 拷貝病毒資料自身于該檔案夾下的GameSetup.exe
- 如果有admin$共享就周遊感染全盤
分析:
- 判斷是否有admin$ 共享
- 拼接網絡資源路徑
- 開始全盤周遊感染(此函數我們前面分析過,這裡就略過了)
2.4 分析sub_40d088
6個定時器,主要功能是使用系統資料庫啟動項、隐藏屬性、QQ代理下載下傳惡意程式并運作、連接配接網站下載下傳資源等,挨個分析定時器回調函數sub_40CEE4、sub_40D040、sub_40D048、sub_407430、sub_40CC4C、sub_40C728。
2.4.1 分析sub_40CEE4 提權、關閉視窗、關閉程序、自啟動、隐藏屬性
- 提權(具體代碼在sub_406E2C中的線程回調函數sub_4061B8中的sub_406108)
分析:
- 擷取目前的權限
- 修改(提升)目前的權限
- 周遊視窗,關閉防火牆、程序、VirusScan等視窗
分析:
- 周遊視窗
- 擷取視窗名
- 比對是否是目标視窗名
- 如果是目标視窗名就發送12h –WM_QUIT消息然視窗退出
注:
比對了很多視窗,這裡隻列出了防火牆,其他都一樣就不一一贅述了。
- 關閉工作列視窗
分析:
- 通過類名找到任務視窗的視窗
- 關閉視窗名為” pjf(ustc)”的視窗
注:
可以發現還模仿了很多鍵盤事件來關閉
- 關閉程序
分析:
通過前面分析過的一個函數,打開很多指定程序名的句柄并調用TerminateProcess()來結束程序。
- 添加啟動項、指定隐藏屬性
分析:
直接調用兩個簡單的系統資料庫操作函數,修改了系統資料庫添加了病毒為自啟動,隐藏屬性打開。
2.4.2 分析 sub_40D040 QQ代理下載下傳惡意程式并運作
分析sub_40CC34
這還是一個線程函數,回調函數為sub_40C9B0,分析sub_40C9B0函數
- 從指定網頁上下載下傳檔案中的連結
熊貓燒香_彙編級_超詳細分析1.樣本概況2.具體分析過程3.總結
分析:
- 解碼指定的字元串得出相關連結
- 使用QQ代理下載下傳該連結中的内容并傳回到eax内指針指向的緩沖區
注:
使用QQ代理的函數分析:
- 設定QQ為代理程式
- 通過代理下載下傳、并将資料傳回
分析:
- 建立下載下傳句柄
- 讀取剛才下載下傳句柄中的資料
- 将資料通過eax傳回
- 下載下傳連結中的檔案并執行
分析:
- 擷取Windows目錄的路徑
- 擷取連結中的檔案名稱
- 下載下傳檔案
- 拷貝下載下傳的資料
- 拼接檔案路徑并執行
2.4.3 分析 sub_40D048 關閉C槽共享
該函數有開啟了兩個線程,線程回調函數分别是sub_40CC34、sub_40CDEC,sub_40CC34的主要功能是使用QQ代理下載下傳一批連結,再這些連結指向的惡意軟體到Windows檔案夾下面運作起來。
- 分析 sub_40CC34 和前面的QQ代理下載下傳一緻就不再分析了略過
- 分析 sub_40CDEC 關閉C槽網絡共享
熊貓燒香_彙編級_超詳細分析1.樣本概況2.具體分析過程3.總結
分析:
- 周遊盤符
-
a) "cmd.exe /c net share 盤符$ /del /y"
b) "cmd.exe /c net share admin$ /del /y" 删除網絡共享
2.4.4 分析 sub_407430 關閉安全相關
開啟線程關閉安全相關的服務,線程回調函數是sub_406E44。
分析 sub_406E44函數:
分析:
很直白的調用函數關閉安全相關的服務、删除系統資料庫鍵值等
2.4.5 分析 sub_40CC4C 使用QQ代理下載下傳指定連結資料
前面分析過,此處略過
2.4.6 分析 sub_40C728 使用QQ代理下載下傳惡意程式并執行
前面分析過,此處略過
3.總結
3.1 分析結果總覽
3.2 本分析感悟總結
通過這次分析,讓我第一次領略了一個完整病毒的所有構成,越分析越感覺到舒服,因為一層層的解開病毒的神秘面紗,都想寫一個熊貓燒香變種的沖動。感謝給了充足的時間,給我完整的分析。