我們平常傳送檔案的時候常常用到壓縮器,不論是 rar、zip等,有了這些壓縮器都使我們傳送檔案可以使更少的空間,或是更安全的加密。而使用 PE 執行檔時我們有時也會使用壓縮 ,而這個壓縮器則稱為運行時壓縮器,它會在程式執行時將程序解壓縮並正確執行。這些程式有些能讓逆向檢測難以發現原本的意圖,俗稱為”殼”。

運行時壓縮器,PE檔案的專用壓縮器。他的主要用途有 :
API、字串等資料。保護器則與壓縮器的功能在目的上不同,它的主要目標是防止 PE 文件被逆向分析,所以應用了許多防止逆向分析的技術,像是垃圾代碼、反測試、混亂代碼等。致使完成保護後的代碼可能比原本的程式還要大。
像是防止破解、防遊戲外掛等都會利用保護器來防止攻擊。另外病毒等惡意代碼也會使用保護器來避免被分析。
練習檔 :
https://github.com/Dinlon5566/IT_Reverse_Engineering/tree/main/Dx11
這邊來利用 UPX 壓縮 notepad.exe 來加殼 ,觀察其 section 改變:

會發現到經過 UPX 後,第一個 Section ( UPX[0] ) 的 RawAddress 是 0,並且與 UPX[1] 的部分重疊。但是可以看見它所分配的空間有 10000,這使得程式可以再裝載時一次把所有程序都載入到這個空間。而需要解壓縮的文件與解壓縮的程式都寫在了第二個 Section。
原本的

壓縮後的

下一篇將實際解析被 UPX 加殼的檔案是如何破殼而出的。
喔對了,現在大部分防毒軟體只要看到有常見的殼就認為是病毒喔。