企业网站轮播图,学网络推广培训,购物网站主页模板,网站交互主要做什么APP加固技术发展历程 APK加固整体思路 加固整体思路#xff1a;先解压apk文件#xff0c;取出dex文件#xff0c;对dex文件进行加密#xff0c;然后组合壳中的dex文件#xff08;Android类加载机制#xff09;#xff0c;结合之前的apk资源#xff08;解压apk除dex以外…APP加固技术发展历程 APK加固整体思路 加固整体思路先解压apk文件取出dex文件对dex文件进行加密然后组合壳中的dex文件Android类加载机制结合之前的apk资源解压apk除dex以外的其他资源如manifest、res等打包新的apk文件并对新的apk文件进行对齐、签名。
Android加固原理 Dex文件整体加固原理如下 该过程涉及到三个对象分别为
1.源程序
源程序也就是我们的要加固的对象这里面主要修改的是原apk文件中的classes.dex文件和AndroidManifest.xml文件。
2.壳程序
壳程序主要用于解密经过加密了的dex文件并加载解密后的原dex文件并正常启动原程序。
3. 加密程序
加密程序主要是对原dex文件进行加密加密算法可以是简单的异或操作、反转、rc4、des、rsa等加密算法。 该加固过程可以分为如下4个阶段 1 加密阶段 2合成新的dex文件 3修改原apk文件并重打包签名 4运行壳程序加载原dex文件加密阶段
加密阶段
主要是将把原apk文件中提取出来的classes.dex文件通过加密程序进行加密。
合成新的dex文件
这一阶段主要是将上一步生成的加密的dex文件和我们的壳dex文件合并将加密的dex文件追加在壳dex文件后面并在文件末尾追加加密dex文件的大小数值。 在壳程序里面有个重要的类ProxyApplication类该类继承Application类也是应用程序最先运行的类。所以我们就是在这个类里面在原程序运行之前进行一些解密dex文件和加载原dex文件的操作。
修改原apk文件并重打包签名
在这一阶段我们首先将apk解压会看到如下图的6个文件和目录。其中我们需要修改的只有2个文件分别是classes.dex和AndroidManifest.xml文件其他文件和文件加都不需要改动。 首先我们把解压后apk目录下原来的classes.dex文件替换成我们在上一步合成的新的classes.dex文件。然后由于我们程序运行的时候首先加载的其实是壳程序里的ProxyApplication类。所以我们需要修改AndroidManifest.xml文件指定application为ProxyApplication这样才能正常找到识别ProxyApplication类并运行壳程序。
运行壳程序加载原dex文件
Dalvik虚拟机会加载我们经过修改的新的classes.dex文件并最先运行ProxyApplication类。在这个类里面有2个关键的方法
attachBaseContext和onCreate方法
ProxyApplication先是运行attachBaseContext再运行onCreate方法。 在attachBaseContext方法里主要做两个工作读取classes.dex文件末尾记录加密dex文件大小的数值则加密dex文件在新classes.dex文件中的位置为len(新classes.dex文件) – len(加密dex文件大小)。然后将加密的dex文件读取出来解密并保存到资源目录下然后使用自定义的DexClassLoader加载解密后的原dex文件 在onCreate方法中主要做两个工作通过反射修改ActivityThread类并将Application指向原dex文件中的Application创建原Application对象并调用原Application的onCreate方法启动原程序。
链接https://www.zhihu.com/question/51585199/answer/3297302964 来源知乎