導入表保護
去除原程序的導入表,將導入地址表(IAT)替換為修復函數,由殼代碼接管導入函數的跳轉。隱藏原程序中的導入表,保護程序的函數外部調用,可以達到干擾逆向分析、防脫殼的作用。目前僅支持PE格式的程序。
資源加密
資源加密是針對PE格式程序的資源進行加密的保護功能,可以防止程序中的資源信息被提取,篡改。在加殼時將PE格式程序中的資源抽取并加密,僅保護一些外部需要的資源(如圖標、版本信息等),在程序執(zhí)行時,在殼代碼中再解密。
附加數據擴展
附加數據一般是由某些編譯器或打包工具,將一些數據(如音視頻、數據庫等)與原始的可執(zhí)行程序拼接,這些數據一般在運行時被原始的程序讀取,附加數據在執(zhí)行時并不會直接被映射到內存中。由于加殼會改變原始程序文件,如果將附加數據直接拼接到保護后的程序,可能會導致運行時異常。附加數據擴展使用了Hook手段使程序能正常讀取到附加數據,另外對附加數據做了加密處理,防止數據被輕易竊取
壓縮
將原始的代碼段與數據包打包并壓縮,將原始程序入口(OEP)替換為殼代碼,運行時由殼代碼將代碼段與數據段還原,并進行一些重定位等操作,使程序能正常運行。壓縮的核心目不是“壓縮”,并非專為縮小程序體積而設計的。它真正的作用是將代碼與數據段做了加密,并將原先的導入表與重定位信息隱藏了起來,再”順便“將原先的數據做了壓縮??梢杂行У胤乐轨o態(tài)反編譯,防止程序被打補丁。
代碼混淆
代碼混淆亦稱花指令,是將計算機程序的代碼,轉換成一種功能上等價,但是難于閱讀和理解的形式。擾亂原始指令,防止靜態(tài)分析。
代碼虛擬化
將原始指令轉換為自定義的虛擬機指令,交由配套虛擬機系統(tǒng)模擬執(zhí)行。隱藏原始指令,防止代碼邏輯分析。
代碼加密
代碼加密是使用SMC(Self-Modifying Code)技術,將原始的函數加密,在函數被執(zhí)行時才將函數解密并執(zhí)行的保護方式。防脫殼,防止直接Dump。
反調試功能
內存斷點
可以檢測程序中是否設置內存斷點,若檢測到程序中設置內存訪問斷點和內存寫入斷點時,則程序直接終止運行。
硬件斷點
可以檢測程序中是否設置硬件斷點,若檢測到則程序直接終止運行。
內存檢查
可以檢測到內存是否被修改(比如被調試器附加修改),若程序內存被修改則程序將終止運行。