第一代壳

一代壳,这是最早的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壳,应用虚拟机技术,把部分代码转换为虚拟指令,在自己的虚拟机中执行,同时在前两代壳的基础上,进一步增强了混淆和加密技术。

  1. 自定义虚拟机壳
  • jiagu packer

  1. 非Java,Kotlin开发的app,如Flutter(Dart), ReactNative(JS), Unity(C#),Xamarin(C#)都是自带虚拟机