APK签名之4种签名方案

4种APK签名方案

应用签名: https://source.android.google.cn/docs/security/features/apksigning?hl=zh-cn

0x01 V1签名

Android 7.0以下版本, 只能用旧签名方案 V1 scheme (JAR signing)

  • 来自JDK(jarsigner), 对zip压缩包的每个文件进行验证, 签名后还能对压缩包修改(移动/重新压缩文件)
  • 对V1签名的apk/jar解压,在META-INF存放签名文件(MANIFEST.MF, CERT.SF, CERT.RSA),
  • 其中MANIFEST.MF文件保存所有文件的SHA1指纹(除了META-INF文件), 由此可知: V1签名是对压缩包中单个文件签名验证

0x02 V2签名

Android 7.0开始, 谷歌增加新签名方案 V2 Scheme (APK Signature)

  • 来自Google(apksigner), 对zip压缩包的整个文件验证, 签名后不能修改压缩包(包括zipalign),
  • 对V2签名的apk解压,没有发现签名文件,重新压缩后V2签名就失效, 由此可知: V2签名是对整个APK签名验证

V2签名优点很明显:

  • 签名更安全(不能修改压缩包)
  • 签名验证时间更短(不需要解压验证),因而安装速度加快

0x03 V3签名

Android 9 支持 APK 密钥轮替,这使应用能够在 APK 更新过程中更改其签名密钥。为了实现轮替,APK 必须指示新旧签名密钥之间的信任级别。v3 在 APK 签名分块中添加了有关受支持的 SDK 版本和 proof-of-rotation 结构体的信息,以允许使用新旧密钥。

0x04 V4签名

Android 11 添加了对 APK 签名方案 v4 的支持。此方案会在单独的文件 (apk-name.apk.idsig) 中生成一种新的签名。此方案支持 ADB 增量 APK 安装,这样会加快 APK 安装速度。v4 签名需要 v2 或 v3 签名作为补充。

ADB 增量 APK 安装
在设备上安装大型(2GB 以上)APK 可能需要很长的时间,即使应用只是稍作更改也是如此。ADB(Android 调试桥)增量 APK 安装可以安装足够的 APK 以启动应用,同时在后台流式传输剩余数据,从而加速这一过程。如果设备支持该功能,并且您安装了最新的 SDK 平台工具,adb install 将自动使用此功能。如果不支持,系统会自动使用默认安装方法。
https://developer.android.google.cn/about/versions/11/features

运行以下 adb 命令以使用该功能。如果设备不支持增量安装,该命令将会失败并输出详细的解释。

adb install –incremental

在运行 ADB 增量 APK 安装之前,您必须先为 APK 签名并创建一个 APK 签名方案 v4 文件。必须将 v4 签名文件放在 APK 旁边,才能使此功能正常运行。

20230817204614

0x05 总结

综上,可以看到APK v4是面向ADB即开发调试的,而如果我们没有签名变动的需求也可以不考虑APK v3,所以目前国内大部分还停留在APK v2。

0x06 使用

  1. 在项目app的build.gradle中配置支持的签名方案
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
android {
signingConfigs {
release {
keyAlias 'test'
keyPassword 'pwd123'
storeFile file("test.jks")
storePassword 'pwd123'

enableV1Signing true
enableV2Signing true
enableV3Signing true
enableV4Signing true
}
}
}

  1. Eclipse或Android Studio在Debug时,对App签名都会使用一个默认的密钥库:
  • 默认在C:\Users\用户名\.android\debug.keystore
  • 密钥库名: debug.keystore
  • 密钥别名: androiddebugkey
  • 密钥库密码: android
作者

Dench

发布于

2023-08-17

更新于

2023-08-17

许可协议

CC BY-NC-SA 4.0

Your browser is out-of-date!

Update your browser to view this website correctly.&npsb;Update my browser now

×