Apksigner не проверяет подпись

Я пытался проверить подпись последнего приложения Gmail (версия 8.11.25.224) с помощью apksigner, и это не удалось.

Я использовал:

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 файл.

1 ответ

Это происходит, если 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 неизвестен. Я бы не назвал это ошибкой (как это делает Пьер), но сообщение об ошибке могло бы быть более ясным, и было бы лучше, если бы старая версия могла проверить хотя бы подпись v2. Самым неприятным моментом (упомянутым Фридо) является то, что Ubuntu по-прежнему поставляет старый пакет apksigner 0.8 для всех выпусков ( packages.ubuntu.com), даже самого последнего Ubuntu 19.10 (eoan), и нет ppa с более новой версией. Вам нужна как минимум версия 0.9, которая в настоящее время является только частью инструментов сборки Android SDK.

Самым простым способом для меня было установить Android Studio и открыть ее хотя бы один раз, чтобы автоматически загрузить последнюю версию Android SDK. Центр приложений Ubuntu 19.10 установил его как оснастку, после чего 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, как рекомендуют некоторые страницы.

Изменить: См. Также " Как проверить SHA256 отпечаток APK"

При проверке подписи APK, подписанных с помощью схемы подписи v3, в apksigner есть две ошибки. В следующем выпуске apksigner должны быть исправлены эти две проблемы.

(Внутренний источник)

Другие вопросы по тегам