加殼工具是指注入一段功能代碼到 APP 中,並可以將原始的二進制指令經過混淆、虛擬化等手段進行等價變換,實現滿足 APP 多種安全需求。根據功能的不同可以分為:壓縮殼、加密殼、虛擬機殼。
壓縮殼
以隱藏程序代碼和數據為目的,並將隱藏后的代碼和數據進行壓縮。但是,壓縮殼由於在運行時會將代碼段和數據段還原,所以安全性較低。
加密殼
功能與壓縮殼類似,可以將代碼和數據進行加密,也可以對單個函數加密,只有函數被執行時才進行解密。同樣,由於在運行時仍需要解密代碼和數據,所以只能起到輔助的效果。
虛擬機殼
將原始的指令經過虛擬化,翻譯成自定義的虛擬機指令。由於虛擬機指令不對外公開,每次加殼都能產生隨機化的虛擬機操作碼,如果要逆向虛擬化的指令,需要先分析自定義虛擬機,分析難度極高。
加殼工具六大特性
01 安全性
虛擬機外殼同時具備基礎保護和高級保護功能,是公認的強度最高的保護方式。
加密外殼的主要作用是保護核心代碼邏輯和增加軟件逆向難度。高安全性是選擇一款加殼工具的金標准。安全性可以從兩個方面進行分析:
基礎保護功能
基礎保護功能是指對程序的整體保護。基礎保護可以大輻度提高程序破解的門檻,延長破解時間。
- 對於本地可執行程序而言主要包括:代碼段加密/壓縮、導入表保護、字符串加密、資源加密、反調試、內存完整性檢查等。
- 對於.NET 程序而言主要包括:壓縮/元數據隱藏、名稱混淆、反調試等。
高級保護功能
高級保護是指函數級保護,對指定的函數進行混淆、虛擬化等保護。具有高安全性,破解難度極高。
02 加殼后程序的穩定性
一定要選擇市場上比較成熟的加殼產品。
對程序進行加殼,會增加軟件的復雜程度。加殼程序的某些特殊處理,很容易造成保護后程序的不穩定性。甚至會出現某些加殼后的程序被殺毒軟件攔截查殺的現象。加殼后的程序如果不穩定,會給使用者帶來極大的不便,影響工作效率。
03 加殼后是否影響性能
選擇支持性能調節的加殼工具。
外殼對程序的性能影響體現在兩方面,一是單個保護方式對程序性能影響大小,二是在追求高安全性的同時,性能是否可以調節。性能調節是指加殼工具對所保護程序進行性能分析、准確判斷性能瓶頸。對保護后的程序進行性能診斷會占用開發人員大量時間,如果在保護過程中就能夠輕松診斷出性能瓶頸,可以明顯提升開發效率。
04 支持范圍
選擇支持范圍廣泛的加殼工具。
目前,應用程序正在向多平台化發展,外殼工具的支持范圍可以從以下三個維度來權衡:
- CPU 架構:是否支持 x86、x64 以及 ARM 32、ARM 64 指令集。
- 操作系統:是否支持 Windows、Linux、macOS、Android、ARM Linux 等。
- 程序類型:C/C++、Delphi、Go 等靜態語言編譯生成的本地可執行程序。C#、VB 編譯生成的 .NET 程序。游戲編程流行的 Unity3D 程序。Python、PHP 等腳本語言程序。
05 數據保護
選擇有數據保護功能的加殼工具。
軟件在運行過程需要加載一些重要數據來完成某項功能,數據文件的安全也應該被重視。防止數據文件的泄露和破壞才能更好的實現軟件安全。選擇加殼工具時要關注一下是否支持數據文件保護。
06 用戶體驗
選擇操作簡單的產品。
界面工具:優先考慮界面直觀、操作簡單的產品,這樣能夠事半功倍,提升加密效率。
命令行:團隊開發流程往往會使用 CI 系統自動編譯,甚至有專門的構建團隊,所以命令行加殼是必不可少的。