apk提取加密素材_高效IO之Dex加密(三)

本文介绍了Android APK的加密和解密方案,重点在于如何在应用启动时通过Application解密加密的DEX文件,确保应用能正常安装和运行。加密过程中,将解密模块作为未加密的独立Module,首次启动时在Application中执行解密操作,重新插入到ClassLoader的DEX文件数组中。
摘要由CSDN通过智能技术生成

8ecd5ce0e114abffd05943bff9797254.png

更多Android高级架构进阶视频免费学习请点击:

哔哩哔哩 ( ゜- ゜)つロ 乾杯~ Bilibili​space.bilibili.com

apk加固原理之dex加密

原理其实不复杂,加固其实就是加密dex文件,防止dex专程jar 被阅读。后面才是热部署解密dex;

一、加密和解密方案

既然我们已经弄清了apk是如何打包的,那么将加密流程加到整个打包流程就相对清晰了。如下图

8a7e92993d98fa4ddd42accf4a13749d.png

什么?还是不懂呢?那来看看我们整个加密和解密方案呢?

b8095a5724356bf80d0fb272c29c3b30.png

我们的思路如下:

既然我们要加密,那么必然有解密,但是这个解密又必然是整个应用的一部分,但是连这部分都加密的话,那么系统就完全无法解析我们的应用,也就是完全无法安装了。所以我们需要将解密的部分提取出来单独作为一个module,且这个module是不能够被加密的。然后最好的解密时机就是首次启动应用的时候进行,所以Application自然成了我们负责解密的首选。那么是否意味着原apk中不能有这个module呢?答案是:错啦。原apk中同样要将这个解密module打包进去,否则原apk也无法编译通过啊。
我们都知道,系统在加载类的时候都是从我们apk的dex文件中加载的。ClassLoader会去维护一个这样的dex文件数组(这个在前面的热修复章节有介绍过)。而我们要做的就是将原apk中的dex都加密,然后将解密部分的代码单独编程成dex文件(我们称这样的dex为壳dex)连带着加密的dex一起加到新apk中。这样新apk安装后系统就能够找到我们应用启动的入口Application了,不至于由于加密导致系统找不到应用程序入口。而在这个程序入口中我们要做的就是解密被加密的dex文件,然后重新插入到ClassLoader维护的dex文件数组中(这里就涉及到大量的反射知识)。
三、加密实现
方案说了那么多,到底如何实现呢?实现后到底能不能像我们说的那样正常安装运行呢?撸代码来验证!

先来看看我们加密工程未运行前的结构图

2fa3f0aeba2ba014201c36c409dba97c.png

再来看看工程运行后,工程结构的变化

2846d45311eca42df39a48ad005092de.png

可以看到运行后原apk被加密和解密模块被放到一起重新打包成了新的apk。这个过程代码如何实现呢?

1、既然要加密,必然要

源码AppPlus,App+是一个MD风格的用于传送、提取APK文件的开源工具软件。 优雅体面的提取APK 在工作过程中,有时需要反编译一些软件的APK,此时这些软件就存在于自己的手机,但是无法直接获得从手机中获取APK,后来在软件市场找到了一些相关的APK提取工具软件, 如APK提取器等等的软件,但是无一例外,它们的操作体验都太差,加上丑陋的广告,让我一点都忍不了。所以我觉得自己有必要让这个看似简单的事情,变得更加优雅。 快速打开应用详情 在开发过程中,经常需要去应用详情界面中执行清除数据的操作。但是一般的ROM(MIUI做的不错,可以直接在最近任务列表,长按对应APP的图标,就可以打开应用详情)都只能去设置界面,然后找到对应的应用,点击item,打开详情,点击清除数据,整个过程稍微复杂。所以如果有一个app,可以显示最近打开的应用列表,并且支持打开应用详情最好不过了。 快捷分享应用APK文件 这个功能跟茄子快传、快牙提供的功能是重合的,但是它们正常工作的基础是双方手机必须同时安装客户端,其实不该这么霸道的。App+可以单向传送APK文件到对方手机,尽管速度慢一点。 喜欢MaterialDesigner 不久前,Google公布了support:design包,很好的支持了MaterialDesigner的新元素,所以可以通过项目,学习使用最新的API。(有人说,可以在工作中就可以使用相关的API啊,但是无奈,公司的设计都是按照IOS的规范,MD根本没影)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值