此文只描述安全本质,由于Anroid基于性能考虑优化,以及V1、V2版本变更。具体实现可能有差异。
APK打包时包含以下两个文件:
- CERT.SF:该文件中包含每一个文件的摘要(散列值)(D)
- CERT.RSA:该文件中包含签名公钥(A)和使用签名私钥加密后的SF摘要信息(B)、以及摘要算法(C)。
APK安装校验过程如下:
- APK安装时会使用CERT.RSA的摘要算法(C)算出每个文件的摘要和CERT.SF中的值(D)进行比较
- 使用CERT.RSA的摘要算法算出CERT.SF这个文件的摘要信息A1,使用CERT.RSA文件中的公钥(A)解密CERT.RSA中指纹(B)得到摘要信息B1.
- 如果A1 = B1,则完整性校验通过。
攻击过程模拟:首先我篡改某个文件后,由于此文件的摘要和CERT.SF中的值(D)不一致,所以我需要修改CERT.SF文件。但是CERT.SF文件的摘要(A1)和(B1)不一致。所以我们需要修改CERT.RSA中使用签名私钥加密后的SF摘要信息(B),但是B是用私钥加密的。我们没有私钥,所以无法修改。