Android Packer
第一代壳
一代壳,这是最早的Android加壳技术,其主要方法是将原始的.dex文件进行加密,然后在应用中添加一个新的类(通常称为"stub"或"loader")来在运行时解密和加载这个.dex文件。这种方法可以有效防止静态分析,但对动态分析的防护较弱。
- 一代壳通常会对整个DEX进行加密,并把加密后的Payload嵌到APK中
- 安卓APK资源混淆加密重签名工具
- ApkProtector
第二代壳
第二代Android壳采取了更复杂的策略来对抗逆向工程。在这个阶段,Dex Method的代码会被提取并存放在外部,而原始Method中则填充nop(无操作)指令。当需要加载或执行method时,系统会动态地解密这些字节码。这个解密逻辑通常存放在so(共享对象)文件中。为了进一步提高安全性,so文件也会进行代码混淆,使得逆向工程变得更为困难。
-
二代壳通常会对Dex中的CodeItem做手脚,以下是DEX的结构
-
某固壳
-
dpt-shell
第三代壳
第三代Android壳一般是VMP壳,应用虚拟机技术,把部分代码转换为虚拟指令,在自己的虚拟机中执行,同时在前两代壳的基础上,进一步增强了混淆和加密技术。
- 自定义虚拟机壳
- jiagu packer
- 非Java,Kotlin开发的app,如Flutter(Dart), ReactNative(JS), Unity(C#),Xamarin(C#)都是自带虚拟机