【问题标题】:How do I verify that an Android apk is signed with a release certificate?如何验证 Android apk 是否使用发布证书进行签名?
【发布时间】:2011-08-18 08:41:40
【问题描述】:

如何检查 Android apk 是否使用版本签名而不是调试证书?

【问题讨论】:

  • 我写了a script,它将根据密钥库验证 apk。
  • 如果您有答案,请接受。
  • @JohnnyLambada 如何在 Mac 中运行您的脚本?
  • @JohnnyLambada 如何运行您的脚本?
  • @sunil 这是一个 bash 脚本,它创建了一个新的 bash 函数。点击链接并将其粘贴到文件中,然后source thatfile。脚本中的注释解释了如何运行它。

标签: android apk android-keystore


【解决方案1】:

使用这个命令,(在cmd提示符下进入java

$ jarsigner -verify -verbose -certs my_application.apk

如果您看到“CN=Android Debug”,这意味着 .apk 已使用 Android SDK 生成的调试密钥进行签名 (表示它是未签名的),否则你会找到 CN 的东西。 更多详情见:http://developer.android.com/guide/publishing/app-signing.html

【讨论】:

  • 我在 2 个 diff apk 文件的命令执行结束时收到了 jar 验证的消息。所以很困惑。但因为它为 1 个 apk 提供 CN="android debug" 而其他 apk 不同。知道哪个 1 已签名。谢谢。
  • 这如何验证签名?它会使用系统的可信 CA 吗?或者这只是一个检查 jar 文件完整性的工具?谢谢
  • this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned) - 这并不意味着它没有签名。这意味着你刚刚写的 - 它是用调试密钥签名的。
  • 我们如何检查它是否使用完全相同的证书文件进行签名,而不仅仅是一个恰好具有相同组织、位置等值的证书文件?
  • 谢谢。所以jarsigner -verify -verbose -certs myapp.apk | grep CN= | less 我们不应该看到“CN=Android Debug”。
【解决方案2】:

使用控制台命令:

apksigner verify --print-certs application-development-release.apk

您可以在 ../sdk/build-tools/24.0.3/apksigner.bat 中找到 apksigner。仅适用于 24.0.3 及更高版本的构建工具。

另请阅读谷歌文档:https://developer.android.com/studio/command-line/apksigner.html

【讨论】:

  • 我在 `%LOCALAPPDATA%\Android\sdk\build-tools\25.0.3`(以及我安装的所有其他构建工具版本)中找到了 apksigner
  • 请注意,apksigner 在 build-tools 的版本 26.0.0 中缺失。它在issuetracker.google.com/issues/62696222 中被跟踪,并应该在下一个版本中修复。在那之前的解决方法是使用来自25.0.3apksigner
  • 更新:apksigner 包含在版本26.0.1
  • 更新:APKSigner 也在 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 我相信你会在以后的所有版本中找到它:)
  • 对于详细输出使用 -v : ./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
【解决方案3】:

最简单的:

keytool -list -printcert -jarfile file.apk

这使用 Java 内置的 keytool 应用程序,不需要提取或安装任何构建工具。

【讨论】:

  • 对于无法立即运行keytool 的任何人,请检查this 并尝试将%JAVA_HOME%\bin 添加到路径中
  • 我们可以使用相同的命令检查应用程序包。
  • 一次只能使用一个命令,listprintcert
【解决方案4】:

使用此命令:(Jarsigner 在您的 Java bin 文件夹中 goto java->jdk->cmd 提示符下的 bin 路径)

$ jarsigner -verify my_signed.apk

如果 .apk 签名正确,Jarsigner 会打印“jar 已验证”

【讨论】:

  • 这还不够好,因为调试和发布 apk 都已签名会给出“jar 验证”。检查@Anass 答案的详细信息。
  • 我尝试了这个命令并验证了它。然后作为一个实验,我进入 APK 并删除了除了 sig 文件和清单之外的所有文件,它仍然得到验证。所以这里有些不对劲。但是我还没有尝试@Anass 的答案。
【解决方案5】:
    1. 解压apk
    1. keytool -printcert -file ANDROID_.RSA or keytool -list -printcert -jarfile app.apk获取哈希md5
  • keytool -list -v -keystore clave-release.jks
  • 比较md5

https://www.eovao.com/en/a/signature%20apk%20android/3/how-to-verify-signature-of-.apk-android-archive

【讨论】:

    【解决方案6】:

    在终端中运行此命令 - 如果您有 Android Studio。

    $ /Applications/Android\ Studio.app/Contents/jre/Contents/Home/bin/keytool -printcert -jarfile example.apk
    Not a signed jar file
    

    【讨论】:

      【解决方案7】:
      keytool -printcert -jarfile base.apk
      

      【讨论】:

        最近更新 更多