如何手动验证apk签名并比较签名密钥

3
假设我有两个.apk文件,据说是同一开发者开发的。 如何验证它们是否使用相同的密钥签名? 如何验证密钥属于该开发者?
哪个Android下载包含正确的工具? 我在commandlinetools-linux-6200805_latest.zip和android-studio-ide-192.6392135-linux.tar.gz中都找不到它。
2个回答

7

你需要使用apksigner工具来验证apk。

你有两个选项:


1) 通过Android Studio中的SdkManager下载最新的buildtools。 - 参考这个教程 https://developer.android.com/studio/intro/update#sdk-manager


2) 手动下载: - 前往https://developer.android.com/studio#downloads并选择适合你操作系统的命令行工具包(例如,对于Mac OS,点击"commandlinetools-mac-6200805_latest.zip"按钮)

  • 同意以上条款并下载commandlinetools

  • 解压缩commandlinetools(你将得到一个名为"tools"的文件夹)

  • 进入tools/bin目录

  • 执行cmd > ./sdkmanager --list --sdk_root=''

('sdk_root'参数可以是指向android sdk的路径,也可以为空,如果你没有安装它)

  • 查找最新的构建工具版本。在我的情况下,它是: "build-tools;29.0.3 | 29.0.3 | Android SDK Build-Tools 29.0.3"

  • 执行命令 > ./sdkmanager "build-tools;29.0.3" --sdk_root=''

(将构建工具下载到当前文件夹)



接下来的步骤:

  • 当你有了 /build-tools/29.0.3/apksigner 命令工具时
  • 执行命令 > ./apksigner verify -v --print-certs /Users/you/Desktop/my_app.apk

(我从包含 apksigner 文件的文件夹中执行命令) - 你将会收到这样的信息:

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=Android, OU=Android, O=Google Inc., L=Mountain View, ST=California, C=US
Signer #1 certificate SHA-256 digest: f0fd6c5b410f25cb25c3b53346c8972fae30f8ee7411df910480ad6b2d60db83
Signer #1 certificate SHA-1 digest: 38918a453d07199354f8b19af05ec6562ced5788
Signer #1 certificate MD5 digest: cde9f6208d672b54b1dacc0b7029f5eb
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 2b06490d2d24305c6a90dbf74cc42f50183d207d572f8079e5d92fb2c2a0cda1
Signer #1 public key SHA-1 digest: b2da9ef7ec0f4474117fb0cba4dca3b795c0eab7
Signer #1 public key MD5 digest: a90ce510a96aa09bee6bf8d9da9b258b

0

#1. 打开命令提示符或终端窗口,并导航到存放APK文件的目录。

#2. 运行以下命令验证第一个APK的签名:

jarsigner -verify -verbose -certs app1.apk

这个命令将打印有关用于签署APK的签名证书的信息。
#3. 运行以下命令将证书信息保存到文件中:
jarsigner -verbose -certs app1.apk > app1.txt

#4. 运行以下命令将证书信息保存到文件中:
jarsigner -verbose -certs app1.apk > app1.txt

这个命令将会把证书信息保存到一个名为app1.txt的文本文件中。
#5. 重复步骤3和4来处理第二个APK,将证书信息保存到一个名为app2.txt的文本文件中。
#6. 比较两个文本文件中的证书信息,看签名密钥是否匹配。你可以使用一个diff工具或者文本编辑器来比较这些文件。
如果有帮助,请告诉我。 谢谢。

1
欢迎回到Stack Overflow。看起来你已经有一段时间没有发帖了,可能不清楚当前的政策,因为你最近的6个回答中,大部分或全部都是由人工智能(例如ChatGPT)完全或部分撰写的。请注意,在这里禁止发布由人工智能生成的内容(//meta.stackoverflow.com/q/421831)。如果你在任何回答中使用了人工智能工具,请鼓励你删除它。谢谢! - NotTheDr01ds
1
读者应该仔细并批判地审查这个答案,因为由人工智能生成的信息往往包含基本错误和错误信息。如果您发现质量问题和/或有理由相信这个答案是由人工智能生成的,请相应地留下反馈。管理团队需要您的帮助来识别质量问题。 - NotTheDr01ds
回答率更高和冗长的表达方式表明这是由ChatGPT_生成的。 - Peter Mortensen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接