【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | 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 代码 ;

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






三、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 中 ;


上一篇:《中国人工智能学会通讯》——5.22 结论及建议


下一篇:user.config.ts文件里定义的配置是如何合并到SAP Spartacus的标准配置里去的