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

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【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 代码 ;

image.png






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


目录
相关文章
|
1月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
221 83
|
6月前
|
安全 Android开发 Kotlin
Android经典实战之SurfaceView原理和实践
本文介绍了 `SurfaceView` 这一强大的 UI 组件,尤其适合高性能绘制任务,如视频播放和游戏。文章详细讲解了 `SurfaceView` 的原理、与 `Surface` 类的关系及其实现示例,并强调了使用时需注意的线程安全、生命周期管理和性能优化等问题。
251 8
|
1月前
|
算法 安全 Java
即时通讯安全篇(一):正确地理解和使用Android端加密算法
本文主要讨论针对Android这样的移动端应用开发时,如何正确的理解目前常用的加密算法,为诸如即时通讯应用的实战开发,如何在合适的场景下选择适合的算法,提供一些参考。
54 0
|
4月前
|
缓存 Java 数据库
Android的ANR原理
【10月更文挑战第18天】了解 ANR 的原理对于开发高质量的 Android 应用至关重要。通过合理的设计和优化,可以有效避免 ANR 的发生,提升应用的性能和用户体验。
169 56
|
3月前
|
存储 安全 Android开发
探索Android系统的最新安全特性
在数字时代,智能手机已成为我们生活中不可或缺的一部分。随着技术的不断进步,手机操作系统的安全性也越来越受到重视。本文将深入探讨Android系统最新的安全特性,包括其设计理念、实施方式以及对用户的影响。通过分析这些安全措施如何保护用户免受恶意软件和网络攻击的威胁,我们希望为读者提供对Android安全性的全面了解。
|
5月前
|
XML 前端开发 Android开发
Android View的绘制流程和原理详细解说
Android View的绘制流程和原理详细解说
95 3
|
6月前
|
ARouter 测试技术 API
Android经典面试题之组件化原理、优缺点、实现方法?
本文介绍了组件化在Android开发中的应用,详细阐述了其原理、优缺点及实现方式,包括模块化、接口编程、依赖注入、路由机制等内容,并提供了具体代码示例。
101 2
|
6月前
|
编解码 前端开发 Android开发
Android经典实战之TextureView原理和高级用法
本文介绍了 `TextureView` 的原理和特点,包括其硬件加速渲染的优势及与其他视图叠加使用的灵活性,并提供了视频播放和自定义绘制的示例代码。通过合理管理生命周期和资源,`TextureView` 可实现高效流畅的图形和视频渲染。
492 12
|
5月前
|
Java 调度 Android开发
Android面试题之Kotlin中async 和 await实现并发的原理和面试总结
本文首发于公众号“AntDream”,详细解析了Kotlin协程中`async`与`await`的原理及其非阻塞特性,并提供了相关面试题及答案。协程作为轻量级线程,由Kotlin运行时库管理,`async`用于启动协程并返回`Deferred`对象,`await`则用于等待该对象完成并获取结果。文章还探讨了协程与传统线程的区别,并展示了如何取消协程任务及正确释放资源。
100 0
|
5月前
|
安全 网络安全 Android开发
深度解析:利用Universal Links与Android App Links实现无缝网页至应用跳转的安全考量
【10月更文挑战第2天】在移动互联网时代,用户经常需要从网页无缝跳转到移动应用中。这种跳转不仅需要提供流畅的用户体验,还要确保安全性。本文将深入探讨如何利用Universal Links(仅限于iOS)和Android App Links技术实现这一目标,并分析其安全性。
722 0

热门文章

最新文章

  • 1
    【03】微信支付商户申请下户到配置完整流程-微信开放平台创建APP应用-填写上传基础资料-生成安卓证书-获取Apk签名-申请+配置完整流程-优雅草卓伊凡
    86
  • 2
    Android历史版本与APK文件结构
    221
  • 3
    Cocos2d-x 游戏开发-打包apk被默认自带了很多不必要的权限导致apk被报毒,如何在Cocos 2d-x中强制去掉不必要的权限-优雅草卓伊凡
    69
  • 4
    当flutter react native 等混开框架-并且用vscode-idea等编译器无法打包apk,打包安卓不成功怎么办-直接用android studio如何打包安卓apk -重要-优雅草卓伊凡
    90
  • 5
    【03】完整flutter的APP打包流程-以apk设置图标-包名-签名-APP名-打包流程为例—-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈 章节内容【03】
    198
  • 6
    【02】写一个注册页面以及配置打包选项打包安卓apk测试—开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
    56
  • 7
    apk安装包EXE,mis程序打包后报毒的正确处理方式-千万不要再人傻钱多被骗-真正的合法途径的处理方式才是正确的-apk安装包EXE,mis程序如何处理-优雅草央千澈
    87
  • 8
    使用Kivy创建“Hello World”应用并打包成APK
    519
  • 9
    使用keytool查看Android APK签名
    539
  • 10
    解决android apk安装后出现2个相同的应用图标
    471