apk如何加固(apk如何加固)
Android应用加固是一个很常见的功能,但是对其原理了解的人却不多。代码加固就是对dex加固,dex文件是对多个class文件的压缩。不管是加固,还是热更新、插件化、APM工具,这些技术的原理都是相同的,都是对dex的研究。下面从以下三个方面对Android应用加固的dex加固技术进行说明。我们先看第一个问题:一、dex文件是什么?对apk进行签名:使用apksigner命令对apk进行签名。也
Android应用加固是一个很常见的功能,但是对其原理了解的人却不多。代码加固就是对dex加固,dex文件是对多个class文件的压缩。不管是加固,还是热更新、插件化、APM工具,这些技术的原理都是相同的,都是对dex的研究。下面从以下三个方面对Android应用加固的dex加固技术进行说明。我们先看第一个问题:一、dex文件是什么?对apk进行签名:使用apksigner命令对apk进行签名。也就是在壳dex的Application的attachBaseContext方法中处理。解密代码使用C++开发,生成so库,防止破解。通过反射将最后的dex插入到dexElements数组中。
Android应用加固是一个很常见的功能,但是对其原理了解的人却不多。 下面,小亭跟您聊聊Android应用加固中的代码加固技术。 代码加固就是对dex加固,dex文件是对多个class文件的压缩。不管是加固,还是热更新、插件化、APM工具,这些技术的原理都是相同的,都是对dex的研究。所以这部分知识的了解还是很有必要的。 下面从以下三个方面对Android应用加固的dex加固技术进行说明。 一、dex文件是什么? 二、加固流程是什么? 三、如何加载加固后的dex文件? 我们先看第一个问题: 一、dex文件是什么? apk就是一个zip包。这个zip压缩包中有以下文件: 1、dex文件:多个class文件的压缩。 2、META-INF夹:签名文件。 3、AndroidManifest.xml文件 4、lib: so库 5、resources.arsc:资源文件压缩包 6、assets:assets目录下的资源 class和dex文件对比图 二、加固流程是什么? 1、解压缩APK,将dex文件放到一个文件夹中。 2、对dex文件进行AES加密。 3、生成壳dex文件。 4、将源dex文件和壳dex文件以及解压文件夹下的其他文件一起生成新apk文件。 5、对新apk文件进行签名,生成最终apk文件。 对于上述流程,我们会产生以下问题: 1、dex文件可以随便拼凑么? 2、壳dex怎么来的? 3、如何签名? 4、如何运行新apk(如何脱壳)? 在解答以上疑问之前,让我们先来了解一个必备知识,就是apk的打包流程。 1、应用资源使用aapt生成R.java和resouces.arsc,AS帮我们做的。 2、Aidl文件使用aidl工具生成Java接口 3、R.java、Aidl相关Java文件和我们的java文件通过Java解析器生成class文件 4、使用dx工具将所有class文件生成dex文件 5、使用apkBuider将资源文件、dex文件等生成apk文件 6、使用签名工具对apk文件进行签名,生成最终的apk文件。 对源Dex文件进行加密:apk->unzip->过滤dex->对dex文件加密 1、通过ZipFile解压缩apk文件 2、用文件过滤器过滤出dex文件放到一个数组中 3、将每一个dex文件转成byte数组 4、将byte数组进行AES加密 5、将byte数组通过文件IO写回到原来的文件 生成壳dex文件:aar->unzip->过滤jar->用dx转成dex 1、将一个module生成的aar文件解压 2、过滤出jar文件 3、使用dx工具将jar文件转成dex文件 生成新apk文件: 使用Zip.zip将解压目录打包成apk文件。 对apk进行签名: 使用apksigner命令对apk进行签名。 三、如何加载Dex文件 Apk第一次启动时,解密dex文件。也就是在壳dex的Application的attachBaseContext方法中处理。 解密代码使用C++开发,生成so库,防止破解。秘钥通过网络传输过来。 使用hook修改dexElements[]。通过反射将最后的dex插入到dexElements数组中。 使用hook技术将两个application统一起来,让系统看起来只有一个application。 以上便是应用加固技术的核心原理,与热修复、插件化如出一辙。