我的国家/地区不提供Google Maps的最新更新,因此我通过谷歌搜索“ Google Maps 5.4.0 apk”下载了一个版本。我确实找到了它,但是现在我不知道如何分辨它实际上是否与市场上的版本相同。
我如何确定它没有被篡改?应用程序是否以任何方式签名?有什么办法可以检查签名吗?
我的国家/地区不提供Google Maps的最新更新,因此我通过谷歌搜索“ Google Maps 5.4.0 apk”下载了一个版本。我确实找到了它,但是现在我不知道如何分辨它实际上是否与市场上的版本相同。
我如何确定它没有被篡改?应用程序是否以任何方式签名?有什么办法可以检查签名吗?
Answers:
避开关于在手机上安装该应用程序的合法性的辩论,验证问题是我一直想理解的一个问题,并且您已促使我尝试找出一种验证谁签名的可能方法。 apk。
Android应用是以.jar文件的常规方式签名的(.apk实际上只是一个特殊的.jar,而这只是一个特殊的.zip),但是除非您有已知的好方法,否则跟踪证书的真实性可能并不容易。相比于。这基本上就是电话本身所做的-验证声称与电话中已有的东西实际上来自同一方的东西-电话不会拒绝安装具有未知签名者的东西,它只能(反对/清除应用程序)当某些新事物与它声称的旧事物不匹配时,就会出现明显的伪造数据。
您将需要jarsigner和keytool。我相信这些来自JDK,这是android SDK的先决条件,而不是SDK本身。
首先,您要尝试验证.apk中包含的公钥。通常这在META-INF / CERTS.RSA中,但可以在另一个文件中-解压缩-l会告诉您。您想看看您能找到什么:
unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert
这将丢弃很多有关签名者声称是谁的信息。有些证书显然是由已知方自己签名的,但是如果不弄清楚该如何跟踪,我怀疑您可以执行以下操作:
unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
unzip -p knowngood.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
如果您有使用相同证书的同一作者的已知受信任apk。我假设具有相同MD5总和的证书就足够了。
假设您已决定信任证书,则可以查看该证书是否已用于对.apk中的每个文件进行签名。
jarsigner -verbose -verify suspect.apk
(如果存档中有多个.RSA文件,则应添加-certs标志以告诉您已使用哪个证书对每个文件进行签名,因此可以确保已验证该证书)
您也可以尝试将APK上传到免费的VirusTotal.com病毒检查器。它将为APK生成一个唯一的哈希,如果其他人已经上传了该哈希以进行测试(很有可能),那么您将更加了解APK是有效的。
该服务还将使用60多种病毒扫描程序扫描APK,并告知您是否认为它具有与已发现病毒相似的签名。
m.google.com/maps
,它是否提供下载链接或类似内容?