Android中的APK打包与安全

aapt2命令行实现apk打包

apk文件结构

Android中的APK打包与安全_第1张图片

  • classes.dex:Dex,即Android Dalvik执行文件

  • AndroidManifest.xml:工程中AndroidManifest.xml编译后得到的二进制xml文件

  • META-INF:主要保存各个资源文件的SHA1 hash值,用于校验资源文件是否被篡改,防止二次打包时资源文件被替换,该目录下主要包括下面三个文件:

    • MANIFEST.MF:保存版本号以及对每个文件(包括资源文件)整体的SHA1 hash
    • CERT.SF:保存对每个文件头3行的SHA1 hash
    • CERT.RSA:保存签名和公钥证书
  • res:res目录下资源文件编译后得到的二进制xml文件

  • resources.arsc:包含了所有资源文件的映射,可以理解为资源索引,通过该文件能找到对应的资源文件信息

aapt2打包流程

Android中的APK打包与安全_第2张图片

  1. 通过aapt2打包res资源文件:生成R.java、resoucres.arsc和res文件
  2. 通过Javac编译R.java、Java源文件:生成class文件
  3. 通过d8命令:将class文件和第三方库中的class文件处理生成classes.dex
  4. 通过aapt2工具:将aapt生成的resoucres.arsc和res文件、未编译的资源assets文件和classes.dex一起打包生成apk
  5. 通过zipalign工具:将未签名的apk进行对齐处理
  6. 通过apksigner工具:对上面的apk进行debug或release签名

Android中的APK打包与安全_第3张图片

aapt2命令行实现打包

Android中的APK打包与安全_第4张图片
Android中的APK打包与安全_第5张图片
Android中的APK打包与安全_第6张图片
Android中的APK打包与安全_第7张图片
Android中的APK打包与安全_第8张图片
按照上面的顺序使用各个命令便可以打包生成一个apk包了。

Gradle构建工具打包

如果使用传统的aapt2的方式打包,在多模块的情况下将会十分的麻烦。幸好,gradle已经将上述的命令集成了在了各个task中。
Android中的APK打包与安全_第9张图片

APK安全攻守道

风险种类 风险描述 解决方案
App防止反编译 被反编译会暴露客户端逻辑,加密算法,密钥等等 I加密,邦邦加固,360加固包等
资源文件泄漏风险 获取图片,js等文件 资源混淆(AndResGuard),加固等
so文件破解风险 导致核心代码逻辑泄漏 so加固
测试开关的代码被打包发布 通过测试的url,测试账号等对正式服务器进行攻击 正式服务器与测试服务器不要使用同一个
Root设备运行风险 已经root的手机通过获取应用的敏感信息等 root手机禁止应用启动
模拟器运行风险 刷单,模拟虚拟位置等 禁止在虚拟器上运行
截屏攻击风险 对app运行中的界面进行截图或录制来获取用户信息 添加属性getWindow().setFlags(FLAG_SECURE,FLAG_SECURE)不让用户截图和录屏
输入监听风险 用户输入的信息被监听 自定义键盘

你可能感兴趣的:(android,安全,gradle)