APK签名机制之——V2签名机制详解

转载请注明出处:https://blog.csdn.net/zwjemperor/article/details/81051120
github:https://github.com/rushgit/zhongwenjun.github.com

通过前一篇Apk签名机制之——JAR签名机制详解的分析我们知道,JAR签名需要对apk内所有文件进行hash校验,当资源较多时签名验证速度较慢。为了加快验证速度并加强完整性保证,Andorid在7.0引入一种全文件签名方案V2。下面来看V2方案的具体设计原理。

1. V2签名设计思想

在了解V2签名结构前,先来了解下zip(apk)文件的结构

1.1 ZIP文件结构

这里写图片描述

zip文件分为3部分:

  1. 数据区

    此区块包含了zip中所有文件的记录,是一个列表,每条记录包含:文件名、压缩前后size、压缩后的数据等;

  2. 中央目录

    存放目录信息,也是一个列表,每条记录包含:文件名、压缩前后size、本地文件头的起始偏移量等。通过本地文件头的起始偏移量即可找到压缩后的数据;

  3. 中央目录结尾记录

    标识中央目录结尾,包含:中央目录条目数、size、起始偏移量、zip文件注释内容等。

通过中央目录起始偏移量和size即可定位到中央目录,再遍历中央目录条目,根据本地文件头的起始偏移量即可在数据区中找到相应的压缩数据。

1.2 V2签名原理

Apk签名机制之——JAR签名机制详解中我们已经知道,JAR签名是在apk文件中添加META-INF目录,即需要修改数据区中央目录,因为添加文件后会导致中央目录大小和偏移量发生变化,还需要修改中央目录结尾记录。V2方案为加强数据完整性保证,不在数据区中央目录中插入数据,选择在 数据区中央目录 之间插入一个APK签名分块,从而保证了原始zip(apk)数据的完整性。具体如下所示:

这里写图片描述

v2 签名块负责保护第 1、3、4 部分的完整性,以及第 2 部分包含的APK 签名方案 v2分块中的signed data分块的完整性。

1.3 如何定位 APK签名方案V2分块?

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值