android dex文件改造过程
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文件改造过程相关推荐
- android dex加载过程,8.1版本dex加载流程笔记--第二篇:DexFile::Open流程与简单脱壳原理...
在看雪发了,52再发一下,共同学习 菜鸟刚刚学完了dex_file.cc这个源码,大致搞明白了大佬们hook脱整体加固的原理了,原理在帖子最后 学习了大佬angelToms的帖子https://bbs ...
- android dex文件过多,Android Studio中的多个Dex文件异常
突然间,我在Android Studio中的项目中收到以下错误.Android Studio中的多个Dex文件异常 Execution failed for task ':app:dexDebug'. ...
- android dex文件过多,意外的最高级别异常:com.android.dex.DexException:定义了多个dex文件...
com.android.ide.common.internal.LoggedErrorException: Failed to run command: /Users/jghg/Desktop/My ...
- Android aab文件签名过程
文章目录 一.前言 二.步骤 一.前言 在上架Google Play时候,目前不再使用apk文件,而是要使用aab文件,但是使用Android Studio的工具打包方式时候,一直制作不出来aab文件 ...
- 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- ...
- 【错误记录】记录 Android 命令行执行 Java 程序中出现的错误 ( dx 打包 PC 可执行文件报错 | dalvik 命令执行 kotlin 编译的 dex 文件报错 )
文章目录 前言 一.Android 命令行与 PC 可执行 JAR 文件不兼容 二.Android 命令行使用 dalvik 命令不能直接执行 Kotlin 编译的 dex 文件 前言 尝试在 And ...
- Android平台dalvik模式下java Hook框架ddi的分析(2)--dex文件的注入和调用
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/77942585 前面的博客<Android平台dalvik模式下java Ho ...
- dex文件结构(三):dex文件差分包分成
作者:hackest 链接:https://www.jianshu.com/p/5a2e33a61ba2 当程序越来越大之后,出现了一个 dex 包装不下的情况,通过 MultiDex 的方法解决了这 ...
- 2020-10-27(dex文件解析)
一张图搞懂dex 大图这里 当然也可以通过下面的图12 DexFile的文件格式,了解更清楚. DEX文件详解 什么是dex文件? 如何生成一个dex文件 dex文件的作用 dex文件格式详解 什么是 ...
- java 解析修改dex_Android dex文件解析
1. 关于Android dex文件 dex文件作为Android APK的组成部分,其主要是Android的Java代码经过编译生成class文件,再经过dx命令生成的.这里面包括了APK的源码,反 ...
最新文章
- 在 ServiceModel 客户端配置部分中,找不到引用协定“WebServiceSoap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素找不到与此协定匹配的终结点元素
- php mysql table_关于php:MySQL Table不存在错误,但确实存在
- 数学篇(三)向量的基本运算
- 计算机相关专业学习经验总结
- [react] 你最喜欢React的哪一个特性(说一个就好)
- python 跳一跳辅助_微信跳一跳辅助自动跳Python
- java indexof方法_【3-14】Java中集合类list的增删改查
- CentOS6.4之Linux软件包管理
- javascript焦点图(能够自己主动切换 )
- 特斯拉市值站上万亿元大关,BBA如何在“自动驾驶”上做空它?
- 随机生成元素升序向量_使用random_shuffle()算法随机化序列元素
- java实现Execl中的STDEVP函数
- LSTM VS RNN改进
- 《算法导论》2.2练习答案
- 【Unity3D插件】AnyPortrait插件分享《(二)制作角色动画》
- JQuery右下角弹窗广告
- HDU - 5651 xiaoxin juju needs help 逆元模板
- Word标题跟随正文样式缩进的解决办法
- 多线程+SOCKET编程实现qq群聊的服务端和客户端
- 微信公众号网页授权--前端获取code及用户信息(vue)【简单详细版】