块的结构
8字节 块的大小 (整个块的大小,不包括这8个字节) ID-Value序列 8字节 块的大小 (值=上面的块大小) 16字节 Magic标识, 内容为"APK Sig Block 42"
ID-Value序列的结构
8字节的Length 4字节的ID1 Value1 ---------- Length ID2 Value2 ---------- ... ---------- Length IDn Valuen
APK的签名信息就是其中一项,ID为0x7109871A
1. 首先根据ECDR的魔数0x06054b50(hex:50 4b 05 06)确定ECDR部分的起始地址,也就是 从文件末尾往前搜索 504B0506
2. ECDR的起始地址+16, 就存储着, 中央目录起始地址
—————————
1. 确定中央目录地址(中央目录地址刚好是APK签名地址的尾地址)
2. 根据中央目录地址和APK签名块的长度确定ID-Value序列的首地址和尾地址
————————-
APK 签名方案 v2分块是一个签名序列,说明可以使用多个签名者对同一个APK进行签名。每个签名信息中均包含了三个部分的内容:
1. 带长度前缀的signed data
其中包含了通过一系列算法计算的摘要列表、证书信息,以及extra信息(可选);
2. 带长度前缀的signatures序列
通过一系列算法对signed data的签名列表。签名时使用了多个签名算法,在签名校验时会是选择系统支持的安全系数最高的签名进行校验;
3. 证书公钥