【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )





一、DEX 加密简介



Proguard 混淆弊端 : 之前使用 Proguard 混淆 后的代码 , 虽然降低了代码的可读性 , 但是如果多花点时间和精力 , 还是可以读懂的 , 因此这里继续进行下一个操作 , DEX 加密 , 经过加密后的 DEX 文件 , 就 无法被反编译工具反编译出来了 ;

DEX 加密 : 经过加密后的 DEX 文件 , 就是被破坏了原有格式的 DEX 文件 , 该 DEX 文件不是标准的 DEX 文件 ;


Android 启动从 Application 开始 , 然后会查找主 Activity 界面 启动 ;


DEX 加密的情况下 Android 的工程结构 :

  • 应用主工程 , 该工程中有一个开发者开发的 Application , MyApplication ;

  • 依赖的库 Library , 在该工程中有一个代理 Application , ProxyApplication ;

主工程中 , 不需要进入加密解密先关的库 , 应用主工程的开发流程不变 ,





二、APK 文件分析



Android 安装文件 APK 分析 : APK 文件本质是一个 ZIP 包 , 包含如下内容 ;

  • AndroidManifest.xml : 应用/组件配置文件 ;
  • resource.arsc
  • classes.dex : 封装 Java / Kotlin 代码 ;

在这里插入图片描述





三、DEX 分割



classes.dex 可以进行分割 :

  • 不分割的情况 : 一般情况下 所有代码都在一个 DEX 下 ;

  • 分割的情况 : 该 DEX 可以分割成两部分 , 其中 一个只包含启动 Application , 另一个 DEX 包含其他代码 ;


DEX 加密解密 :

  • 分割后加密 : 分割后的 DEX , 只包含启动 Application 保持不变 , 另一个 DEX 可以拿去加密 ;

  • 启动时解密 : 启动时 , 主 DEX 执行 Application 时 , 会解密另外一个被加密的 DEX , 并加载到 ClassLoader 中 ;


DEX 分割的必要性 : 如果在 主 DEX 中的 Application 中 , 引用了很多类 , 此时就必须将引用的类放在主 DEX 中 , 这样就使得加密的类变少了 ;

上述问题解决方案 : 编写一个额外的代理 Application , 该 Application 专门用于解密 DEX , 将该代理 Application 制作成主 DEX , 其它的所有代码都放在另外一个 DEX 中 , 进行加密 ;

DEX 加密的优势 : 这样就可以将所有的功能性代码放在加密后的 DEX 中 , 只有代理 Application 暴露在外面 , 反编译该应用 , 只能看到用于解密的 代理 Application 类 , 其它的代码都在加密的 DEX 中 ;

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页