首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apksigner不验证签名

Apksigner不验证签名
EN

Stack Overflow用户
提问于 2019-02-20 16:57:51
回答 2查看 8.2K关注 0票数 5

我试图用apksigner验证最新的Gmail应用程序(版本8.11.25.224)的签名,但失败了。

我使用:

apksigner verifiy --verbose --print-certs <apk.file>

结果是:

代码语言:javascript
复制
DOES NOT VERIFY
ERROR: APK Signature Scheme v2 signer #1 Malformed additional attribute #1

我一直在寻找为什么会发生这种情况的原因,但我找不到任何解决这个问题的方法。我已经做了一些实验,如果你将--min-sdk-version 28添加到apksigner命令的选项中,那么结果是:

代码语言:javascript
复制
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工具,结果是:

代码语言:javascript
复制
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文件。

EN

回答 2

Stack Overflow用户

发布于 2019-11-29 17:57:24

如果APK是使用v3签名方案签名的,但apksigner的版本已过时,不支持此方案,则会发生这种情况。阅读警告:

代码语言:javascript
复制
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仍然发布了一个旧的0.8apksigner包,用于所有版本(packages.ubuntu.com),甚至是最新的ubuntu19.10 (eoan),并且没有更新版本的ppa。您至少需要0.9版,该版本目前只是Android SDK构建工具的一部分。

对我来说,最简单的方法是安装Android Studio并至少打开一次,以便自动下载最新的Android SDK。Ubuntu 19.10 App Center确实将其安装为snap,然后SDK位于我的home目录中:

代码语言:javascript
复制
./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文件夹中的文件有很多警告,因为该文件夹是从签名中排除的,包含大量版本文件和证书。这也是为什么像一些pages推荐的那样,仅仅从APK中读取证书是不够的。

编辑:另请参阅"How to verify SHA256 fingerprint of APK

票数 11
EN

Stack Overflow用户

发布于 2019-02-21 00:15:15

在验证使用v3签名方案签名的APK时,apksigner中存在两个错误。下一版本的apksigner应该会解决这两个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54782328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档