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

举报
韩曙亮 发表于 2022/01/11 00:24:33 2022/01/11
【摘要】 文章目录 一、DEX 加密简介二、APK 文件分析三、DEX 分割 一、DEX 加密简介 Proguard 混淆弊端 : 之前使用 Proguard 混淆 后的代码...





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

文章来源: hanshuliang.blog.csdn.net,作者:韩曙亮,版权归原作者所有,如需转载,请联系作者。

原文链接:hanshuliang.blog.csdn.net/article/details/109596454

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。