病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析
前言
? ? ? ? 按照我的個(gè)人習(xí)慣,在運(yùn)用諸如IDA Pro與OllyDBG對(duì)病毒進(jìn)行逆向分析之前,我都會(huì)利用一些自動(dòng)化的工具,通過(guò)靜態(tài)或動(dòng)態(tài)的分析方法(參見(jiàn)《病毒木馬查殺第008篇:熊貓燒香之病毒查殺總結(jié)》)來(lái)對(duì)病毒的行為產(chǎn)生一定的認(rèn)識(shí),這樣在之后的逆向分析中,我就能夠產(chǎn)生“先入為主”的心態(tài),在分析反匯編代碼的時(shí)候就能夠比較順利。本文論述的是通過(guò)靜態(tài)分析方法來(lái)理解我們的目標(biāo)病毒,看看僅僅通過(guò)觀察其十六進(jìn)制代碼,我們能夠獲取到什么信息,這也算是從另外一個(gè)角度來(lái)處理病毒文件。
?
查看附加數(shù)據(jù)信息
? ? ? ? 對(duì)病毒的分析,還是應(yīng)當(dāng)起始于查殼的操作,這里依舊使用PEiD這款軟件:
圖1 運(yùn)用PEiD查看病毒
? ? ? ? 由上圖可以發(fā)現(xiàn),這個(gè)病毒是由Delphi編寫的,并且還有附加數(shù)據(jù)(Overlay)。我曾經(jīng)在《技術(shù)面試問(wèn)題匯總第003篇:獵豹移動(dòng)反病毒工程師part3》中提到過(guò)附加數(shù)據(jù)的問(wèn)題,但是結(jié)合本病毒,我在此應(yīng)當(dāng)再重述一遍。
? ? ? ? 某些特殊的PE文件在各個(gè)區(qū)塊的正式數(shù)據(jù)之后還有一些數(shù)據(jù),這些數(shù)據(jù)不屬于任何區(qū)塊。由于PE文件被映射到內(nèi)存是按區(qū)塊映射的,因此這些數(shù)據(jù)是不能被映射到內(nèi)存中的,這些額外的數(shù)據(jù)稱為附加數(shù)據(jù)(overlay)。附加數(shù)據(jù)的起點(diǎn)可以認(rèn)為是最后一個(gè)區(qū)塊的末尾,終點(diǎn)是文件末尾。那么我們可以利用PEiD查看一下該病毒的區(qū)塊信息:圖2 查看病毒的區(qū)塊信息
? ? ? ? 從圖2可以計(jì)算出最后一個(gè)區(qū)塊末尾的文件偏移值為DE00h+9C00h=17A00h。用十六進(jìn)制工具(我這里使用的是Hex Editor Neo)打開(kāi)目標(biāo)文件,跳到17A00h,會(huì)發(fā)現(xiàn)后面還有一段數(shù)據(jù),這就是附加數(shù)據(jù),如圖3所示:
圖3 查看附加數(shù)據(jù)
? ? ? ? 僅僅是這樣觀察附加數(shù)據(jù),我們并不能夠知道這段數(shù)據(jù)的作用,這往往需要結(jié)合逆向分析進(jìn)行判斷。其實(shí)附加數(shù)據(jù)一般是在脫殼的時(shí)候需要特別注意,因?yàn)閹в懈郊訑?shù)據(jù)的文件脫殼時(shí),必須將附加數(shù)據(jù)粘貼回去,如果文件有訪問(wèn)附加數(shù)據(jù)的指針,也要修正。那么我們現(xiàn)在也可以肯定,本病毒一定是使用了文件指針函數(shù),這樣病毒才能夠使用這段附加數(shù)據(jù)。
?
查看病毒包含的ASCII碼信息
? ? ? ? 因?yàn)檫@個(gè)病毒程序本身并不大,所以即便直接通過(guò)觀察其十六進(jìn)制代碼所代表的ASCII碼值進(jìn)行分析,也不會(huì)耗費(fèi)太多時(shí)間,這也能夠?qū)崿F(xiàn)對(duì)病毒的初步分析。當(dāng)然我們能夠看到的更多是一些不容易判斷其作用的亂碼,所以這里我們只分析能夠判斷其功能的完整的英文單詞。由上至下逐步查找,來(lái)到了第一處可識(shí)別處:圖4
? ? ? ? 這里是Delphi運(yùn)行庫(kù)的注冊(cè)表項(xiàng),通過(guò)這個(gè)就可以判斷這個(gè)程序是由Delphi編寫的了。那么繼續(xù)查找:
圖5
? ? ? ? 這里出現(xiàn)了很多API函數(shù),關(guān)于每個(gè)函數(shù)的具體功能,大家可以查詢MSDN或其它相關(guān)資料。病毒通過(guò)建立快照的方式(CreateToolhelp32Snapshot),來(lái)查找當(dāng)前系統(tǒng)中的進(jìn)程(Process)、線程(Thread)以及模塊(Module)等的信息,并且獲取了內(nèi)存的堆信息(Heap32ListFirst & Heap32ListNext)。這里的作用有可能是為了查看當(dāng)前進(jìn)程中是否含有反病毒軟件,如果有,則將其停止,當(dāng)然僅僅從這里是無(wú)法做出詳細(xì)判斷的,需要結(jié)合逆向分析才可以。接下來(lái)有:
圖6
? ? ? ? 很明顯這是一個(gè)名為hx1.bat的批處理文件,其內(nèi)容為(含代碼注釋):
@echo off set date=2004-1-22 rem將當(dāng)前日期設(shè)置為“2004-1-22” ping ** localhost > nul rem 測(cè)試本地網(wǎng)絡(luò)系統(tǒng),屏蔽命令的輸出內(nèi)容 date %date% del %0 rem 刪除批處理自身? ? ? ? 接下來(lái)有:
圖7
? ? ? ? 病毒調(diào)用了RegisterServiceProcess這個(gè)API函數(shù),其功能是注冊(cè)或者取消一個(gè)進(jìn)程為服務(wù)。當(dāng)用戶注銷之后,服務(wù)進(jìn)程仍可運(yùn)行。不過(guò)這個(gè)函數(shù)只能在Windows 9X下運(yùn)行,在之后的操作系統(tǒng)下是無(wú)效的。繼續(xù)分析:
圖8
? ? ? ? 這里說(shuō)明程序使用了autorun來(lái)實(shí)現(xiàn)自啟動(dòng),并且通過(guò)變裝成exe與pif文件的形式,來(lái)引誘大家點(diǎn)擊,從而也就中了病毒。這里的pif是一種快捷方式文件格式,即使在“隱藏已知文件類型的擴(kuò)展名”關(guān)閉時(shí)該類,都不能顯示其pif后綴。文件雙擊后,系統(tǒng)調(diào)用去執(zhí)行該快捷方式指向的文件。pif病毒正是利用該類文件的特性,來(lái)欺騙用戶執(zhí)行所指向的病毒文件。繼續(xù)分析:
圖9
? ? ? ? 這里出現(xiàn)了中文字符,根據(jù)經(jīng)驗(yàn),病毒可能是利用相應(yīng)的API函數(shù)來(lái)查找當(dāng)前進(jìn)程或者已運(yùn)行的程序的標(biāo)題欄中是否含有這些中文字符,從而判斷殺毒軟件是否存在,若存在,則將其關(guān)閉。當(dāng)然更加準(zhǔn)確的答案還是得通過(guò)逆向分析才能獲取。接下來(lái)程序結(jié)束可能存在的殺毒軟件的服務(wù),也就是將start設(shè)為disabled。接下來(lái)可以看到許多安全類軟件的名稱:
圖10
? ? ? ? 病毒企圖禁止這些安全類軟件的運(yùn)行,而由上一篇文章可以知道,病毒至少是使用了映像劫持這個(gè)方法來(lái)禁止殺軟的運(yùn)行,也許它還運(yùn)用了別的方法,這也得通過(guò)逆向分析才能得出準(zhǔn)確的答案。接下來(lái)有:
圖11
? ? ? ? 這里出現(xiàn)了很多安全類網(wǎng)站,那么有理由相信病毒也是要屏蔽掉這些網(wǎng)址的。而屏蔽的最常用的手法就是通過(guò)修改Hosts文件。Hosts是一個(gè)沒(méi)有擴(kuò)展名的系統(tǒng)文件,可以用記事本等工具打開(kāi),其作用就是將一些常用的網(wǎng)址域名與其對(duì)應(yīng)的IP地址建立一個(gè)關(guān)聯(lián)“數(shù)據(jù)庫(kù)”,當(dāng)用戶在瀏覽器中輸入一個(gè)需要登錄的網(wǎng)址時(shí),系統(tǒng)會(huì)首先自動(dòng)從Hosts文件中尋找對(duì)應(yīng)的IP地址,一旦找到,系統(tǒng)會(huì)立即打開(kāi)對(duì)應(yīng)網(wǎng)頁(yè),如果沒(méi)有找到,則系統(tǒng)再會(huì)將網(wǎng)址提交DNS域名解析服務(wù)器進(jìn)行IP地址的解析。在Windows NT/2000/XP/Vista/7/8(即微軟NT系列操作系統(tǒng))中,它的默認(rèn)位置為%SystemRoot%\system32\drivers\etc\,但也可以改變。這也是圖11中最開(kāi)始解析出來(lái)的路徑。如果,我們?cè)贖osts中,寫入以下內(nèi)容:
127.0.0.1 # 要屏蔽的網(wǎng)站 A 0.0.0.0 # 要屏蔽的網(wǎng)站 B? ? ? ? 這樣,計(jì)算機(jī)解析域名A和 B時(shí),就解析到本機(jī)IP或錯(cuò)誤的IP,達(dá)到了屏蔽網(wǎng)站A 和B的目的。而本病毒程序,應(yīng)該就是使用了第一種方式。下面有:
圖12
? ? ? ? 這里創(chuàng)建了noruns.reg文件,并導(dǎo)入注冊(cè)表,其功能就是修改驅(qū)動(dòng)器的autorun屬性,令“自動(dòng)運(yùn)行”功能得以實(shí)現(xiàn)。繼續(xù)分析:
圖13
? ? ? ? 很明顯,病毒這里是將自身加入注冊(cè)表的啟動(dòng)項(xiàng)、隱藏圖標(biāo)以及設(shè)置映像劫持等,由于比較簡(jiǎn)單,這里不再贅述。接下來(lái)有:
圖14
? ? ? ? 程序?qū)⒆陨砜截惖匠鼵盤外的其它盤符中,然后是:
圖15
? ? ? ? 這里疑似是本病毒所使用的所有API函數(shù),因?yàn)閿?shù)量較多,所以在此不作分析。個(gè)人認(rèn)為這里不太重要,因?yàn)楦鶕?jù)之前的分析,我們對(duì)于病毒的了解已經(jīng)不少了。有經(jīng)驗(yàn)的反病毒工程師根據(jù)這個(gè)可以對(duì)病毒有更深的理解,但是此處為了節(jié)省篇幅,就將其略過(guò)。接下來(lái)是:
圖16
? ? ? ? 病毒程序在此處似乎是隱藏了另一個(gè)PE文件,解析圖16紅框位置,0xA18E(注意圖中是小端顯示)的二進(jìn)制形式為1010000110001110,它的第13位(由0開(kāi)始計(jì)數(shù))是1,說(shuō)明它是一個(gè)DLL文件,那么可以知道,病毒程序似乎還生成了一個(gè)動(dòng)態(tài)鏈接庫(kù)文件。那么接下來(lái)的分析就是針對(duì)于這個(gè)動(dòng)態(tài)鏈接庫(kù)了:
圖17
? ? ? ? 這里的action為POST,于是瀏覽器把form數(shù)據(jù)封裝到http body中,然后發(fā)送到server。 如果沒(méi)有type=file的控件,則使用用默認(rèn)的application/x-www-form-urlencoded。也就是說(shuō),這里是將一些字符(用戶信息)傳輸?shù)椒?wù)器上,以便病毒的編寫者接收。接下來(lái)有:
圖18
? ? ? ? 很明顯,這個(gè)病毒是與QQ有關(guān)的,因?yàn)檫@里出現(xiàn)了很多QQ程序的名稱,因此可以將其懷疑為QQ盜號(hào)木馬。繼續(xù)分析:
圖19
? ? ? ? 這里似乎是要發(fā)送郵件,然后有:
圖20
? ? ? ? 查詢IP地址。繼續(xù)分析:
圖21
? ? ? ? 可以認(rèn)為這里是騙取用戶的QQ號(hào)碼與密碼,并發(fā)送到黑客處。接下來(lái)就沒(méi)有特別明顯的值得分析之處,那么該盜號(hào)木馬的十六進(jìn)制代碼分析就結(jié)束了。
?
小結(jié)
? ? ? ? 可見(jiàn),僅僅分析病毒樣本中所包含的ASCII碼,我們就能夠獲取非常多的信息。主要是要有耐心,勤于動(dòng)手,多多交流,積累經(jīng)驗(yàn)。我希望大家到現(xiàn)在能夠不再懼怕計(jì)算機(jī)病毒,并歸納出自己喜歡的查殺方式。
總結(jié)
以上是生活随笔為你收集整理的病毒木马查杀实战第010篇:QQ盗号木马之十六进制代码分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android人脸识别绘制人脸框自定义V
- 下一篇: 1、深入理解Pod