我想验证两个 APK 文件是否已使用相同的证书签名。
我有完整的 Java SDK,但出于跨平台的原因,我想从 Java 代码中获取它。
有什么想法吗?
最佳答案
所有关于比较您的应用程序的签名
a) get signature of both aps
b) check if sig.hashCode() == releaseSig.hashCode
1) 使用 android api 通过运行时检查:
Signature[] sigs = context.getPackageManager()
.getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES)
.signatures;
来自文件:
Signature releaseSig = context.getPackageManager()
.getPackageAchiveInfo("/path2apk/app.apk",PackageManager.GET_SIGNATURES)
.signatures[0];
2) 在android外部获取签名见:
http://androidcracking.blogspot.com/2010/12/getting-apk-signature-outside-of.html
你可以使用:
openssl pkcs7 -inform DER -in CERT.RSA -noout -print_certs -text
unzip -p application.apk META-INF/CERT.RSA | keytool -printcert
openssl 的即时使用:
(解压缩并通过管道传输证书而不是定义 -infile 选项):
unzip -p application.apk META-INF/CERT.RSA
| openssl pkcs7 -inform DER -noout -print_certs -text
其他资源:
How do I find out which keystore was used to sign an app?
How to get APK signing signature?
我可以向您推荐 Scott Alexander-Bown (scottyab) 在这个主题中的一篇好文章
https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app
关于java - 验证两个 apk 文件是否使用相同的签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12511533/