拿某 apk 举例
用 7z 解压*.apk,可以看到如下目录
这里有三个重要的文件 MANIFEST.MF、CERT.SF、CERT.RSA,它们的用途是对
apk 进行签名,我们今天就来分析三者之间的关系
1. MANIFEST.MF
MANIFEST.MF 文件内容是
Manifest-Version: 1.0
Created-By: 1.0 (Android SignApk)
Name: META-INF/services/javax.ws.rs.ext.MessageBodyWriter
SHA-256-Digest: ****AaoOiGNRVH9r6iGb5fv0s2ODOAIT6dwnkv***fI=
Name: *
SHA-256-Digest: *
......
SHA-256-Digest 的值是直接对该文件做 sha256 计算的结果。
2. CERT.SF
CERT.SF 文件的内容是:
Signature-Version: 1.0
X-Android-APK-Signed: 2
SHA-256-Digest-Manifest: ****Ei3aTaMbAXMg7Rr304ocINfE6wy90Mlsxu***2Q=
Created-By: 1.0 (Android SignApk)
Name: META-INF/services/javax.ws.rs.ext.MessageBodyWriter
SHA-256-Digest: ****dbjojNgoyNv+KK8wLZARBNtHmq8y4XVtRQ***yk=
Name: *
SHA-256-Digest: *
......
CERT.SF 文件的内容由来:
SHA-256-Digest:后面的内容是 MANIFEST.MF 对应行的连接前后共三行做摘要
而来。
可以使用如下 python 代码