記一次帶有FSG殼的熊貓燒香病毒分析過程
樣本概況
樣本資訊
檔案:spo0lsv.exe
大小:3001位元組
MD5:512301C535C88255C9A252FDF70B7A03
SHA1:CA3A1070CFF311C0BA40AB60A8FE3266CFEFE870
CRC32:E334747C
病毒行為:自我複製,感染可執行檔案,修改網頁檔案內容,修改登錄檔,刪除備份檔案,關閉防毒軟體視窗,服務與程序
測試環境以及工具
測試環境:win7 32bit
分析工具:OD,IDA,火絨劍,PChunter
分析目標
分析病毒行為與程式具體執行流程;
具體行為分析
0利用查殼工具檢視
發現其加了FSG殼
1.利用PChunter
開啟Pchunter之後發現可疑程序:
檢視啟動項那一項:
檢視驅動,服務等可疑項
未發現異常
檢視網路連線:
發現可疑程序的網路連線:
使用抓包工具(WSExplorer)檢視可疑流量:
提取樣本(利用hash工具)
將路徑下檔案提取到壓縮到本地,並修改副檔名為vir
2.手工清理
a.結束可疑程序 spo01sv.exe(在PChunter中的spo01sv.exe右擊—>結束程序)
b.刪除可疑程序啟動項:如下圖
3.利用火絨劍進行主要行為分析
a.先暫時只勾選下面這兩個動作,其他都不勾選:
點選確定:
發現生成了一個病毒exe:
登錄檔操作:
點選確定之後:
設定啟動項:
程序操作:
網路操作:
實用技巧:利用火絨劍中的動作詳細資訊中的呼叫棧可以定位到相關動作資訊
其他行為:
執行監控:
執行CMD命令,刪除網路共享!
惡意行為的一個簡要小結
1.自我複製樣本到c盤,c/Windows/driver/目錄下面
啟動c/Windows/driver/spo01sv.exe(樣本)
2.在每一個目錄下面建立了Desktop_.ini
4.脫殼
手脫FSG2.0過程:
執行至下圖中位置:
按F9執行:
EDI資料視窗中跟隨:
按F9繼續:
繼續F9(經過若干次的F9以後):IAT修復完成
同時將IAT中的7FFFFFFF改成00000000
下面按F7跳至OEP:
下面DUMP檔案:(D278為預設,一般不會錯,檢視此時OEP:0040D278)
儲存為1.exe
修復IAT:
D278為上面在OD裡面dump時候的oep的值
選擇1.exe
1.exe是從OD裡面dump下來的
1_.exe是自己生成的
脫完殼以後進行深度掃描:(發現其語言為Delphi6.0-7.0)
至此,脫殼完成!
病毒惡意行為分析(OD結合IDA雙劍合璧)
1.將dump修復之後的檔案使用IDA開啟;
按shift+F5:
2.在IDA中用Shift+F5開啟簽名視窗:
右鍵加入delphi的簽名庫:
按快捷鍵:ctrl+F搜尋delphi:
IDA與OD雙劍合璧
OEP處的對比:
進入到函式裡面,堆疊中跟隨:
知識點擴充套件1:
藉此機會,講講交叉引用與匯入表的聯合應用:
雙擊此API:
按Ctrl+x:
雙擊下面框中的API,就會跳往呼叫RegCreateKeyExA這個API的函式
可以發現RegCreateKeyExA這個API是在上面這個框裡面的這個函式(j_RegCreateKeyExA)中的,下面對這個函(j_RegCreateKeyExA)數進行交叉引用
Ctrl+x,交叉引用:
來到了上一層函式:
來到了上一層:
跳往上一層:
再次跳往上一層,交叉引用:
這裡就是接近OEP的地方了;
知識點擴充套件1小結:
結合匯入表,檢視關鍵API,利用交叉引用這個強大的功能可以直搗黃龍,追根朔源!
知識點擴充套件2
一般而言,黑色表示非系統函式,上面的天藍色表示系統函式,
知識點擴充套件3
OD和IDA配合的又一個例子:
在OD裡面不知道這個函式的功能,想要知道它大概的功能,可以這麼做:
利用這個函式在OD中的地址,在IDA裡面搜尋:
顯而易見,這個函式就是一個字串拼接庫函式;
說明:如果OD和IDA載入基址不一樣的話可以按照下面操作調整:
知識點擴充套件4(編輯函式標籤:)
知識點擴充套件5(有關seh鏈的:)
.seh鏈的:
棧頂是指向下一個seh的地址,棧頂的下一行是當前處理異常的函式所在地址,如果當前處理不了,就發給下一個seh:
依次類推,直到seh的鏈尾
知識點擴充套件6(Delphi語言中傳參)
Delphi語言中是用暫存器傳參的:
惡意程式碼分析
分析思路:
從OEP處開始的程式碼:
猜測sub_405250的依據:
呼叫的第一個sub_405250函式,其引數有”xboy”,後面另一次呼叫之中,引數有字串”whboy”,並且在呼叫sub_405250函式之後,又呼叫strcmp函式,之後又有判斷返回值的程式碼,如果不對,則退出程序
動態跟蹤sub_405250函式:
觀察LstrArrayClr函式;
可以發現呼叫當前程式碼的函式(其實就是主函式):
繼續跟,來到主函式執行緒中:
尋找定位字串!(IDA與OD結合)
當然也可以在OD中進行定位:
第一個惡意程式碼函式分析:
v43 = &savedregs;
v42 = &loc_408781;
v41 = __readfsdword(0);
__writefsdword(0, (unsigned int)&v41); // Write memory to a location specified by an offset relative to the begining of the fs segment,這裡0為偏移量,後面一個引數為要寫入的資料
System::ParamStr(0, &v71);//就是在exe檔案後面可以跟引數,paramstr 獲取的就是exe檔案後面跟引數。
如有可執行檔案project1.exe 在執行中輸入e:\project1.exe 123 456 789
那麼paramstr(1)='123' paramstr(2)='456' paramstr(3)='789',這裡paramstr函式括號裡面應該只有一個函式,它這裡虛擬碼可能有點問題,
unknown_libname_123(v71, &v72);
重點部分1:
複製自身到系統驅動目錄下面,然後執行拷貝的程式
Teminatevirusprocess這個函式的猜測,是因為在IDA中進入到這個函式之後發現了teminatevirusProcess這個關鍵API,至於為什麼為是結束的是病毒,根據這個函式括號裡面的關鍵字串來猜測的,結束掉病毒程序是為了讓自己隱藏起來不讓防毒軟體找到
感染檔案部分:
感染函式:
可以發現,病毒感染了C:\program Files 目錄下的exe,過程如下:
1讀取原檔案至記憶體
2.複製病毒至感染路徑,覆蓋原檔案
3.在感染之後的exe上追加原標識
4.在感染之後的exe上追加感染標識
如下:Whboy+原檔名+隨機數
第二個惡意程式碼函式裡面:
進入回掉函式:
遍歷檔案目錄行為:
這裡搜尋機器上的可用分割槽,然後感染分割槽中的指令碼檔案,但是除了上圖中的”WINDOWS”,”WINNT”,”system32”等資料夾。
小技巧,在IDA中:
將虛擬碼識別出來的特徵API在IDA view檢視中快速定位出來alt+t鍵
回到主線:
感染後病毒在相應的資料夾中寫上已感染標記檔案Desktop_.ini。
如果檔案是GHO(備份),則將其刪除
即:病毒會刪除機器中GHO檔案,使得中毒後無法使用ghost還原
進入包含SetTimer這個API的函式:
進入SetTimer的回掉函式:
1.搜尋字串進行定位:
ALT+T進行字串搜尋:
設定定時器,將病毒自身複製到各分割槽根目錄下命名為setup.exe,並生成autorun.inf檔案
建立檔案並向檔案裡面新增資料!
連線本地網路
執行惡意程式碼的第三個函式:
這個函式中呼叫了6個定時器:
進入第一個回掉函式sub_40CEE4:
OpenProcessToken獲取訪問令牌;
利用LookupPrivilegeValueA可以獲取本地唯一識別符號(LUID)
OpenProcessToke和LookupPrivilegeValueA獲取的資訊被AdjustTokenPrivileges利用,進行提權:
Ctrl+x進行交叉引用
檢查是否有防毒軟體,如果有,則讓其關閉
與此同時,結束以下程序:
新增設定登錄檔選項:
以上為第一個回掉函式;
下面看第二個回掉函式:
使用InternetOpen初始化WinINet函式,然後使用InternetOpenUrl開啟指定連結,最後用InterReadFile讀取到網頁原始碼,下載惡意程式碼:
建立裡兩個回掉函式,估計不會幹什麼好事:
執行cmd命令:
利用cmd命令刪除共享檔案
怎麼樣利用字串定位函式:
Alt+B鍵來定位:
刪除防毒軟體啟動項,關閉殺軟服務:
開啟解密之後的網頁:
先解密然後從網址下載惡意程式碼:
至此,分析基本結束!
專殺工具的編寫
總結
最後以一張流程圖來總結一下熊貓燒香的過程:
(注:圖中清楚應為 清除!)