如何用Python解析apk包里的CERT.RSA文件?

安卓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包里这个签名文件有何特别之处,或者其他的库可以实现同样功能吗?请指教。

阅读 5.9k
1 个回答

我也遇到了这个问题, 研究了一下
应该是apk中的cert是一个证书链可以包含多个签名者证书 改成p7b就可以看到了

所以应该解析这个证书链导出其中的der编码的证书就可以加载成功
openssl应该用 sk_PKCS7_SIGNER_INFO_value

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题