我正尝试使用apksigner验证最新的Gmail应用(版本8.11.25.224)的签名,但失败。
我用过:
apksigner verifiy --verbose --print-certs <apk.file>
结果是:
DOES NOT VERIFY
ERROR: APK Signature Scheme v2 signer #1 Malformed additional attribute #1
我正在寻找导致这种情况发生的原因,但找不到任何解决方案。我做了一些实验,如果将--min-sdk-version 28
添加到apksigner命令的选项中,则结果为:
Verified using v1 scheme (JAR signing): false
Verified using v2 scheme (APK Signature Scheme v2): false
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: f0fd...
Signer #1 certificate SHA-1 digest: 3891...
Signer #1 certificate MD5 digest: cde9...
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 2048
Signer #1 public key SHA-256 digest: 2b06...
Signer #1 public key SHA-1 digest: b2da...
Signer #1 public key MD5 digest: a90c...
如果使用jarsigner工具,则结果为:
WARNING:
This jar contains entries whoes certificate chain is invalid.
Reason: PKIX path bulding failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
This jar contains signatures that does not include a timestamp. Without a timestamp, users may not be able to validate this jar after the signers certificate's expiration date (2036-01-08) or after any future revocation date.
使用-verbose
和-certs
选项重新运行以获取更多详细信息。我上传了Gmail APK文件。
答案 0 :(得分:0)
在验证使用v3签名方案签名的APK的签名时,apksigner中存在两个错误。下一版本的apksigner应该修复了这两个问题。
(内部来源)
答案 1 :(得分:0)
如果使用v3签名方案对APK进行签名但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一样),但是错误消息可能更清晰,如果旧版本至少能够检查v2签名,则更好。 最令人讨厌的一点(由Freedo提及)是,Ubuntu仍然为所有版本(packages.ubuntu.com)都附带了一个旧的0.8 apksigner软件包,即使是最新的Ubuntu 19.10(eoan),也没有更新的ppa版。 您至少需要版本0.9,该版本目前仅是Android SDK构建工具的一部分。
对我来说,最简单的方法是安装Android Studio并至少打开一次以自动下载最新的Android SDK。 Ubuntu 19.10 App Center确实将它作为快照安装,然后将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建议)还不够的原因。
编辑: 另请参阅“ How to verify SHA256 fingerprint of APK”