详解Android 安全机制
之前对 apk 签名的方法进行计算,比较得到的签名和摘要信息与 apk 中保存的匹配。
第一步。提取证书信息,并对 cert.sf 进行完整性验证。
1. 先找到是否有 DSA 和 RSA 文件 ,如果找到则对其进行 decode ,然后读取其中的所有的证书列表(这些证书会被保存在 Package 信息中,供后续使用)。
2. 读取这个文件中的签名数据信息块列表,只取第一个签名数据块。读取其中的发布者和证书序列号。
3. 根据证书序列号,去匹配之前得到的所有证书,找到与之匹配的证书。
4. 从之前得到的签名数据块中读取签名算法和编码方式等信息
5. 读取 cert.sf 文件,并计算整个的签名,与数据块中的签名(编码格式的)进行比较,如果相同则完整性校验成功。
第二步。使用 cert.sf 中的摘要信息,验证 MANIFEST.MF 的完整性。
在 cert.sf 中提取 SHA1-Digest-Manifest 或者 SHA1-Digest 开头的签名 数据块 ( -Digest-Manifest 这个是整个 MANIFEST.MF 的摘要 信息,其它的是 jar 包中其它文件的摘要信息 ), 并逐个对这些数据块 进行验证。验证的方法是,现将 cert.sf 看做是很多的 entries ,每个entries 包含了一些基本信息,如这个 entry 中使用的摘要算法( SHA1 等),对 jar 包中的哪个文件计算了摘要,摘要结果是什么。 处理时先找到每个摘要数据开中的文件信息,然后从 jar 包中读取,然后使用 -Digest 之前的摘要算法进行计算,如果计算结果与摘要数据块中保存的信息的相匹配,那么就完成验证。
- Palm Pre拆解:剖析电池及多点触控问题(12-16)
- 用充电IC实现手机快速充电(11-17)
- 电池供电的IoT世界中的USB连接(12-21)
- 如此简单!两招教你轻松搞定Android手机耗电问题(12-08)
- 一种手机端的Android驾驶辅助系统的设计(12-07)
- 入门专用,Android应用程序中常用传感器的使用(12-05)
