加殼

加殼

加殼的全稱應該是可執行程序資源壓縮,壓縮后的程序可以直接運行。

加殼的另一種常用的方式是在二進位的程序中植入一段代碼,在運行的時候優先取得程序的控制權,之後再把控制權交還給原始代碼,這樣做的目的是隱藏程序真正的OEP(入口點,防止被破解)。大多數病毒就是基於此原理。

加殼的程序需要阻止外部程序或軟體對加殼程序本身的反彙編分析或者動態分析,以達到保護殼內原始程序以及軟體不被外部程序破壞,保證原始程序正常運行。

這種技術也常用來保護軟體版權,防止軟體被破解。但對於病毒,加殼可以繞過一些殺毒軟體的掃描,從而實現它作為病毒的一些入侵或破壞的一些特性。

概念


加殼:其實是利用特殊的演演算法,對可執行文件里的資源進行壓縮,只不過這個壓縮之後的文件,可以獨立運行,解壓過程完全隱蔽,都在內存中完成。它們附加在原程序上通過載入器載入內存后,先於原始程序執行,得到控制權,執行過程中對原始程序進行解密、還原,還原完成後再把控制權交還給原始程序,執行原來的代碼部分。加上外殼后,原始程序代碼在磁碟文件中一般是以加密后的形式存在的,只在執行時在內存中還原,這樣就可以比較有效地防止破解者對程序文件的非法修改,同時也可以防止程序被靜態反編譯。

解壓原理


加殼工具在文件頭裡加了一段指令,告訴CPU,怎麼才能解壓自己。現在的CPU都很快,所以這個解壓過程你看不出什麼東西。軟體一下子就打開了,只有你機器配置非常差,才會感覺到不加殼和加殼后的軟體運行速度的差別。當你加殼時,其實就是給可執行的文件加上個外衣。用戶執行的只是這個外殼程序。當你執行這個程序的時候這個殼就會把原來的程序在內存中解開,解開后,以後的就交給真正的程序。所以,這些的工作只是在內存中運行的。通常說的對外殼加密,都是指很多網上免費或者非免費的軟體,被一些專門的加殼程序加殼,基本上是對程序的壓縮或者不壓縮。因為有的時候程序會過大,需要壓縮。但是大部分的程序是因為防止反跟蹤,防止程序被人跟蹤調試,防止演演算法程序不想被別人靜態分析。加密代碼和數據,保護你的程序數據的完整性。不被修改或者窺視你程序的內幕。
加“殼”雖然增加了CPU負擔,但是減少了硬碟讀寫時間,實際應用時加“殼”以後程序運行速度更快(當然有的加“殼”以後會變慢,那是選擇的加“殼”工具問題)。
一般軟體都加“殼”這樣不但可以保護自己的軟體不被破解、修改還可以增加運行時啟動速度。
加“殼”不等於木馬,我們平時的絕大多數軟體都加了自己的專用“殼”。
RARZIP都是壓縮軟體,不是加“殼”工具,他們解壓時是需要進行磁碟讀寫,“殼”的解壓縮是直接在內存中進行的。用RAR或者ZIP壓縮一個病毒你試試,解壓縮時殺毒軟體肯定會發現。而用加“殼”手段封裝木馬,能發現的殺毒軟體就少得多。
木馬加殼的原理很簡單,在黑客營中提供的多數木馬中,很多都是經過處理的,而這些處理就是所謂的加殼。當一個程序生成好后,很輕鬆的就可以利用諸如資源工具和反彙編工具對它進行修改,但如果程序員給程序加一個殼的話,那麼至少這個加了殼的程序就不是那麼好修改了,如果想修改就必須先脫殼。

分類


加殼工具通常分為壓縮殼和加密殼兩類。
壓縮殼的特點是減小軟體體積大小,加密保護不是重點。
加密殼種類比較多,不同的殼側重點不同,一些殼單純保護程序,另一些殼提供額外的功能,如提供註冊機制、使用次數、時間限制等。