惡意代碼分析實(shí)戰(zhàn)筆記01

筆者最近在看《惡意代碼分析實(shí)戰(zhàn)》這本書(shū),這本書(shū)和《黑客大曝光》等著名書(shū)籍合稱(chēng)為信息安全界的圣經(jīng)。

筆者強(qiáng)烈推薦想入門(mén)逆向和病毒分析的簡(jiǎn)友閱讀本書(shū),本書(shū)由淺入深,從零開(kāi)始教你如何分析和調(diào)試一個(gè)惡意程序。而且此書(shū)有一個(gè)好處就是:它專(zhuān)門(mén)有一個(gè)章節(jié)來(lái)教你匯編語(yǔ)言。這就省去了看本書(shū)前系統(tǒng)的學(xué)習(xí)匯編語(yǔ)言的步驟,指令地址和內(nèi)存地址這些會(huì)讓你興趣心驟減。

圖片發(fā)自簡(jiǎn)書(shū)App



需要聲明的是:

筆者從未系統(tǒng)學(xué)習(xí)過(guò)WindowsAPI和WindowsPE的知識(shí),完全是跟著這本書(shū)來(lái)學(xué)習(xí)的。而且筆者文筆不好,有疏漏和寫(xiě)錯(cuò)的地方請(qǐng)?jiān)谠u(píng)論區(qū)提醒我,謝謝。

0x00 要用到的工具

WinMD5:用來(lái)計(jì)算MD5的圖形化界面工具,類(lèi)似的還有在命令行模式下使用的md5deep工具。

Strings:用于從可執(zhí)行程序中查看所有ASCII和Unicode字符串的工具。

Strings是在命令行模式下使用的工具,在使用前要將Strings程序所在目錄配置到環(huán)境變量Path中 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?由于Strings掃描程序字符串的時(shí)候會(huì)忽略上下文和格式,所以它將會(huì)列出程序中所有的可打印字符串,其中大部分是無(wú)效字符串,需要我們自己過(guò)濾掉。

PEiD:專(zhuān)業(yè)的查殼工具,幾乎可以偵測(cè)出所有的殼,其數(shù)量已超過(guò)470種PE文檔的加殼類(lèi)型和簽名。

DependencyWalker:又被稱(chēng)為“DLL依賴(lài)性分析工具”,主要用來(lái)查看程序PE模塊的導(dǎo)入模塊以及PE模塊的導(dǎo)入和導(dǎo)出函數(shù)。

PEview:用于瀏覽程序PE文件格式頭部中的信息。

ResourceHacker:用于查看,修改,添加和刪除Win32可執(zhí)行程序資源的工具。



0x01 常見(jiàn)DLL程序

Kernel32.dll:這是一個(gè)很常見(jiàn)的DLL,它包含核心系統(tǒng)功能,如訪問(wèn)和操作內(nèi)存、文件和硬件等等。

Advapi32.dll:這個(gè)DLL提供了對(duì)核心Windows組件的訪問(wèn),比如服務(wù)管理器和注冊(cè)表。

User32.dll:這個(gè)DLL中包含了所有用戶(hù)界面組件,如按鈕、滾動(dòng)條以及控制和響應(yīng)用戶(hù)操作的組件。

Gdi32.dll:這個(gè)DLL中包含了圖形顯示和操作的函數(shù)。

Ntdll.dll:這個(gè)DLL是Windows內(nèi)核的接口。可執(zhí)行文件通常不直接導(dǎo)入這個(gè)函數(shù),而是由Kernel32.dll間接導(dǎo)入,如果一個(gè)可執(zhí)行程序?qū)肓诉@個(gè)文件,這意味著作者企圖使用那些不是正常提供給Windows程序使用的函數(shù)。一些如隱藏功能和操作進(jìn)程等任務(wù)會(huì)使用這個(gè)接口。

Wsock32.dll和Ws2_32.dll:這兩個(gè)是聯(lián)網(wǎng)DLL,訪問(wèn)其中任何一個(gè)DLL的程序非常可能會(huì)連接網(wǎng)絡(luò),或是執(zhí)行網(wǎng)絡(luò)相關(guān)的任務(wù)。

Winnet.dll:這個(gè)DLL包含了更高層次的網(wǎng)絡(luò)函數(shù),實(shí)現(xiàn)了如FTP、HTTP和NTP等協(xié)議。



0x02 PE文件頭的分節(jié)

.text 該節(jié)包含了CPU執(zhí)行指令以及所有其他節(jié)存儲(chǔ)和支持性的信息。一般來(lái)說(shuō),這是唯一可以執(zhí)行的節(jié),也應(yīng)該是唯一包含代碼的節(jié)。

.rdata 該節(jié)通常包含導(dǎo)入和導(dǎo)出函數(shù)信息,與DependencyWalker和PEview工具所獲得的信息是相同的。這個(gè)節(jié)中還可以存儲(chǔ)程序所使用的其他只讀數(shù)據(jù)。有些文件中還會(huì)包含.idata.edata節(jié)來(lái)存儲(chǔ)導(dǎo)入和導(dǎo)出信息。

.data 該節(jié)包含了程序的全局?jǐn)?shù)據(jù),可以從程序的任何地方訪問(wèn)到。本地?cái)?shù)據(jù)并不存儲(chǔ)在這個(gè)節(jié)中,而是PE文件某個(gè)其他位置上。

.rsrc 該節(jié)包含由可執(zhí)行文件所使用的資源,而這些內(nèi)容并不是可執(zhí)行的,比如圖標(biāo)、圖片、菜單項(xiàng)和字符串等。字符串可以存儲(chǔ)在.rsrc節(jié)中,或在主程序里。在.rsrc節(jié)中經(jīng)常存儲(chǔ)的字符串是為了提供多語(yǔ)種支持的。

.idata 有時(shí)會(huì)顯示和存儲(chǔ)導(dǎo)入函數(shù)信息,但如果這個(gè)節(jié)不存在,則導(dǎo)入函數(shù)信息會(huì)存儲(chǔ)在.rdata節(jié)中。

.edata 有時(shí)會(huì)顯示和存儲(chǔ)導(dǎo)出函數(shù)信息,但如果這個(gè)節(jié)不存在,則導(dǎo)入函數(shù)信息會(huì)存儲(chǔ)在.rdata節(jié)中。

.pdata 只在64位可執(zhí)行文件中存在,存儲(chǔ)異常處理信息。

.reloc 包含用來(lái)重定位庫(kù)文件的信息



0x03 一些小提示

加殼或混淆代碼通常至少會(huì)包含LoadLibrary和GetProcAddress函數(shù)
用Strings掃描程序字符串時(shí),未加殼程序大多總會(huì)包含很多字符串,而被加殼或混淆的則只能分析獲取到很少的可打印字符串
一些以Ex為后綴的函數(shù)名(例如CreateWindowEx),是微軟在更新一個(gè)函數(shù)并且新函數(shù)與原先函數(shù)不兼容的時(shí)候?yàn)榱死^續(xù)支持原先的舊函數(shù)而在新函數(shù)相同名字后加上Ex后綴而存在的
以字符串為參數(shù)的許多函數(shù),在他們的名字后面會(huì)包含一個(gè)A或者一個(gè)W,如CreateDirectoryW,這個(gè)字母A或W在這個(gè)函數(shù)的文檔中并沒(méi)有出現(xiàn)。它只是表明接收字符串參數(shù)的函數(shù)有兩種不同的版本:以A結(jié)尾的輸入?yún)?shù)類(lèi)型為ASCII字符串,而以W結(jié)尾的輸入?yún)?shù)以寬字符字符串。當(dāng)你在微軟的文檔中搜索這個(gè)函數(shù)時(shí),你需要記得丟掉后綴的A或者W
在使用PEview查看分節(jié)信息的時(shí)候,若分節(jié)的虛擬大?。╒irtual Size)比原始數(shù)據(jù)(Size of Raw Data)大的多,你便知道這個(gè)節(jié)在內(nèi)存中占用了比磁盤(pán)上存儲(chǔ)更多的空間,這往往意味著加殼代碼的存在,特別是當(dāng).text分節(jié)在內(nèi)存中較磁盤(pán)上更大一些時(shí)


0x04 最后

除了0x00中介紹的一些工具之外,還存在著很多可以用來(lái)瀏覽PE文件頭的其他工具,其中兩個(gè)最有用的就是PEBrowse ProfessionalPE Explorer

PEBrowse ProfessionalPEview類(lèi)似,它允許你查看每個(gè)分節(jié)中的字節(jié),并顯示出解析后的數(shù)據(jù)。而且PEBrowse Professional在呈現(xiàn)資源節(jié)(.rsrc)獲取的信息上做的更好。

PE Explorer一個(gè)功能豐富的圖形用戶(hù)界面,要你可以方便的瀏覽PE文件的各個(gè)部分。你還可以編輯PE文件的特定部分,它所包含的資源編輯器對(duì)于瀏覽和編輯文件資源來(lái)說(shuō)是非常棒的。

第一次碼這么多次,手都快抽筋了……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容