2015-11-25 8 views
0

Я пишу приложение python для анализа файлов apk. Для проверки подписи apk я запускаю следующую команду:Как проверить подпись apk с openssl

jarsigner -verify <path to apk> 

через подпроцесс. По соображениям производительности я хочу использовать openssl вместо jarsigner.

Есть ли способ сделать это, как:

openssl verify <path to apk> 

?

+0

No. 'jarsigner' множественная как описано [здесь] (http://www.pa.msu.edu/reference/jdk-1.2.2-docs/tooldocs/win32/jarsigner.html#Verifying). Это не поддерживается как одна команда для инструмента 'openssl'. –

+0

Какие команды мне нужно делать с помощью openssl? – spitzbuaamy

ответ

1

Для полной проверки подписи и целостности давал APK, за каждого подписавшегося:

  1. Убедитесь, что подпись блок файл META-INF/< подписавшего > [RSA | EC | DSA] является действительным PKCS #. 7 CMS-подпись соответствующего регистратора META-INF/< > .SF-файл. Это может быть достигнуто с помощью: $ OpenSSL К -verify -поперечник META-INF/CERT.SF -in META-INF/CERT.RSA информа DER -noverify

  2. Убедитесь, что гидролизат META-INF/МАНИФЕСТ .MF является таким же, как указано в подписчике META-INF/<> .SF < digest alg > -Digest-Manifest attribute (base64-encoded). Обман Python/shell и/или OpenSSL «openssl dgst -binary -sha1 META-INF/MANIFEST.MF | base64» может помочь здесь.

  3. Для каждого файла, указанного в META-INF/MANIFEST.MF, убедитесь, что дайджест этого файла соответствует дайджесту, указанному в META-INF/MANIFEST.MF. Опять же, Python/shell/OpenSSL trickery ...

  4. Убедитесь, что в APK нет файлов, которые не указаны в файле MANIFEST.MF (кроме файлов, связанных с подпиской, из META-INF).

Если вам нужно только извлечь сертификат каждого подписавшего, и не волнует ли APK был подделан после подписания, вы можете ограничить себя к шагу 1.