使用内置API PackageManager。checkSignatures()。
解决方案有点乱,但仍然可行,只需深入PackageManager.checkSignature()
源代码并将实现移植到Java。在PackageManager中,加载和检查签名的部分主要基于JavaAPI:
总体思路:
Signature
,请查看android.content.pm.PackageParser中的CollectCerates()
和loadCerates()
方法。check Signature()
和compareSignature()
在android.server.pm.PackageManagerService中的方法。希望这有意义。
请尝试此处的链接开发者指南
您可以知道它们是否使用相同的签名进行签名,或者是否使用具有创建日期的证书验证。
首先导航到。终端中包含文件夹的apk
$ jarsigner -verify -verbose -certs my_application.apk
所有关于是比较您的应用程序的签名
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的即时使用:
(解压缩
unzip -p application.apk META-INF/CERT.RSA
| openssl pkcs7 -inform DER -noout -print_certs -text
额外资源:
如何找出哪个密钥库用于签署应用程序?
如何获得APK签名?
我可以向您推荐一篇由Scott Alexander-Bown撰写的关于这个主题的好文章。
https://www.airpair.com/android/posts/adding-tampering-detection-to-your-android-app
正如标题所说,我想知道给定的PDF文件是否已经过数字签名。 我用iText签署了它,但我不知道它是否已经签署,以最终辞职或采取其他行动。 有没有简单的方法(可能使用iText)?
我在理解OpenSSL的签名和验证过程时遇到了一些困难。 我有一个小型证书层次结构:根证书=>子证书=>结束实体证书。我想拥有来自最终实体CA的代码签名证书,因此创建了一个密钥对并请求CSR: 非常感谢。
我试图用OpenSSL验证一个PE文件的证书/签名(或者实际上用Python,但是看起来Python在证书处理方面很糟糕)。 我已从PE文件中提取了DER PKCS7证书,如下所述:http://blog.didierstevens.com/2008/01/11/the-case-of-the-missing-digital-signatures-tab/ 我已经创建了一个没有校验和和签名数据的P
我正在开发一个非google play应用程序,它将作为一个未签名的发行版apk交付给设备制造商,他们将用自己的私有系统密钥签名来签名。 系统签名是必不可少的,因为应用程序使用具有保护级别signatureOrSystem的权限。由于该应用程序不会作为系统特权应用程序安装,因此必须使用系统的签名进行签名。 由于我无法访问最终签名的apk(或签名密钥本身),我不知道如何测试我正在交付的产品(在真实的
我从应用程序开发人员那里得到了更新的代码和apk。我已经用我自己的keystore文件重建了应用程序,并签署了应用程序,上传到商店,收到“上传的APK与你以前的APK签署了不同的证书”。 我通过以下方式检查了更新的apk sha1文件:
我正在编写一些代码,试图对一些数据进行签名。在将openssl生成的私钥转换为Java密钥库之后,我将Java签名类与SHA256withRSA一起使用。我试图确认openssl中Java类返回的签名,但由于某些原因,我无法让openssl进行验证。我最终需要在iOS Swift 3中实现这个签名验证,但在找到库之前,我想尝试根据openssl标准检查Java签名。 例如,我从我们的登录服务器得到