如果 APK 使用 v3 签名方案进行签名,但 apksigner 的版本已过时且不支持此方案,则会发生这种情况。阅读警告:
apksigner version
0.8
apksigner verify --verbose "Signal-website-universal-release-4.50.5.apk"
DOES NOT VERIFY
ERROR: APK Signature Scheme v2 signer #1: Malformed additional attribute #1
WARNING: APK Signature Scheme v2 signer #1: Unknown signature algorithm: 0x421
因此,签名算法对于 apksigner 0.8 版本来说是未知的。我不会称其为错误(如Pierre https://stackoverflow.com/a/54790814/4680735确实如此),但错误消息可能会更清晰,如果旧版本至少能够检查 v2 签名会更好。
最烦人的一点(提到Freedo https://stackoverflow.com/questions/54782328/apksigner-does-not-verify-signature#comment102066450_54790814)是 Ubuntu 仍然为所有版本提供旧的 0.8 apksigner 软件包(软件包.ubuntu.com https://packages.ubuntu.com/search?keywords=apksigner)甚至是最新的 Ubuntu 19.10 (eoan) 并且没有更新版本的 ppa。
您至少需要 0.9 版本,该版本目前只是 Android SDK 构建工具的一部分。
对我来说最简单的方法是安装 Android Studio 并至少打开一次以自动下载最新的 Android SDK。 Ubuntu 19.10 App Center 确实将其安装为 snap,然后 SDK 位于我的主目录中:
./Android/Sdk/build-tools/29.0.2/apksigner version
0.9
./Android/Sdk/build-tools/29.0.2/apksigner verify --verbose --print-certs "Signal-website-universal-release-4.50.5.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
WARNING: META-INF/* not protected by signature.
META-INF文件夹中的文件有很多警告,因为该文件夹被排除在签名之外,包含大量版本文件和证书。这也是为什么仅仅从 APK 中读取证书是不够的,就像一些pages https://dev.webonomic.nl/how-to-check-a-the-certificate-on-an-android-app-apk推荐。
编辑:
也可以看看 ”如何验证APK的SHA256指纹 https://security.stackexchange.com/questions/178936/how-to-verify-sha256-fingerprint-of-apk"