我已经安装了应用程序&一个APK文件,并想验证已安装的应用程序& APK文件使用相同的证书进行签名。我使用的方法是比较证书序列号:
获取已安装应用的证书序列号:
Signature sig = context.getPackageManager().getPackageInfo("com.myapp", PackageManager.GET_SIGNATURES).signatures[0];
CertificateFactory cf = CertificateFactory.getInstance("X.509");
X509Certificate cert = (X509Certificate) cf.generateCertificate(new ByteArrayInputStream(sig.toByteArray()));
Log.d(TAG, "SerialNumber: " + cert.getSerialNumber().toString(16));
获取APK文件的证书序列号:
unzip -p build/android/bin/MyApp.apk META-INF/*.RSA | keytool -printcert | grep Serial
所以我收到类似这样的序列号:4f277710
我想知道这种方法是否足够好,或者还有其他更好的方法吗?
答案 0 :(得分:0)
这是一本很棒的读物https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app。在这篇文章中,Scott Alexander谈到了如何通过比较应用程序当前签名的证书以及应该的证书来验证apk。这篇文章有望引导您走向正确的方向。