我會通過聲明我是一個大三的惡意軟件分析師,我希望有人誰已編程/分析頭可以有一些建議,以啓動這一問題。自定義命名的PE文件和頭
通常,當編譯器將.exe放在一起時,您會看到.text,.data,.rdata,.rsrc等......但作者如何去模糊這些名稱以混淆執行靜態分析的人?
我會通過聲明我是一個大三的惡意軟件分析師,我希望有人誰已編程/分析頭可以有一些建議,以啓動這一問題。自定義命名的PE文件和頭
通常,當編譯器將.exe放在一起時,您會看到.text,.data,.rdata,.rsrc等......但作者如何去模糊這些名稱以混淆執行靜態分析的人?
dumpbin
visual studio實用程序可與/HEADERS
參數配合使用來查看所有節標題。您可能會感興趣的會是這個樣子的輸出部分:
SECTION HEADER #1 .text name 1000 virtual size 1000 virtual address (00401000 to 00401FFF) 200 size of raw data 200 file pointer to raw data (00000200 to 000003FF) 0 file pointer to relocation table 0 file pointer to line numbers 0 number of relocations 0 number of line numbers 60000020 flags Code Execute Read
正如你可以看到它的名字命名爲「的.text」這個特定的exe的代碼段。這部分可被限制,只要其符合對Microsoft specification重命名爲任何內容:
對於[名稱大於8個字節],此字段包含後跟一個十進制的ASCII表示一斜槓(/)數字是字符串表中的偏移量。可執行映像不使用字符串表,並且不支持長度超過8個字符的段名稱。
有幾種方法可以找到某個部分的名稱,而不管名稱如何。
對於.text段他們將需要至少Execute
標誌置位。而.text部分的虛擬地址應該與可選標題中定義的入口點相同。
導入部(通常命名的.idata)必須具有其地址在目錄的陣列附帶在可選的報頭的末端的第二元件設置。再次查看一部分dumpbin輸出:
2 number of directories 0 [ 0] RVA [size] of Export Directory 2000 [ 0] RVA [size] of Import Directory
在這種情況下.idata節開始於虛擬地址0x2000。此外,此部分至少需要Read
標誌。
甲.data段可能更難以追查。與導入部分一樣,它至少必須設置Read
標誌,但要確保您可以掃描.text部分以獲取將數據移入或移出地址的操作碼。該地址應位於其中一個數據部分,您可以通過查看可選標題中的部分對齊來找到該部分的開頭。
例如,如果您發現68 17 32 40 00
轉換爲PUSH 0x00403217
並且段對齊爲0x1000,則.data段的起始位置可能爲0x3000(其中0x00400000是圖像庫)。
據我所知,這些名字並不重要,可以是任何東西。加載器查看標題和節標誌以及其他數據以瞭解程序需要多少內存,哪裏(如果沒有重定位),哪些部分需要可執行,哪些可寫,哪些可讀等等。加載器負責處理這些事情,並執行其他操作,如重定位和綁定DLL。您可以只有一個部分包含大部分內容,代碼,常量數據,非常量數據,導入信息。例如,我的編譯器收集了.data下的所有數據和導入信息。目前最多有3個不同的部分產生:.text,.data,.reloc(重定位是可選的,順便說一句),Windows很高興。
真正的模糊應該在編譯好的機器代碼的不同層次上完成,它在做什麼以及如何做。例如。使用代碼作爲數據,反之亦然,使用自修改或在運行時代碼中生成代碼,使用手動編寫的代碼,這些代碼會導致異常並將執行轉移到異常處理程序中,所有那些難以正確執行的事情或者如果您沒有實際執行代碼(獎勵點:調試器下的不同執行)。人們還可以插入相當多的代碼,這些代碼基本上什麼都不做,只是令人困惑並增加了代碼的複雜性。人們也可以利用分析工具中的缺陷和限制,例如做一些非常規的事情,使用數字太大,並會導致計算溢出。而在互聯網時代,該程序可能不完整,可能會在運行時從互聯網上下載缺失的部分。有趣!