apk文件的加密在我们的应用上架之前必不可少。通常我们是使用第三方加固软件,比如乐固,360加固宝类似的程序替我们完成。但是了解其原理对我们来说还是非常有用处的。

这篇来介绍通过dex 文件加密实现apk 加密的方式。

1 总体思路

 2 对核心代码工程进行加密

核心工程中androidManifest 添加的application 是引用壳工程中的application.

(1) 在打包过程中,对打包好的apk进行解压到指定路径。

(2)对解压包中的dex文件进行加密,这里具体的加密算法自行选择。

 3 对壳工程的处理

(1)壳工程生成aar包,将aar进行解压缩

(2) 解压后的classes.jar通过dx文件进行dex处理生成dex文件

利用dx --dex --output=命令

(3)将生成的dex文件复制到核心工程的解压包中。

4 对处理后的解压包进行压缩生成apk文件

(1)字节对齐

利用Android SDK中zipalign工具进行对齐

(2)给新的apk添加签名,生成签名apk

利用Android SDK中jarsigner进行签名

5 运行阶段

(1) 由于manifest中指定的application 是未加密的壳工程中的,所以可以直接加载到内存进行运行。

(2)除了application以为的其他核心代码由于都加密了,所以无法通过验证进行加载,那么就需要进行dex的解密,这个解密过程就放在application进行处理。

如何解密:

1 获取到私有目录下apk文件,输出到指定目录

2 解压apk并解密被加密了的dex文件(解压包中包含多个dex文件所以需要去遍历处理,但是注意壳文件中的dex包不要进行解密)

3 加载加密后dex文件

这里需要用到类加载器的知识进行技术支持。

(1)通过反射找到BaseDexClassLoader中的pathList属性,pathList是DexPathList类型的对象。

DexPathList中维护了一个dex文件数组(dexElementss数组),classLoader加载类的时候会从这dex数组中查找

(2 )创建我们自己的dex文件数组,这里不同api版本实现不一,需要进行版本适配

(3)将解密后的dex文件插入到DexPathList的dexElements

6 加密解密后的思考!

Q 这种dex加壳脱壳的方式有什么弊端?

A: 由于整个application没有进行加密,同时整个加密过程有全部在该文件中,稍微懂脱壳的开发者能够根据解密过程,对apk进行破解,安全性不佳。

Q 有什么方法可以完善

A:思路不变,将application中的解密过程抽出来,比如放到so库中,然后so库再进行混淆。这样一操作,有很让很多不懂C的破解者无从下手。反正就是对加密过程再进行一道道的处理。

												

android dex文件改造过程相关推荐

  1. android dex加载过程,8.1版本dex加载流程笔记--第二篇:DexFile::Open流程与简单脱壳原理...

    在看雪发了,52再发一下,共同学习 菜鸟刚刚学完了dex_file.cc这个源码,大致搞明白了大佬们hook脱整体加固的原理了,原理在帖子最后 学习了大佬angelToms的帖子https://bbs ...

  2. android dex文件过多,Android Studio中的多个Dex文件异常

    突然间,我在Android Studio中的项目中收到以下错误.Android Studio中的多个Dex文件异常 Execution failed for task ':app:dexDebug'. ...

  3. android dex文件过多,意外的最高级别异常:com.android.dex.DexException:定义了多个dex文件...

    com.android.ide.common.internal.LoggedErrorException: Failed to run command: /Users/jghg/Desktop/My ...

  4. Android aab文件签名过程

    文章目录 一.前言 二.步骤 一.前言 在上架Google Play时候,目前不再使用apk文件,而是要使用aab文件,但是使用Android Studio的工具打包方式时候,一直制作不出来aab文件 ...

  5. asm java 反编译_dex-tools-2.1-SNAPSHOT 反编译Java class文件和Android dex文件到Java源码的利器 - 下载 - 搜珍网...

    压缩包 : fcef342f7efebdee9176000f148113.zip 列表 dex-tools-2.1-SNAPSHOT/ dex-tools-2.1-SNAPSHOT/lib/ dex- ...

  6. 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )

    文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...

  7. Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...

  8. dex文件结构(三):dex文件差分包分成

    作者:hackest 链接:https://www.jianshu.com/p/5a2e33a61ba2 当程序越来越大之后,出现了一个 dex 包装不下的情况,通过 MultiDex 的方法解决了这 ...

  9. 2020-10-27(dex文件解析)

    一张图搞懂dex 大图这里 当然也可以通过下面的图12 DexFile的文件格式,了解更清楚. DEX文件详解 什么是dex文件? 如何生成一个dex文件 dex文件的作用 dex文件格式详解 什么是 ...

  10. java 解析修改dex_Android dex文件解析

    1. 关于Android dex文件 dex文件作为Android APK的组成部分,其主要是Android的Java代码经过编译生成class文件,再经过dx命令生成的.这里面包括了APK的源码,反 ...

最新文章

  1. 在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素找不到与此协定匹配的终结点元素
  2. php mysql table_关于php:MySQL Table不存在错误,但确实存在
  3. 数学篇(三)向量的基本运算
  4. 计算机相关专业学习经验总结
  5. [react] 你最喜欢React的哪一个特性(说一个就好)
  6. python 跳一跳辅助_微信跳一跳辅助自动跳Python
  7. java indexof方法_【3-14】Java中集合类list的增删改查
  8. CentOS6.4之Linux软件包管理
  9. javascript焦点图(能够自己主动切换 )
  10. 特斯拉市值站上万亿元大关,BBA如何在“自动驾驶”上做空它?
  11. 随机生成元素升序向量_使用random_shuffle()算法随机化序列元素
  12. java实现Execl中的STDEVP函数
  13. LSTM VS RNN改进
  14. 《算法导论》2.2练习答案
  15. 【Unity3D插件】AnyPortrait插件分享《(二)制作角色动画》
  16. JQuery右下角弹窗广告
  17. HDU - 5651 xiaoxin juju needs help 逆元模板
  18. Word标题跟随正文样式缩进的解决办法
  19. 多线程+SOCKET编程实现qq群聊的服务端和客户端
  20. 微信公众号网页授权--前端获取code及用户信息(vue)【简单详细版】

热门文章

  1. SEGGER RTT使用总结
  2. 2022最新《人工智能入门指南》全套学习教程,全网阅读量10w+
  3. 详解K均值聚类算法(K-means Clustering)简易实例:从空调温度判别使用者
  4. 华为语音解锁设置_华为手机语音唤醒解锁 华为语音助手解锁屏幕
  5. 【千本樱】mmd镜头+动作打包下载
  6. 转载:全志一些具体工作
  7. HFSS印刷偶极子天线(3)
  8. 如何实现阿里云短信接口使用短信业务
  9. 大华嵌入式笔试总结-提前批+正式批(已offer)
  10. 《人工智能及其应用》重点回顾