[系統安全] 十四.熊貓燒香病毒IDA和OD逆向分析--病毒釋放過程(下)

您可能之前看到過我寫的類似文章,爲什麼還要重複撰寫呢?只是想更好地幫助初學者瞭解病毒逆向分析和系統安全,更加成體系且不破壞之前的系列。因此,我重新開設了這個專欄,準備系統整理和深入學習系統安全、逆向分析和惡意代碼檢測,“系統安全”系列文章會更加聚焦,更加系統,更加深入,也是作者的慢慢成長史。換專業確實挺難的,逆向分析也是塊硬骨頭,但我也試試,看看自己未來四年究竟能將它學到什麼程度,漫漫長征路,偏向虎山行。享受過程,一起加油~

如果你想成爲一名逆向分析或惡意代碼檢測工程師,或者對系統安全非常感興趣,就必須要認真分析一些惡意樣本。熊貓燒香病毒就是一款非常具有代表性的病毒,當年造成了非常大的影響,並且也有一定技術手段。本文主要學習姜曄老師視頻,結合作者逆向經驗進行總結,詳細講解了熊貓燒香的行爲機理,並通過軟件對其功能行爲進行分析,這將有助於我們學習逆向分析和反病毒工作。後續作者還將對其進行逆向調試,以及WannaCry勒索蠕蟲、各種惡意樣本及木馬的分析。基礎性文章,希望您喜歡!

IDA和OD作爲逆向分析的“倚天劍和“屠龍刀”,學好它們的基本用法至關重要。本文重點分析熊貓燒香病毒的功能函數,大家掌握這些技巧後才能更好地分析更多的代碼。同時,本文部分實驗參考姜曄老師的視頻分析,真的非常佩服和值得去學習的一位老師。技術路上哪有享樂,爲了提升安全能力,別抱怨,幹就對了~

在這裏插入圖片描述

上一篇文章講解了“熊貓燒香”病毒樣本核心函數,我們利用OD和IDA工具結合調用函數的參數進行分析,它將有助於我們更好地理解病毒行爲。這篇文件將繼續分析sub_408024核心函數,分析每一個CALL函數,改爲我們能夠理解的名字,這往往也有助於對後續程序的理解。作者結合三篇文章繪製了一張分析圖,希望加深大家對熊貓燒香的瞭解。這系列文章寫得不容易,希望大家給點個贊和收藏,也歡迎評論和交流。

在這裏插入圖片描述

從2019年7月開始,我來到了一個陌生的專業——網絡空間安全。初入安全領域,是非常痛苦和難受的,要學的東西太多、涉及面太廣,但好在自己通過分享100篇“網絡安全自學”系列文章,艱難前行着。感恩這一年相識、相知、相趣的安全大佬和朋友們,如果寫得不好或不足之處,還請大家海涵!

接下來我將開啓新的安全系列,叫“系統安全”,也是免費的100篇文章,作者將更加深入的去研究惡意樣本分析、逆向分析、內網滲透、網絡攻防實戰等,也將通過在線筆記和實踐操作的形式分享與博友們學習,希望能與您一起進步,加油~

作者的github資源:

前文分析:

聲明:本人堅決反對利用教學方法進行犯罪的行爲,一切犯罪行爲必將受到嚴懲,綠色網絡需要我們共同維護,更推薦大家瞭解它們背後的原理,更好地進行防護。該樣本不會分享給大家,分析工具會分享。(參考文獻見後)


一.實驗背景

對病毒進行逆向分析,可以徹底弄清楚病毒的行爲,從而採取更有效的針對手段。爲了節省篇幅,在這裏我不打算將“熊貓燒香”進行徹底的分析,只會講解一些比較重要的部分,大家只要掌握了這些思想,那麼就可以處理很多的惡意程序了。

這裏主要使用的工具包括:

  • PEiD:病毒加殼、脫殼基礎性分析
  • IDA Pro:靜態分析
  • OllyDbg:動態分析

實驗文件:

  • setup.exe:熊貓燒香病毒

基本流程:

  • 利用查殼工具檢查病毒是否帶殼
  • 利用OD動態分析病毒
  • 利用IDA靜態分析病毒

注意:由於OD工具會將程序運行起來,所以我們在進行惡意代碼分析時儘量在搭建好的虛擬機中操作。如果病毒傳播性較強如WannaCry,建議斷開網絡和斷開共享分析。

在這裏插入圖片描述

實驗思路:

  • 1.利用OD分析每一個CALL的功能
  • 2.使用IDA Pro在宏觀上把握程序的功能並及時對函數進行重命名操作

上篇主要分析sub_408024核心函數:

  • 0x0040804D call sub_40277C
    – 重命名爲:GetFilePathAndName
    – 功能:獲取文件的完整路徑及文件名稱

  • 0x0040805E call sub_405684
    – 重命名爲:GetFilePath
    – 功能:獲取去除病毒文件名後的路徑
    – IDA位置:0x0040805E
    – 技巧:循環將病毒的完整路徑從後往前檢索,直到遇到斜槓(\)、反斜槓(/)、冒號(:)結束,從而提取病毒的路徑或病毒的文件名(如setup.exe)



  • 0x0040806E call sub_403ED4
    – 重命名:StringCat
    – 功能:拼接字符串,包含“Desktop_.ini”後綴

  • 0x00408079 call sub_4057A4
    – CheckFileExist
    – 功能:檢測文件“Desktop_.ini”是否存在

  • 0x00408105 call sub_4040CC
    – CheckPathIsExist
    – 功能:檢測文件的路徑是否存在

  • 0x00408126 call sub_4078E0
    – WriteVirusInfoToMem
    – 功能:寫入病毒信息到內存中,病毒作者企圖利用暴力P解的方式,來攻破計算機中的某些驗證機制

  • 0x0040812E call sub_403C44
    – SetZeroFlag
    – 功能:設置零標誌位,將其設置爲0

  • 0x00408136 call sub_403ECC
    – GetFileLen
    – 功能:獲取PE文件的長度

  • CMP語句就是驗證PE文件最後一個數據是否爲零

二.loc_408171位置分析

這次我們會繼續跟着姜曄老師分析,接着上一篇博客講解。同時這次分析會和之前有一些不一樣的情況。

如果我們按照流程順序一步步往下分析,確實能夠弄清楚病毒的行爲,但某些分支中的重要代碼是執行不到的,所以我們需要採取一些策略,走完每個分支,徹底分析出病毒的行爲。這也是逆向分析中非常重要的方法。

第一步,我們打開IDA Pro和OD載入病毒樣本。
現在程序執行到了loc_408171位置處,我們讓OD也跳轉到對應的位置。

在這裏插入圖片描述

右鍵轉到->表達式,輸入408171。

在這裏插入圖片描述

按下F2增加斷點,再按F9直接執行過來。

在這裏插入圖片描述

思考:OD重新打開斷點爲什麼還保留着?
在OllyDbg中,它會把所有與程序後模塊相關的信息保存在單獨的文件中,以便在模塊重新加載時繼續使用。這些信息包括標籤、註釋、斷點、監視、分析數據、條件等。

在這裏插入圖片描述


第二步,在OD中分析0x00408171位置。
首先是一個CMP比較操作(Compare),接着查看EBP-0x8的內容。

  • 0x00408171 cmp dword ptr ss:[ebp-0x8], 0x0

在這裏插入圖片描述

我們可以看到它的內容是0,它的比較對象也是0。

在這裏插入圖片描述


第三步,分析JNZ跳轉指令。
接着按下F8,可以看到比較後,ZF變成了1。由於二者都爲0,所以在比較過後ZF=1,那麼接下來的跳轉並不執行,繼續執行下面的內容。

  • JNZ 0x004082F0
  • JNZ(jump if not zero)結果不爲零則轉移,即z=1時跳轉,但是z=1時,zf=0。故JNZ跳轉的條件也是零標誌位zf=0,由於指令執行的結果爲0,此時的ZF值爲1,故不執行跳轉

CF(進位標誌)=1:算術操作最高位產生了進位或借位,=0 最高位無進位或借位 ;
PF(奇偶標誌)=1:數據最低8位中1的個數爲偶數, =0 數據最低8位中1的個數爲奇數;
AF(輔助進位標誌)=1:D3→D4位產生了進位或借位, =0 D3→D4位無進位或借位;
ZF(零標誌)=1:操作結果爲0, =0 結果不爲0;
SF(符號標誌)=1:結果最高位爲1,=0 結果最高位爲0;
OF(溢出標誌)=1:此次運算髮生了溢出, =0 無溢出。




在這裏插入圖片描述


第四步,分析函數sub_40532C。
在IDA中繼續查看代碼內容。

在這裏插入圖片描述

首先上一篇博客已經分析並重命名了sub_40277C函數的功能,它是獲取文件路徑和名稱(GetFilePathAndName)。

  • C:\Users\14551\Desktop\setup.exe

在這裏插入圖片描述

接下來將EDP-0x3D4賦值給EDX,F8執行並在數據窗口中跟隨,發現它此時還是空值。

在這裏插入圖片描述

按F8執行到sub_40532C函數,在IDA中我們雙擊進去,查看該函數。發現該函數的主要功能是API函數CharUpperBuffA。

  • CharUpperBuffA函數作用:把緩衝區中指定數目的字符轉換成大寫字母

在這裏插入圖片描述

總結,重命名及對應功能如下:

  • sub_40532C -> CharToUpper
  • 功能:緩衝區中指定數目的字符轉換成大寫字母

PS:IDA中按ESC鍵返回上一層再重命名。

在這裏插入圖片描述


第五步,分析函數sub_4054BC。
在IDA中雙擊查看該函數的內容。可以發現它主要是調用了GetSystemDirectory函數,從而獲取系統的路徑。

在這裏插入圖片描述

總結,重命名及對應功能如下:

  • sub_4054BC -> GetSystemDir
  • 功能:獲取系統路徑

在這裏插入圖片描述


三.sub_403F8C子函數

由於之前直接調用系統API函數,其功能分析還是很直觀的。接下來我們繼續分析函數sub_403F8C。

在這裏插入圖片描述

第一步,我們讓OD跳轉到0x004081AB的位置。
直接按F8執行下來,在這裏可以看到PUSH是將剛纔利用GetSystemDirectory函數所獲取的系統路徑字符串進行壓棧。

在這裏插入圖片描述

壓棧內容爲system32這個目錄。

  • C:\Windows\system32

在這裏插入圖片描述


第二步,按下F8繼續分析,發現它又將drivers壓棧,將spoclsv.exe字符串壓榨。

  • drivers
  • spoclsv.exe

在這裏插入圖片描述

注意,上圖僅顯示了setup.00408658,沒有將具體的值顯示出來。

思考:OD中如何查看堆棧中的值?
選中ESP堆棧指針寄存器(主要用於存放堆棧內存儲單元的偏移量),在“堆棧窗口中跟隨”。然後依次選擇值“0x00408644”和“0x00408658”,右鍵在“數據窗口中跟隨”,即可查看堆棧中的值。


在這裏插入圖片描述
發現對應的值爲“drivers”和“spoclsv.exe”,如下圖所示。

在這裏插入圖片描述
在這裏插入圖片描述




寫到這裏,我們可以推測:下面這個函數的功能是將壓入堆棧的字符串進行拼接,成爲一個新的路徑。


第三步,按下F8執行到這個Call函數進行分析。
按下F8執行過來後,選中EAX在數據窗口中跟隨。

  • EAX是累加器(accumulator),它是很多加法乘法指令的缺省寄存器。
  • EBX是基地址(base)寄存器, 在內存尋址時存放基地址。
  • ECX是計數器(counter),是重複(REP)前綴指令和LOOP指令的內定計數器。
  • EDX則總是被用來放整數除法產生的餘數。

在這裏插入圖片描述

在數據窗口中右鍵“轉到”->“表達式”,然後輸入值:

  • 020F7E08

在這裏插入圖片描述

接着再CALL函數處按下F8,我們需要關注數據窗口中的前後變化情況。我們可以看到它新生成了一個路徑字符串。

  • C:\Windows\system32\drivers\spoclsv.exe

在這裏插入圖片描述

前後對比如下圖所示:

在這裏插入圖片描述

總結,重命名及對應功能如下:

  • sub_403F8C -> TwoStringCat
  • 功能:將兩個字符串進行連接

在這裏插入圖片描述


四.sub_4060D4子函數

事實上,這段程序的功能如下:

  • 首先通過這個函數將字符串連接;
  • 再將路徑字符串轉換爲大寫字母;
  • 然後將這個字符串與這裏進行對比。

在這裏插入圖片描述

第一步,我們通過OD來分析下比較功能,在OD中執行到4081E3位置,然後按F9執行過去。

  • 0x004081E3 call sub_404018

在這裏插入圖片描述


第二步,分析sub_404018函數。
我們在這裏看下它比對的是什麼字符串,在數據窗口中跟隨值,可以看到兩個字符串分別是拼接的字符串和當前OD分析程序的字符串。

  • C:\USERS\14551\DESKTOP\SETUP.EXE
  • C:\WINDOWS\SYSTEM32\DRIVERS\SPOCLSV.EXE

很明顯,我們分析的熊貓燒香病毒程序在桌面上,而比對的是DRIVERS路徑下。

在這裏插入圖片描述

sub_404018函數的目的是分析當前這個程序是不是drivers目錄下的這個程序,如果是的話執行一段代碼,否則執行另一段代碼。

在這裏插入圖片描述

因爲目前不是在drivers路徑下,因此它執行另一段代碼,我們按下F8繼續執行。JE跳轉不成立,繼續出現一個新的CALL。

  • 0x004081F3 CALL setup.004060D4

第三步,sub_4060D4函數的參數分析。
該函數存在一個參數存在EAX中,通過數據窗口跟隨發現值爲:

  • spoclsv.exe

在這裏插入圖片描述

我們回到IDA查看該函數的基本組成,雙擊進入sub_4060D4函數。可以看到這個函數非常長,並且內部包括很多CALL函數,如果說一個個CALL分析,會發現它調用了很多的API函數。通過分析歸納該函數的作用如下:

  • 查找當前內存中指定的進程,即查找當前是否有spoclsv.exe這個進程

在這裏插入圖片描述

總結,重命名及對應功能如下:

  • sub_4060D4 -> SearchAndTerminateProcess
  • 功能:查找當前內存中的指定進程,若存在,則將其終止

在這裏插入圖片描述

讀者可以下來詳細分析下該函數的細節,這裏僅補充一張圖片。

在這裏插入圖片描述


五.CopyFile和WinExe子函數

下面很長一段代碼因爲之前已經分析過,並且有很多的註釋,這裏就不再贅述。

在這裏插入圖片描述

在CopyFile函數位置我們停下來分析。

  • 0x004082A6 call CopyFileA

在這裏插入圖片描述

第一步,我們將OD跳轉到文件名0x0040828C的位置,按下F2增加斷點。

  • 0x0040828C push eax

在這裏插入圖片描述

程序執行過來後,在這裏我們跟蹤下這個EAX地址。這裏可以看到想要拷貝的地址就是剛纔我們所連接成的字符串地址。

  • C:\Windows\system32\drivers\spoclsv.exe

那麼,它所拷貝的內容是什麼呢?

在這裏插入圖片描述


第二步,繼續分析拷貝文件的內容。
按下F8執行到0x004082A5位置,可以看到它是將當前這個病毒文件複製到drivers目錄下,通過CopyFile來實現。

在這裏插入圖片描述

事實上,它是將我們的當前文件改爲spoclsv.exe之後,再複製到drivers目錄中。


第三步,我們繼續往下分析,看到一個WinExec函數。

在這裏插入圖片描述

通過OD來到4082E3位置,我們看看這個參數來判斷它想執行什麼程序。

在這裏插入圖片描述

第四步,按下F2增加斷點,然後F9執行過來,並在數據窗口中跟隨EAX值。
可以看到,它實際想執行的就是這個spoclsv.exe程序。也就是說,它在把當前這個病毒樣本複製到drivers目錄之後,那麼這句代碼就是將它執行起來。再往下ExitProcess是結束當前正在運行的進程,即熊貓燒香的病毒樣本。

在這裏插入圖片描述

注意,當病毒本體將自身複製到“drivers”中並改名後,這裏就是對改了名字的病毒程序執行運行的操作,然後主體程序就退出了。如果想繼續用OD進行動態分析,要麼載入“spoclsv.exe”,要麼對之前的一處條件跳轉進行修改,令程序以爲自己就是“spoclsv.exe”。


第五步,回到跳轉位置0x004081E8,對其進行分析。

在這裏插入圖片描述

在OD中跳轉到該位置,然後按下F2下一個斷點,並執行到斷點處。

  • 0x004081E8 JE 004082F0

在這裏插入圖片描述

正常來說,由於我們當前所分析的程序並不是drivers目錄下的那個病毒樣本,因此這個跳轉是不成立的。這裏爲了使其成立,可以將JZ修改爲JNZ,但是這改變了病毒程序。最好的辦法是改變ZF標誌位,將原來的0改爲1就可以了。

在這裏插入圖片描述


第六步,雙擊ZF標誌位,它會變成1。
雙擊後可以看到提示“跳轉已實現”,現在這個病毒就以爲自己是spoclsv.exe。

在這裏插入圖片描述

第七步,按下F8執行到4082F0位置。

在這裏插入圖片描述

前面我們已經分析過,真正實現病毒功能的也就是“spoclsv.exe”這個程序。

在這裏插入圖片描述


六.分析spoclsv.exe

雖說這個程序和“熊貓燒香.exe”是完全一樣的,可是畢竟其內部的執行流程是不同的。爲了得到病毒完整的資料,這裏我利用OD載入“spoclsv.exe”進行動態分析。

第一步,接着上面的步驟,OD和IDA都跳轉到4082F0位置。

在這裏插入圖片描述

在這裏插入圖片描述

第二步,可以看到這裏出現了sub_40416C函數,我們在IDA中雙擊進入查看。

在這裏插入圖片描述

由於sub_40416C這個函數也比較抽象,不太容易分析,這需要耐心與細緻,在此將過程省略。總結其功能如下:

  • sub_40416C -> DeleteStringBuff
  • 功能:刪除字符串中的一些信息,其中EAX保存的是想要操作字符串的地址,ECX保存的是想要刪除的字符的個數,可以看到已經通過GetFileLen獲取了字符的個數。

接着就將sub_40416C重命名爲:DeleteStringBuff,然後程序跳轉到loc_4085D3。

在這裏插入圖片描述


第三步,讓IDA和OD跳轉到4085D3位置。

在這裏插入圖片描述

OD跳轉後按F2增加斷點,再按F9執行過來。

在這裏插入圖片描述


第四步,分析call sub_4041B4前的參數。
按下F8執行到sub_4041B4函數調用出,我們查看EAX中保存的內容,在數據窗口中跟隨。

在這裏插入圖片描述

可以看到這裏的EAX保存的是一個標記數值,即爲0x01。之後的CALL就是查找文件中是否包含有這個標記,如果包含有這個標記,那麼就執行跳轉,否則不跳轉。

由此我們可以假設,這個0x01標記應該就是病毒將這個正常的PE程序感染後,在原本正常的程序中添加的01標記,用於標識該程序是否被感染。如果真是這樣的話,若想分析跳轉後的程序內容,要麼在OD中修改標誌位,要麼對一個被感染的程序進行分析。這裏我不再贅述,有興趣的讀者可以拿一個被感染的程序自行分析。

總結,重命名及對應功能如下:

  • sub_4041B4 -> SearchSignPos
  • 功能:查找標記的位置

在這裏插入圖片描述


我們再回到OD, 由於我現在分析的是病毒程序,他自身沒有0x01標誌位,因此跳轉不成立,它就繼續往下執行。

在這裏插入圖片描述

我們可以看到,這部分的代碼主要用於收尾工作,最後的CALL用於刪除堆棧中所保存的地址,這些地址指向的是病毒寫入的一些信息,繼續按F8執行。

在這裏插入圖片描述

可以看到一個RETN,我們繼續執行。發現熊貓燒香三個核心函數,其中sub_408024就執行完畢了。

  • sub_408024
  • sub_40CA5C
  • sub_40C97C

在這裏插入圖片描述

sub_408024是熊貓燒香病毒三大功能的第一項功能,分析至此,可見這第一項功能主要用於病毒的初始化工作。餘下的兩大功能我在此就不進行分析,有興趣的讀者可以獨立研究試試看。


七.總結

寫到這裏,關於sub_408024核心函數的部分功能就介紹完畢,它主要完成熊貓燒香的基礎功能。請大家一定要動手跟着調試,感受下這部分的實驗。同時作者是跟着姜曄老師的視頻,一步步逆向分析熊貓燒香病毒的,後續還有WannaCry蠕蟲等惡意樣本的分析。這些分析技術是病毒分析和逆向分析的基礎,相信大家只有掌握這些基本方法,才能更好地深入這個領域。

如果你是一名新人,一定要踏踏實實親自動手去完成這些基礎的逆向分析,相信會讓你逐步提升,過程確實很痛苦,但做什麼事又不辛苦呢?加油!希望你能成長爲一名厲害的系統安全工程師或病毒分析師,到時候記得回到這篇文章的起點,告訴你的好友秀璋。

最後再給出這張圖,希望加深大家對熊貓燒香的瞭解。這系列文章寫得不容易,您的點贊、評論、收藏將是對我最大的支持,感恩安全路上一路前行,如果有寫得不好或侵權的地方,可以聯繫我刪除。基礎性文章,希望對您有所幫助,作者目的是與安全人共同進步,加油~

在這裏插入圖片描述

setup.exe的熊貓燒香病毒程序,並衍生出一個spoclsv.exe程序。位置信息爲:

  • C:\WINDOWS\system32\drivers\spoclsv.exe

它的後續功能如下,你可以試着繼續分析。

  • 第1點行爲:創建spoclsv.exe程序並位於WINDOWS\system32\drivers目錄
  • 第2點行爲:命令行模式下使用net share解除共享功能
  • 第3點行爲:刪除安全類軟件在註冊表中自動啓項
  • 第4點行爲:在註冊表CurrentVersion\Run創建svcshare自啓動項,每次開機時會自動運行病毒
  • 第5點行爲:禁用文件夾隱藏選項,修改註冊表使得隱藏文件無法通過普通設置顯示,從而隱藏病毒自身
  • 第6點行爲:將自身拷貝到根目錄並命名爲setup.exe,創建autorun.inf用於病毒的啓動,這兩個文件的屬性都是“隱藏”。同時,會創建Desktop_.ini隱藏文件

在這裏插入圖片描述

學安全一年,認識了很多安全大佬和朋友,希望大家一起進步。這篇文章中如果存在一些不足,還請海涵。作者作爲網絡安全和系統安全初學者的慢慢成長路吧!希望未來能更透徹撰寫相關文章。同時非常感謝參考文獻中的安全大佬們的文章分享,深知自己很菜,得努力前行。編程沒有捷徑,逆向也沒有捷徑,它們都是搬磚活,少琢磨技巧,幹就對了。什麼時候你把攻擊對手按在地上摩擦,你就贏了,也會慢慢形成了自己的安全經驗和技巧。加油吧,少年希望這個路線對你有所幫助,共勉。

2020年8月18新開的“娜璋AI安全之家”,主要圍繞Python大數據分析、網絡空間安全、人工智能、Web滲透及攻防技術進行講解,同時分享CCF、SCI、南核北核論文的算法實現。娜璋之家會更加系統,並重構作者的所有文章,從零講解Python和安全,寫了近十年文章,真心想把自己所學所感所做分享出來,還請各位多多指教,真誠邀請您的關注!謝謝。

(By:Eastmount 2021-01-08 星期五 夜於武漢 http://blog.csdn.net/eastmount/ )


參考文獻:
姜曄老師真的非常佩服和值得去學習,包括他蘇寧到卡巴斯基的故事,推薦大家去閱讀。也希望自己和大家的技術能不斷提升,加油!
[1] 姜曄老師技術分享 - B站
[2] 姜曄老師的技術空間目錄 - CSDN
[3] [網絡安全自學篇] 木馬原理詳解、遠程服務器IPC $漏洞及木馬植入實驗
[4] https://jiangye.blog.csdn.net/article/details/41313689
[5] [網絡安全自學篇] 七十九.Windows PE病毒原理、分類及感染方式詳解
[6] [網絡安全自學篇] 四十九.Procmon軟件基本用法及文件進程、註冊表查看
[7] [安全攻防進階篇] 八.那些年的熊貓燒香及PE病毒行爲機理分析
[8] [網絡安全自學篇] 七十三.WannaCry勒索病毒復現及分析(四)蠕蟲傳播機制源碼詳解








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章