借腾讯开源 VasDolly,谈谈 Android 签名和多渠道打包的原理!

本文详细探讨了Android应用签名的重要性,包括v1和v2签名方案的优缺点。v1签名存在安全性和效率问题,而v2方案提供了更好的完整性保护和更快的验证速度。此外,文章讨论了多渠道打包的需求,分析了被废弃的方案以及在v1和v2签名下的常见解决方案,如美团的Walle和腾讯的VasDolly,这两者都是通过不影响签名的方式来实现渠道信息的添加。
摘要由CSDN通过智能技术生成

2.1 应用签名

通过对 Apk 进行签名,开发者可以证明对 Apk 的所有权和控制权,可用于安装和更新其应用。而在 Android 设备上的安装 Apk ,如果是一个没有被签名的 Apk,则会被拒绝安装。

在安装 Apk 的时候,软件包管理器也会验证 Apk 是否已经被正确签名,并且通过签名证书和数据摘要验证是否合法没有被篡改。只有确认安全无篡改的情况下,才允许安装在设备上。

简单来说,APK 的签名主要作用有两个:

  1. 证明 APK 的所有者。
  2. 允许 Android 市场和设备校验 APK 的正确性。

而在 Android 中,支持两种应用签名的方案:

  1. 基于 JAR 签名方案(v1 方案)。
  2. Android Nougat(7.0) 中引入的 APK 签名方案 v2(v2 方案)。

既然签名方案在升级,v1 方案一定有一些缺陷的地方,接下来我们先来了解一下这两个方案的细节。

2.2 v1 签名方案

v1 签名方案,并不会保护 Apk 内的所有内容,有一些例外部分,被修改也并不会导致签名失效。例如:ZIP 元数据。

这样,在验证 APK 签名的时候,就需要处理大量不可信(尚未经过验证)的数据结构,然后还需要过滤并舍弃掉这部分不受签名保护的数据,再进行签名校验。也就是说你可以在已签名的文件中,增加一些不被签名保护的内容,这将导致受攻击的可能增大。

另外,v1 方案是对 APK 内部的被保护的原始文件(未压缩),单独进行计算数据摘要,所以在验证期间,也需要对每个文件进行减压再进行签名校验,来验证是否被篡改。所以在验证 APK 签名的时候,必须解压 APK 的所有已压缩的文件条目进行数据摘要的校验,而这些,都将需要花费更多的时间和内存。

正是因为 v1 方案的缺陷,Android 7.0 开始,才引入了 APK 签名方案 v2。

2.3 v2 签名方案

APK 签名方案 v2 是一种全文件的签名方案,该方案能够对 APK 所有受保护的部分进行签名保护,从能能够发现它们被篡改。

在 APK 验证期间,v2 方案会将 APK 文件视为 Blob,并对整个文件进行签名检查。对 APK 进行的任何修改(包括对 ZIP 元数据的修改),都会使 APK 签名作废。

使用 APK 签名方案 v2 进行签名时,会在 APK 文件中,插入一个 APK 签名块,该分块位于“ZIP 中央目录”部分之前并紧邻该部分。在“APK 签名分块”内,v2 签名和签名者身份信息会存储在 APK 签名方案 v2 分块中。

该分

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值