亞寵展、全球?qū)櫸锂a(chǎn)業(yè)風向標——亞洲寵物展覽會深度解析
849
2025-04-01
IDA和OD作為逆向分析的“倚天劍和“屠龍刀”,學好它們的基本用法至關(guān)重要。本文重點分析熊貓燒香病毒的功能函數(shù),大家掌握這些技巧后才能更好地分析更多的代碼。同時,本文部分實驗參考姜曄老師的視頻分析,真的非常佩服和值得去學習的一位老師。技術(shù)路上哪有享樂,為了提升安全能力,別抱怨,干就對了~
文章目錄
一.實驗背景
二.loc_408171位置分析
三.sub_403F8C子函數(shù)
四.sub_4060D4子函數(shù)
五.CopyFile和WinExe子函數(shù)
六.分析spoclsv.exe
七.總結(jié)
逆向分析:https://github.com/eastmountyxz/SystemSecurity-ReverseAnalysis
網(wǎng)絡(luò)安全:https://github.com/eastmountyxz/NetworkSecuritySelf-study
前文分析:
[系統(tǒng)安全] 一.什么是逆向分析、逆向分析基礎(chǔ)及經(jīng)典掃雷游戲逆向
[系統(tǒng)安全] 二.如何學好逆向分析及呂布傳游戲逆向案例
[系統(tǒng)安全] 三.IDA Pro反匯編工具初識及逆向工程解密實戰(zhàn)
[系統(tǒng)安全] 四.OllyDbg動態(tài)分析工具基礎(chǔ)用法及Crakeme逆向破解
[系統(tǒng)安全] 五.OllyDbg和Cheat Engine工具逆向分析植物大戰(zhàn)僵尸游戲
[系統(tǒng)安全] 六.逆向分析之條件語句和循環(huán)語句源碼還原及流程控制
[系統(tǒng)安全] 七.逆向分析之PE病毒原理、C++實現(xiàn)文件加解密及OllyDbg逆向
[系統(tǒng)安全] 八.Windows漏洞利用之CVE-2019-0708復(fù)現(xiàn)及防御詳解
[系統(tǒng)安全] 九.Windows漏洞利用之MS08-067遠程代碼執(zhí)行漏洞復(fù)現(xiàn)及深度防御
[系統(tǒng)安全] 十.Windows漏洞利用之SMBv3服務(wù)遠程代碼執(zhí)行漏洞(CVE-2020-0796)及防御詳解
[系統(tǒng)安全] 十一.那些年的熊貓燒香及PE病毒行為機理分析
[系統(tǒng)安全] 十二.熊貓燒香病毒IDA和OD逆向分析(上)病毒初始化
[系統(tǒng)安全] 十三.熊貓燒香病毒IDA和OD逆向分析(中)病毒釋放機理
[系統(tǒng)安全] 十四.熊貓燒香病毒IDA和OD逆向分析--病毒釋放過程(下)
聲明:本人堅決反對利用教學方法進行犯罪的行為,一切犯罪行為必將受到嚴懲,綠色網(wǎng)絡(luò)需要我們共同維護,更推薦大家了解它們背后的原理,更好地進行防護。該樣本不會分享給大家,分析工具會分享。(參考文獻見后)
一.實驗背景
對病毒進行逆向分析,可以徹底弄清楚病毒的行為,從而采取更有效的針對手段。為了節(jié)省篇幅,在這里我不打算將“熊貓燒香”進行徹底的分析,只會講解一些比較重要的部分,大家只要掌握了這些思想,那么就可以處理很多的惡意程序了。
這里主要使用的工具包括:
PEiD:病毒加殼、脫殼基礎(chǔ)性分析
IDA Pro:靜態(tài)分析
OllyDbg:動態(tài)分析
實驗文件:
setup.exe:熊貓燒香病毒
基本流程:
利用查殼工具檢查病毒是否帶殼
利用OD動態(tài)分析病毒
利用IDA靜態(tài)分析病毒
注意:由于OD工具會將程序運行起來,所以我們在進行惡意代碼分析時盡量在搭建好的虛擬機中操作。如果病毒傳播性較強如WannaCry,建議斷開網(wǎng)絡(luò)和斷開共享分析。
實驗思路:
1.利用OD分析每一個CALL的功能
2.使用IDA Pro在宏觀上把握程序的功能并及時對函數(shù)進行重命名操作
上篇主要分析sub_408024核心函數(shù):
0x0040804D call sub_40277C
– 重命名為:GetFilePathAndName
– 功能:獲取文件的完整路徑及文件名稱
0x0040805E call sub_405684
– 重命名為:GetFilePath
– 功能:獲取去除病毒文件名后的路徑
– IDA位置:0x0040805E
– 技巧:循環(huán)將病毒的完整路徑從后往前檢索,直到遇到斜杠(\)、反斜杠(/)、冒號(:)結(jié)束,從而提取病毒的路徑或病毒的文件名(如setup.exe)
0x0040806E call sub_403ED4
– 重命名:StringCat
– 功能:拼接字符串,包含“Desktop_.ini”后綴
0x00408079 call sub_4057A4
– CheckFileExist
– 功能:檢測文件“Desktop_.ini”是否存在
0x00408105 call sub_4040CC
– CheckPathIsExist
– 功能:檢測文件的路徑是否存在
0x0040812E call sub_403C44
– SetZeroFlag
– 功能:設(shè)置零標志位,將其設(shè)置為0
0x00408136 call sub_403ECC
– GetFileLen
– 功能:獲取PE文件的長度
CMP語句就是驗證PE文件最后一個數(shù)據(jù)是否為零
二.loc_408171位置分析
這次我們會繼續(xù)跟著姜曄老師分析,接著上一篇博客講解。同時這次分析會和之前有一些不一樣的情況。
如果我們按照流程順序一步步往下分析,確實能夠弄清楚病毒的行為,但某些分支中的重要代碼是執(zhí)行不到的,所以我們需要采取一些策略,走完每個分支,徹底分析出病毒的行為。這也是逆向分析中非常重要的方法。
第一步,我們打開IDA Pro和OD載入病毒樣本。
現(xiàn)在程序執(zhí)行到了loc_408171位置處,我們讓OD也跳轉(zhuǎn)到對應(yīng)的位置。
右鍵轉(zhuǎn)到->表達式,輸入408171。
按下F2增加斷點,再按F9直接執(zhí)行過來。
思考:OD重新打開斷點為什么還保留著?
在OllyDbg中,它會把所有與程序后模塊相關(guān)的信息保存在單獨的文件中,以便在模塊重新加載時繼續(xù)使用。這些信息包括標簽、注釋、斷點、監(jiān)視、分析數(shù)據(jù)、條件等。
第二步,在OD中分析0x00408171位置。
首先是一個CMP比較操作(Compare),接著查看EBP-0x8的內(nèi)容。
0x00408171 cmp dword ptr ss:[ebp-0x8], 0x0
我們可以看到它的內(nèi)容是0,它的比較對象也是0。
第三步,分析JNZ跳轉(zhuǎn)指令。
接著按下F8,可以看到比較后,ZF變成了1。由于二者都為0,所以在比較過后ZF=1,那么接下來的跳轉(zhuǎn)并不執(zhí)行,繼續(xù)執(zhí)行下面的內(nèi)容。
JNZ 0x004082F0
JNZ(jump if not zero)結(jié)果不為零則轉(zhuǎn)移,即z=1時跳轉(zhuǎn),但是z=1時,zf=0。故JNZ跳轉(zhuǎn)的條件也是零標志位zf=0,由于指令執(zhí)行的結(jié)果為0,此時的ZF值為1,故不執(zhí)行跳轉(zhuǎn)
CF(進位標志)=1:算術(shù)操作最高位產(chǎn)生了進位或借位,=0 最高位無進位或借位 ;
PF(奇偶標志)=1:數(shù)據(jù)最低8位中1的個數(shù)為偶數(shù), =0 數(shù)據(jù)最低8位中1的個數(shù)為奇數(shù);
AF(輔助進位標志)=1:D3→D4位產(chǎn)生了進位或借位, =0 D3→D4位無進位或借位;
ZF(零標志)=1:操作結(jié)果為0, =0 結(jié)果不為0;
SF(符號標志)=1:結(jié)果最高位為1,=0 結(jié)果最高位為0;
OF(溢出標志)=1:此次運算發(fā)生了溢出, =0 無溢出。
第四步,分析函數(shù)sub_40532C。
在IDA中繼續(xù)查看代碼內(nèi)容。
首先上一篇博客已經(jīng)分析并重命名了sub_40277C函數(shù)的功能,它是獲取文件路徑和名稱(GetFilePathAndName)。
C:\Users551\Desktop\setup.exe
接下來將EDP-0x3D4賦值給EDX,F(xiàn)8執(zhí)行并在數(shù)據(jù)窗口中跟隨,發(fā)現(xiàn)它此時還是空值。
按F8執(zhí)行到sub_40532C函數(shù),在IDA中我們雙擊進去,查看該函數(shù)。發(fā)現(xiàn)該函數(shù)的主要功能是API函數(shù)CharUpperBuffA。
CharUpperBuffA函數(shù)作用:把緩沖區(qū)中指定數(shù)目的字符轉(zhuǎn)換成大寫字母
總結(jié),重命名及對應(yīng)功能如下:
sub_40532C -> CharToUpper
功能:緩沖區(qū)中指定數(shù)目的字符轉(zhuǎn)換成大寫字母
PS:IDA中按ESC鍵返回上一層再重命名。
第五步,分析函數(shù)sub_4054BC。
在IDA中雙擊查看該函數(shù)的內(nèi)容。可以發(fā)現(xiàn)它主要是調(diào)用了GetSystemDirectory函數(shù),從而獲取系統(tǒng)的路徑。
總結(jié),重命名及對應(yīng)功能如下:
sub_4054BC -> GetSystemDir
功能:獲取系統(tǒng)路徑
三.sub_403F8C子函數(shù)
由于之前直接調(diào)用系統(tǒng)API函數(shù),其功能分析還是很直觀的。接下來我們繼續(xù)分析函數(shù)sub_403F8C。
第一步,我們讓OD跳轉(zhuǎn)到0x004081AB的位置。
直接按F8執(zhí)行下來,在這里可以看到PUSH是將剛才利用GetSystemDirectory函數(shù)所獲取的系統(tǒng)路徑字符串進行壓棧。
壓棧內(nèi)容為system32這個目錄。
C:\Windows\system32
第二步,按下F8繼續(xù)分析,發(fā)現(xiàn)它又將drivers壓棧,將spoclsv.exe字符串壓榨。
drivers
spoclsv.exe
注意,上圖僅顯示了setup.00408658,沒有將具體的值顯示出來。
思考:OD中如何查看堆棧中的值?
選中ESP堆棧指針寄存器(主要用于存放堆棧內(nèi)存儲單元的偏移量),在“堆棧窗口中跟隨”。然后依次選擇值“0x00408644”和“0x00408658”,右鍵在“數(shù)據(jù)窗口中跟隨”,即可查看堆棧中的值。
發(fā)現(xiàn)對應(yīng)的值為“drivers”和“spoclsv.exe”,如下圖所示。
寫到這里,我們可以推測:下面這個函數(shù)的功能是將壓入堆棧的字符串進行拼接,成為一個新的路徑。
第三步,按下F8執(zhí)行到這個Call函數(shù)進行分析。
按下F8執(zhí)行過來后,選中EAX在數(shù)據(jù)窗口中跟隨。
EAX是累加器(accumulator),它是很多加法乘法指令的缺省寄存器。
EBX是基地址(base)寄存器, 在內(nèi)存尋址時存放基地址。
ECX是計數(shù)器(counter),是重復(fù)(REP)前綴指令和LOOP指令的內(nèi)定計數(shù)器。
EDX則總是被用來放整數(shù)除法產(chǎn)生的余數(shù)。
在數(shù)據(jù)窗口中右鍵“轉(zhuǎn)到”->“表達式”,然后輸入值:
020F7E08
接著再CALL函數(shù)處按下F8,我們需要關(guān)注數(shù)據(jù)窗口中的前后變化情況。我們可以看到它新生成了一個路徑字符串。
C:\Windows\system32\drivers\spoclsv.exe
前后對比如下圖所示:
總結(jié),重命名及對應(yīng)功能如下:
sub_403F8C -> TwoStringCat
功能:將兩個字符串進行連接
四.sub_4060D4子函數(shù)
事實上,這段程序的功能如下:
首先通過這個函數(shù)將字符串連接;
再將路徑字符串轉(zhuǎn)換為大寫字母;
然后將這個字符串與這里進行對比。
第一步,我們通過OD來分析下比較功能,在OD中執(zhí)行到4081E3位置,然后按F9執(zhí)行過去。
0x004081E3 call sub_404018
第二步,分析sub_404018函數(shù)。
我們在這里看下它比對的是什么字符串,在數(shù)據(jù)窗口中跟隨值,可以看到兩個字符串分別是拼接的字符串和當前OD分析程序的字符串。
C:\USERS\14551\DESKTOP\SETUP.EXE
C:\WINDOWS\SYSTEM32\DRIVERS\SPOCLSV.EXE
很明顯,我們分析的熊貓燒香病毒程序在桌面上,而比對的是DRIVERS路徑下。
sub_404018函數(shù)的目的是分析當前這個程序是不是drivers目錄下的這個程序,如果是的話執(zhí)行一段代碼,否則執(zhí)行另一段代碼。
因為目前不是在drivers路徑下,因此它執(zhí)行另一段代碼,我們按下F8繼續(xù)執(zhí)行。JE跳轉(zhuǎn)不成立,繼續(xù)出現(xiàn)一個新的CALL。
0x004081F3 CALL setup.004060D4
第三步,sub_4060D4函數(shù)的參數(shù)分析。
該函數(shù)存在一個參數(shù)存在EAX中,通過數(shù)據(jù)窗口跟隨發(fā)現(xiàn)值為:
spoclsv.exe
我們回到IDA查看該函數(shù)的基本組成,雙擊進入sub_4060D4函數(shù)。可以看到這個函數(shù)非常長,并且內(nèi)部包括很多CALL函數(shù),如果說一個個CALL分析,會發(fā)現(xiàn)它調(diào)用了很多的API函數(shù)。通過分析歸納該函數(shù)的作用如下:
查找當前內(nèi)存中指定的進程,即查找當前是否有spoclsv.exe這個進程
總結(jié),重命名及對應(yīng)功能如下:
sub_4060D4 -> SearchAndTerminateProcess
功能:查找當前內(nèi)存中的指定進程,若存在,則將其終止
讀者可以下來詳細分析下該函數(shù)的細節(jié),這里僅補充一張圖片。
五.CopyFile和WinExe子函數(shù)
下面很長一段代碼因為之前已經(jīng)分析過,并且有很多的注釋,這里就不再贅述。
在CopyFile函數(shù)位置我們停下來分析。
0x004082A6 call CopyFileA
第一步,我們將OD跳轉(zhuǎn)到文件名0x0040828C的位置,按下F2增加斷點。
0x0040828C push eax
程序執(zhí)行過來后,在這里我們跟蹤下這個EAX地址。這里可以看到想要拷貝的地址就是剛才我們所連接成的字符串地址。
C:\Windows\system32\drivers\spoclsv.exe
那么,它所拷貝的內(nèi)容是什么呢?
第二步,繼續(xù)分析拷貝文件的內(nèi)容。
按下F8執(zhí)行到0x004082A5位置,可以看到它是將當前這個病毒文件復(fù)制到drivers目錄下,通過CopyFile來實現(xiàn)。
事實上,它是將我們的當前文件改為spoclsv.exe之后,再復(fù)制到drivers目錄中。
第三步,我們繼續(xù)往下分析,看到一個WinExec函數(shù)。
通過OD來到4082E3位置,我們看看這個參數(shù)來判斷它想執(zhí)行什么程序。
第四步,按下F2增加斷點,然后F9執(zhí)行過來,并在數(shù)據(jù)窗口中跟隨EAX值。
可以看到,它實際想執(zhí)行的就是這個spoclsv.exe程序。也就是說,它在把當前這個病毒樣本復(fù)制到drivers目錄之后,那么這句代碼就是將它執(zhí)行起來。再往下ExitProcess是結(jié)束當前正在運行的進程,即熊貓燒香的病毒樣本。
注意,當病毒本體將自身復(fù)制到“drivers”中并改名后,這里就是對改了名字的病毒程序執(zhí)行運行的操作,然后主體程序就退出了。如果想繼續(xù)用OD進行動態(tài)分析,要么載入“spoclsv.exe”,要么對之前的一處條件跳轉(zhuǎn)進行修改,令程序以為自己就是“spoclsv.exe”。
第五步,回到跳轉(zhuǎn)位置0x004081E8,對其進行分析。
在OD中跳轉(zhuǎn)到該位置,然后按下F2下一個斷點,并執(zhí)行到斷點處。
0x004081E8 JE 004082F0
正常來說,由于我們當前所分析的程序并不是drivers目錄下的那個病毒樣本,因此這個跳轉(zhuǎn)是不成立的。這里為了使其成立,
可以將JZ修改為JNZ
,但是這改變了病毒程序。
最好的辦法是改變ZF標志位,將原來的0改為1就可以了
。
第六步,雙擊ZF標志位,它會變成1。
雙擊后可以看到提示“跳轉(zhuǎn)已實現(xiàn)”,現(xiàn)在這個病毒就以為自己是spoclsv.exe。
第七步,按下F8執(zhí)行到4082F0位置。
前面我們已經(jīng)分析過,真正實現(xiàn)病毒功能的也就是“spoclsv.exe”這個程序。
六.分析spoclsv.exe
雖說這個程序和“熊貓燒香.exe”是完全一樣的,可是畢竟其內(nèi)部的執(zhí)行流程是不同的。為了得到病毒完整的資料,這里我利用OD載入“spoclsv.exe”進行動態(tài)分析。
第一步,接著上面的步驟,OD和IDA都跳轉(zhuǎn)到4082F0位置。
第二步,可以看到這里出現(xiàn)了sub_40416C函數(shù),我們在IDA中雙擊進入查看。
由于sub_40416C這個函數(shù)也比較抽象,不太容易分析,這需要耐心與細致,在此將過程省略。總結(jié)其功能如下:
sub_40416C -> DeleteStringBuff
功能:刪除字符串中的一些信息,其中EAX保存的是想要操作字符串的地址,ECX保存的是想要刪除的字符的個數(shù),可以看到已經(jīng)通過GetFileLen獲取了字符的個數(shù)。
接著就將sub_40416C重命名為:DeleteStringBuff,然后程序跳轉(zhuǎn)到loc_4085D3。
第三步,讓IDA和OD跳轉(zhuǎn)到4085D3位置。
OD跳轉(zhuǎn)后按F2增加斷點,再按F9執(zhí)行過來。
第四步,分析call sub_4041B4前的參數(shù)。
按下F8執(zhí)行到sub_4041B4函數(shù)調(diào)用出,我們查看EAX中保存的內(nèi)容,在數(shù)據(jù)窗口中跟隨。
可以看到這里的EAX保存的是一個標記數(shù)值,即為0x01。之后的CALL就是查找文件中是否包含有這個標記,如果包含有這個標記,那么就執(zhí)行跳轉(zhuǎn),否則不跳轉(zhuǎn)。
由此我們可以假設(shè),這個0x01標記應(yīng)該就是病毒將這個正常的PE程序感染后,在原本正常的程序中添加的01標記,用于標識該程序是否被感染。如果真是這樣的話,若想分析跳轉(zhuǎn)后的程序內(nèi)容,要么在OD中修改標志位,要么對一個被感染的程序進行分析。這里我不再贅述,有興趣的讀者可以拿一個被感染的程序自行分析。
總結(jié),重命名及對應(yīng)功能如下:
sub_4041B4 -> SearchSignPos
功能:查找標記的位置
我們再回到OD, 由于我現(xiàn)在分析的是病毒程序,他自身沒有0x01標志位,因此跳轉(zhuǎn)不成立,它就繼續(xù)往下執(zhí)行。
我們可以看到,這部分的代碼主要用于收尾工作,最后的CALL用于刪除堆棧中所保存的地址,這些地址指向的是病毒寫入的一些信息,繼續(xù)按F8執(zhí)行。
可以看到一個RETN,我們繼續(xù)執(zhí)行。發(fā)現(xiàn)熊貓燒香三個核心函數(shù),其中sub_408024就執(zhí)行完畢了。
sub_408024
sub_40CA5C
sub_40C97C
sub_408024是熊貓燒香病毒三大功能的第一項功能,分析至此,可見這第一項功能主要用于病毒的初始化工作。余下的兩大功能我在此就不進行分析,有興趣的讀者可以獨立研究試試看。
七.總結(jié)
如果你是一名新人,一定要踏踏實實親自動手去完成這些基礎(chǔ)的逆向分析,相信會讓你逐步提升,過程確實很痛苦,但做什么事又不辛苦呢?加油!希望你能成長為一名厲害的系統(tǒng)安全工程師或病毒分析師,到時候記得回到這篇文章的起點,告訴你的好友秀璋。
setup.exe的熊貓燒香病毒程序,并衍生出一個spoclsv.exe程序。位置信息為:
C:\WINDOWS\system32\drivers\spoclsv.exe
它的后續(xù)功能如下,你可以試著繼續(xù)分析。
第1點行為:創(chuàng)建spoclsv.exe程序并位于WINDOWS\system32\drivers目錄
第2點行為:命令行模式下使用net share解除共享功能
第3點行為:刪除安全類軟件在注冊表中自動啟項
第4點行為:在注冊表CurrentVersion\Run創(chuàng)建svcshare自啟動項,每次開機時會自動運行病毒
第5點行為:禁用文件夾隱藏選項,修改注冊表使得隱藏文件無法通過普通設(shè)置顯示,從而隱藏病毒自身
第6點行為:將自身拷貝到根目錄并命名為setup.exe,創(chuàng)建autorun.inf用于病毒的啟動,這兩個文件的屬性都是“隱藏”。同時,會創(chuàng)建Desktop_.ini隱藏文件
感恩能與大家在華為云遇見!
希望能與大家一起在華為云社區(qū)共同成長,原文地址:https://blog.csdn.net/Eastmount/article/details/111712482
(By:娜璋之家 Eastmount 2021-12-17 夜于貴陽)
參考文獻:
姜曄老師真的非常佩服和值得去學習,包括他蘇寧到卡巴斯基的故事,推薦大家去閱讀。也希望自己和大家的技術(shù)能不斷提升,加油!
[1]?姜曄老師技術(shù)分享 - B站
[2]?姜曄老師的技術(shù)空間目錄 - CSDN
[3]?[網(wǎng)絡(luò)安全自學篇] 木馬原理詳解、遠程服務(wù)器IPC $漏洞及木馬植入實驗
[4]?https://jiangye.blog.csdn.net/article/details/41313689
[5]?[網(wǎng)絡(luò)安全自學篇] 七十九.Windows PE病毒原理、分類及感染方式詳解
[6]?[網(wǎng)絡(luò)安全自學篇] 四十九.Procmon軟件基本用法及文件進程、注冊表查看
[7]?[安全攻防進階篇] 八.那些年的熊貓燒香及PE病毒行為機理分析
[8]?[網(wǎng)絡(luò)安全自學篇] 七十三.WannaCry勒索病毒復(fù)現(xiàn)及分析(四)蠕蟲傳播機制源碼詳解
網(wǎng)絡(luò) 通用安全
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。