加壳工具是指注入一段功能代码到 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 系统自动编译,甚至有专门的构建团队,所以命令行加壳是必不可少的。