我的国家/地区无法使用Google Maps的最新更新,因此我通过谷歌搜索“ Google Maps 5.4.0 apk”下载了一个版本。我确实找到了它,但是现在我不知道如何分辨它是否实际上与市场上的版本相同。

我如何确定它没有被篡改?应用是否以任何方式签名?有什么办法可以检查签名?

评论

如果您通过手机访问m.google.com/maps页面,它是否提供下载链接或类似内容?

@Nicolás:它链接到市场,我无法从中下载它。

由于您的问题最近已被编辑,因此您从何处下载它。我使用gappsandroid.blogspot.com,我已经交叉引用了一些应用程序,并且所有这些应用程序都将MD5金额与Play商店中的官方发布的应用程序进行了匹配。

相关stackoverflow.com/questions/12785001/…

如果您有另一个来自同一供应商的“真实”应用程序,则可以比较两个应用程序是否使用相同的密钥/身份进行签名:android.stackexchange.com/a/208326/2241

#1 楼

绕过关于在手机上安装该应用程序的合法性的辩论,验证问题是我一直想理解的一个问题,并且您已经促使我尝试找出一种验证谁签名的可能方法。 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标志以告诉您已使用哪个证书对每个文件进行签名,因此可以确保已验证其证书)。

评论


@Chris Stratton是否可以从设备复制Google Maps apk?然后,您可以按照您所说的检查证书。

– Kaizer Sozay
2015年9月19日下午2:19

此外,您可以使用以下应用程序从设备中提取APK:play.google.com/store/apps/details?id = com.ext.ui&hl = zh-CN最佳,Paul。 [由主持人Firelord编辑]

–Paul Spiesberger
17年8月30日9:50



#2 楼

验证APK文件的正确方法是使用apksigner
apksigner是Android构建工具的一部分,因此您可能会发现安装了多个版本,每个安装工具版本都安装了一个版本。
示例路径在Android SDK中,到apksigner的地址是:
android-sdk/build-tools/29.0.2/apksigner

以这种方式执行apksigner:
apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Number of signers: 1
Signer #1 certificate DN: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Signer #1 certificate SHA-256 digest: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Signer #1 certificate SHA-1 digest: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Signer #1 certificate MD5 digest: d90db364e32fa3a7bda4c290fb65e310
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Signer #1 public key SHA-1 digest: b46cbed18d6fbbe42045fdb93f5032c943d80266
Signer #1 public key MD5 digest: 0f9c33bbd45db0218c86ac378067538d
<skipped a lot of warnings>

现在您已经验证了APK,但您仍然不知道是否可以信任签署APK文件的个人/组织。这是因为在Android APK签名上使用了自签名证书。因此,如果您可以信任证书,将是一个难题。唯一的方法是检查使用相同证书签名的其他应用。
我知道的唯一方法是使用在线PlayStore抓取服务,例如androidobservatory.org。它具有一个API,可使用证书SHA-1摘要检查使用同一证书对哪些应用程序进行签名的API:

SHA-1:https://androidobservatory.org/cert/45989DC9AD8728C2AA9A82FA55503E34A8879374


编辑:apkmirror.com还允许搜索证书摘要。只需在搜索字段中输入普通的SHA-1或SHA-256证书摘要(不带冒号或空格):

SHA-1:https://www.apkmirror.com/?post_type = app_release&searchtype = app&s = 45989DC9AD8728C2AA9A82FA55503E34A8879374

SHA-256:https://www.apkmirror.com/?post_type=app_release&searchtype=apk&s=29f34e5f27f211b424bc5bf9d67162c0eafba16da
c 可以看到Google Play商店上所有其他使用相同证书签名的APK文件。

评论


这是最有帮助的答案,谢谢!我使用apksigner比较了来自与我从Google App Store获得的同一个开发人员的应用程序和与我从ApkMirror获得的应用程序的证书

–yorch
6月20日18:59

对于希望不下载1 GB SDK的用户,可以直接将下载链接指向(当前)构建工具:dl.google.com/android/repository/…

– Borislav Ivanov
12月21日12:03

@BorislavIvanov您应该提到您的链接仅适用于Windows。除此之外,您还可以只下载没有Android Studio的Android SDK。在此处查看“仅命令行工具”部分:developer.android.com/studio#downloads它包含SDK管理器,该SDK管理器允许下载已链接的“构建工具r30”。最终您总共可以下载约150MB。

–罗伯特
12月21日12:22

#3 楼

apksigner中有(现在)个build-tools工具可以满足您的需求。从文档:


检查APK的签名是否有望在APK支持的所有Android平台上被确认为有效:

apksigner verify [options] app-name.apk



#4 楼

您也可以尝试将APK上传到免费的VirusTotal.com病毒检查器。它将为APK生成一个唯一的哈希值,如果其他人已经将其上传以进行测试(很有可能),那么您将更加了解APK是有效的。
该服务还将通过60个病毒扫描程序,让您知道它是否具有与已发现病毒相似的签名。

评论


我不信任病毒检查,因为这些防病毒程序只关注曾经分发的每个Android APK。另外,除了之前已上传相同文件外,MD5不会告诉您太多信息。

–斯坦
4月28日14:41

@Stan-扫描文件中的字节以查找恶意软件字节。它不必知道曾经分发的每个APK。另外,它不是MD5,而是SHA256,还有一些其他信息,如果这是第一次上传APK,那么它可能是未知的,更可能是恶意的。另外,大多数有效的APK可能都在那里。为什么不将其作为其他使用工具作为分析的一部分呢?它可以提供对程序包的另一种置信度或不置信度。您不必将其视为最终的决定,而应将其视为更多数据

– raddevus
4月29日下午13:29

好的,我同意它作为附加资源很有用,不仅是唯一的资源。

–斯坦
5月2日下午16:27

#5 楼

要比较可疑apk文件中的证书,也许一个想法是在手机的官方Play商店中下载其版本,在计算机上进行备份并进入备份目录,选择相关的apk文件并进行相同的检查。您还可以通过在设备默认应用程序(如com.google.android。* apk)上进行检查来查看Google证书。