我编写了一个python应用程序来分析apk文件。要检查apk的签名,请运行以下命令:
["1","3","5","6"]
通过子进程。 出于性能原因,我想使用openssl而不是jarsigner。
有没有办法做到这一点:
jarsigner -verify <path to apk>
答案 0 :(得分:3)
为每个签名者完全验证APK的签名和完整性:
检查签名块文件META-INF /&lt; signer&gt;。[RSA | EC | DSA]是相应META-INF /&lt; signer&gt; .SF文件的有效PKCS#7 CMS签名。这可以通过以下方式实现: $ openssl cms -verify -content META-INF / CERT.SF -in META-INF / CERT.RSA -inform DER -noverify
检查META-INF / MANIFEST.MF的摘要是否与META-INF /&lt; signer&gt; .SF&lt; digest alg&gt; -Digest-Manifest属性(base64-encoded)中指定的摘要相同。 Python / shell技巧和/或OpenSSL的“openssl dgst -binary -sha1 META-INF / MANIFEST.MF | base64”在这里可以提供帮助。
对于META-INF / MANIFEST.MF中列出的每个文件,请检查该文件的摘要是否与META-INF / MANIFEST.MF中列出的摘要相匹配。再次,Python / shell / OpenSSL技巧......
检查APK中没有未在MANIFEST.MF中列出的文件(META-INF中与签名相关的文件除外)。
如果您只需要提取每个签名者的证书,并且不关心签名后APK是否被篡改,您可以将自己限制在第1步。