Mac 命令行获取 APK 公钥和证书 MD5 指纹
一、环境信息
- 系统:macOS
- APK:
test.apk - Android SDK Build Tools:
36.0.0
APK 路径:
bash
/Users/mac/Downloads/test.apk
二、获取 APK 证书 MD5 指纹
使用 Android SDK 自带的 apksigner:
bash
/Users/mac/Library/Android/sdk/build-tools/36.0.0/apksigner \
verify --print-certs \
/Users/mac/Downloads/test.apk
输出示例:
text
Signer #1 certificate DN: CN=test, OU=test, O=test, L=quanzhou, ST=fujian
Signer #1 certificate SHA-256 digest: 9e9344f077c41eb447edcc791af5d461e80d0a50b1371aee62439a96dce666e9
Signer #1 certificate SHA-1 digest: 2630e2f2c5df5e5f7f968c3028a0c15ff390a9a1
Signer #1 certificate MD5 digest: ed8e0251d793c3149d6e2b8b90c0fbf3
其中,MD5 证书指纹为:
text
ed8e0251d793c3149d6e2b8b90c0fbf3
注意: 现代 APK 可能使用 v2/v3 等签名方案,证书不一定存在于 META-INF/*.RSA 中,因此推荐使用 apksigner。
三、获取 APK 签名公钥
1. 安装 Python 依赖
bash
python3 -m pip install androguard
2. 创建 Python 脚本
创建 get_apk_public_key.py:
python
from androguard.core.apk import APK
apk_path = "/Users/mac/Downloads/test.apk"
apk = APK(apk_path)
certs = apk.get_certificates()
if not certs:
raise SystemExit("未找到 APK 签名证书")
for i, cert in enumerate(certs, 1):
print(f"\nSigner #{i}")
pub = cert.public_key
print("公钥算法:", pub.algorithm)
if pub.algorithm == "rsa":
rsa_key = pub["public_key"].parsed
modulus = rsa_key["modulus"].native
exponent = rsa_key["public_exponent"].native
print("公钥模数(Modulus):")
print(format(modulus, "X"))
print("公钥指数(Exponent):")
print(format(exponent, "X"))
else:
print("非 RSA 公钥,请根据实际算法处理")
3. 执行脚本
bash
python3 get_apk_public_key.py
输出中的 Modulus 为 RSA 公钥模数,Exponent 为公钥指数。
注意:不同版本的 Androguard API 可能存在差异;如脚本报错,需要根据安装版本调整。
四、阿里云备案注意事项
阿里云 App 备案需要根据页面要求填写 APK 签名相关信息。
- MD5 指纹 :使用
apksigner输出的certificate MD5 digest。 - 公钥:先确认备案字段要求的是公钥完整内容还是 RSA 公钥模数(Modulus),再填写对应值。
- 包名 :可通过 Android SDK 的
aapt工具查询。
查询包名:
bash
/Users/mac/Library/Android/sdk/build-tools/36.0.0/aapt \
dump badging \
/Users/mac/Downloads/test.apk \
| grep "^package:"
官方文档:阿里云 App 备案指南
五、总结
| 需求 | 工具 |
|---|---|
| 获取证书 MD5、SHA-1、SHA-256 | apksigner |
| 提取 APK 签名证书中的公钥 | Python + Androguard |
| 获取 RSA 公钥模数 | Androguard |
| 获取 APK 包名 | aapt dump badging |
推荐先用 apksigner 获取证书指纹,再根据备案系统的具体字段要求提取公钥信息。