App加固基础分析

总结自https://www.bilibili.com/video/BV1M541147Au

https://www.bilibili.com/video/BV1JK4y1b79N

混淆≠加固

AS自带代码混淆加固(还是可以看到)×
360加固(都用已被破解)×
乐固、爱加密...
基于dex文件加固√

什么是反编译、如何防止、Apk文件基本构造

反编译:利用编译程序从源语言编写的源程序产生目标程序的过程。

AES :自带的加密算法,操作文件IO即可;

jar-->dx.bat工具--dex
dex-->dex2jar工具-->jar

一般反编译是怎么做的:
Zip文件解压apk-->dex2jar工具--->将class.dex转变成jar包--->jd-gui工具---->看class文件

Apk加固总体架构

1.png

1、apk拆分成dex源 和剩余文件(签名...)
2、把dex源--》 AES加密--》 生成 新dex
3、新dex + 壳dex ---》生成新文件写回apk
4、这时的apk不能直接运行的
5、重新签名生成最终apk

2.png

所需知识 :Apk打包基本流程

摘自:https://blog.csdn.net/jason0539/article/details/44917745

流程概述(详情看上方链接):
1、打包资源文件,生成R.java文件
【输入】Resource文件(就是工程中res中的文件)、Assets文件(相当于另外一种资源,这种资源Android系统并不像对res中的文件那样优化它)、AndroidManifest.xml文件(包名就是从这里读取的,因为生成R.java文件需要包名)、Android基础类库(Android.jar文件)
【工具】aapt工具
【输出】打包好的资源(bin目录中的resources.ap_文件)、R.java文件(gen目录中)

2、处理aidl文件,生成相应java 文件
【输入】源码文件、aidl文件、framework.aidl文件
【工具】aidl工具
【输出】对应的.java文件

3、编译工程源代码,生成相应class 文件
【输入】源码文件(包括R.java和AIDL生成的.java文件)、库文件(.jar文件)
【工具】javac工具
【输出】.class文件

4、转换所有class文件,生成classes.dex文件
【输入】 .class文件(包括Aidl生成.class文件,R生成的.class文件,源文件生成的.class文件),库文件(.jar文件)
【工具】javac工具
【输出】.dex文件

5、打包生成apk
【输入】打包后的资源文件、打包后类文件(.dex文件)、libs文件(包括.so文件,当然很多工程都没有这样的文件,如果你不使用C/C++开发的话)
【工具】apkbuilder工具
【输出】未签名的.apk文件

6、对apk文件进行签名
【输入】未签名的.apk文件
【工具】jarsigner
【输出】签名的.apk文件

7、对签名后的apk文件进行对其处理
【输入】签名后的.apk文件
【工具】zipalign工具
【输出】对齐后的.apk文件

3.png

加固总体框架。

4.png

壳文件生成:组件化开发生成一个model,生成aar文件(除了没有签名,其他跟apk一样)。里面是jar,根据上面知道的jar可以通过工具+代码转换成dex。

为什么是两个系列的dex?
通过壳dex文件,解密-->加密的源dex

加固代码流程:

1读取apk文件解压缩;
2拿出 所有的dex文件,对他们AES加密;
3加密后重新写回原文件名的文件中;(文件io操作)

4、拿到aar的壳文件:解压缩找出jar包--》用cmd命令(dx.bat工具)转变成dex

5.png

5、壳dex和加密后的源dex合并(写到一个文件)。
6、签名
7、安装运行
8、apk运行时解密,统一解密加载dex

dex文件加载技术ClassLoader双亲委托机制:谁先加载就用谁作为执行的class。热修复原理。
dex1、dex2、都有aa类。当dex2 里的aa有bug可以使dex1里先运行aa从而间接修改了bug。

热修复原理解析:与加固原理技术是同一套

你可能感兴趣的:(App加固基础分析)