安卓apk包的META-INF/CERT.RSA是apk包的签名文件,如何用Python来解析它呢。
查资料了解到它的格式是X.509V3,但是用了很多库都解析失败,后来勉强实现了也不优雅。
比如直接OpenSSL直接load会报错。
certbuffer = open(rsa_path, 'rb').read()
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_ASN1, certbuffer)
但如果用命令行先把原文件转换为PEM格式。
os.system('openssl pkcs7 -inform DER -in {} -print_certs > {}'.format(rsa_path, pem_path))
再读取就能成功。
certbuffer = open(pem_path, 'rb').read()
cert = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, certbuffer)
不过os.system调命令行实在太丑陋了,不知道怎样用库实现命令行的等价功能。
不知道apk包里这个签名文件有何特别之处,或者其他的库可以实现同样功能吗?请指教。
我也遇到了这个问题, 研究了一下
应该是apk中的cert是一个证书链可以包含多个签名者证书 改成p7b就可以看到了
所以应该解析这个证书链导出其中的der编码的证书就可以加载成功
openssl应该用
sk_PKCS7_SIGNER_INFO_value