殼是最早出現的一種專用加密軟件的技術。主要分爲壓縮殼和加密殼。
-
殼的裝載過程
<1>獲取殼自己所需要的API地址
<2>解壓或解密原程序的各個區塊
<3>進行必要的重定位
<4>跳轉到程序的原入口點(OEP) -
壓縮引擎
<1> aPLib :適合壓縮小文件(低於64k)
http://www.ibsensoftware.com
<2> JCALG1:適合壓縮大文件
http://www.bitsum.com/other
<3> LZMA:7z格式默認壓縮算法
https://www.7-zip.org/ -
常見的壓縮殼
<1>UPX
穩定,兼容,開源
官方主頁:http://upx.github.io/
<2>ASPack
Win32可執行文件壓縮軟件,可壓縮EXE、DLL、OCX
官方主頁:https://www.aspack.com
<3>PECompact
支持使用插件,提供多種壓縮項目選擇
官方主頁:https://bitsum.com/portfolio/pecompact/ -
常見的加密殼
<1>ASProtect
非常強大的Win32保護工具,開創了殼的新時代。擁有壓縮、加密、反跟蹤代碼、CRC校驗和花指令等保護措施,使用Blowfish、Twofish、TEA等加密算法,以RSA1024爲註冊密鑰生成器,通過API鉤子與加殼的程序通信。同時提供SDK,實現加密程序的內外結合。
ASProtect在共享軟件中相當普遍,研究的人也比較多,所以目前,其各類保護機制已被研究得很透了。
<2>Armadillo
又稱“穿山甲”,可以爲程序加種種限制(次數,時間,NAG窗口等)。
在加殼時將需要保護的代碼裏的所有跳轉指令換爲INT3指令,機器碼CC。Armadillo是雙進程運行,若子程序遇到CC異常,父程序會截獲這個INT3異常,計算出跳轉指令得目標地址並將其反饋給子進程,使子進程繼續運行。這種保護稱爲“CC保護”。
<3>EXECryptor
可以爲程序添加NAG窗口和其他限制,但兼容性不好。
<4>Themida
使用虛擬機保護技術,缺點是加密後程序體積較大。 -
虛擬機保護軟件
原理:將一系列指令解釋成bytecode(字節碼),放入一個解釋引擎中執行,從而對軟件保護。
虛擬機引擎主要有編譯器、解釋器、虛擬CPU環境(VPU Context)組成,並搭配一個或多個指令系統。虛擬機在運行時,先根據自定義的指令系統把已知的x86指令解釋成字節碼並放入PE文件中,然後將原始代碼刪除,改爲類似如下的代碼,放入虛擬機執行循環。
push bytecode
jmp VstartVM
調試者跟蹤進入虛擬機後很難理解原指令,除非對虛擬機引擎進行深入分析。
虛擬機已成爲目前最流行得保護趨勢。
但經過VM處理後,程序執行速率大大降低。使用者一般只需要把較爲重要的代碼用VM保護起來。如果是一些對速度要求比較高的代碼,不適合用VM來保護。
VMProtect
VMProtect是一款純虛擬機保護軟件,是當今最強大的虛擬機保護軟件之一。
將制定代碼進行變形和虛擬化處理後,能很好地隱藏代碼算法,防止算法被逆向。
VMProtect可以精確地保護指定地址的代碼。每填入一個保護的地址,VMProtect就會根據代碼執行流程判斷最可能是結束地址的地址。
參考資料:加密與解密(第四版)