¿Cómo puedo saber qué almacén de claves se utilizó para firmar una aplicación?


Tengo una aplicación que está firmada y varios archivos de almacén de claves. Me gustaría actualizar la aplicación, así que necesito averiguar cuál de las claves se utilizó.

¿Cómo puedo comparar qué almacén de claves se usó originalmente para firmar mi aplicación con varios almacenes de claves que tengo en mi máquina?

Author: Paul Lammertsma, 2012-07-04

5 answers

Primero, descomprima el APK y extraiga el archivo /META-INF/ANDROID_.RSA (este archivo también puede ser CERT.RSA, pero sólo debería haber uno .Archivo RSA).

Entonces emita este comando:

keytool -printcert -file ANDROID_.RSA

Obtendrá las huellas dactilares del certificado como esta:

     MD5:  B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB
     SHA1: 16:59:E7:E3:0C:AA:7A:0D:F2:0D:05:20:12:A8:85:0B:32:C5:4F:68
     Signature algorithm name: SHA1withRSA

Luego use la herramienta de claves de nuevo para imprimir todos los alias de su almacén de claves de firma:

keytool -list -keystore my-signing-key.keystore

Obtendrá una lista de alias y su huella digital del certificado:

android_key, Jan 23, 2010, PrivateKeyEntry,
Certificate fingerprint (MD5): B3:4F:BE:07:AA:78:24:DC:CA:92:36:FF:AE:8C:17:DB

Voila! ahora podemos determinar que el apk ha sido firmado con este almacén de claves, y con el alias 'android_key'.

Keytool es parte de Java, así que asegúrese de que su RUTA tenga un directorio de instalación de Java.

 317
Author: azgolfer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-04 15:29:09

Puede usar la Herramienta de Administración de Claves y Certificados de Java 7 keytool para verificar la firma de un almacén de claves o un APK sin extraer ningún archivo.

Firma de un APK

keytool -list -printcert -jarfile app.apk

La salida revelará el propietario/emisor de la firma y las huellas dactilares MD5, SHA1 y SHA256 del archivo APK app.apk.

(Note que el argumento -jarfile fue introducido en Java 7; vea la documentación para más detalles.)

Firma de un almacén de claves

keytool -list -v -keystore release.jks

La salida será revele los alias (entradas) en el archivo del almacén de claves release.jks, con las huellas dactilares del certificado (MD5, SHA1 y SHA256).

Si las huellas SHA1 entre el APK y el almacén de claves coinciden, entonces puede estar seguro de que esa aplicación está firmada con la clave.

 228
Author: Paul Lammertsma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-06 17:19:24

Para construir sobre la respuesta de Paul Lammertsma, este comando imprimirá los nombres y firmas de todos los APK en el dir actual (estoy usando sh porque más tarde necesito canalizar la salida a grep):

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}"' \;

Salida de muestra:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
Signer #1:

Signature:

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
         MD5:  D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
         SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
         Signature algorithm name: MD5withRSA
         Version: 1

APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
Signer #1:

Signature:

Owner: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Issuer: CN=Unknown, OU="Google, Inc", O="Google, Inc", L=Mountain View, ST=CA, C=US
Serial number: 4934987e
Valid from: Mon Dec 01 18:07:58 PST 2008 until: Fri Apr 18 19:07:58 PDT 2036
Certificate fingerprints:
         MD5:  D0:46:FC:5D:1F:C3:CD:0E:57:C5:44:40:97:CD:54:49
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
         SHA256: 3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A
         Signature algorithm name: MD5withRSA
         Version: 1

O si solo te importa SHA1:

find . -name "*.apk" -exec echo "APK: {}" \; -exec sh -c 'keytool -printcert -jarfile "{}" | grep SHA1' \;

Salida de muestra:

APK: ./com.google.android.youtube-10.39.54-107954130-minAPI15.apk
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
APK: ./com.google.android.youtube_10.40.56-108056134_minAPI15_maxAPI22(armeabi-v7a)(480dpi).apk
         SHA1: 24:BB:24:C0:5E:47:E0:AE:FA:68:A5:8A:76:61:79:D9:B6:13:A6:00
 14
Author: Artem Russakovskii,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-10 23:32:45

Una forma mucho más fácil de ver el certificado de firma:

jarsigner.exe -verbose -verify -certs myapk.apk

Esto solo mostrará el DN, por lo que si tiene dos certificados con el mismo DN, puede que tenga que comparar por huella digital.

 11
Author: Nikolay Elenkov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-05 03:21:30

Hay muchos freewares para examinar los certificados y almacenes de claves como KeyStore Explorer.

Descomprimir el apk y abrir el META-INF/?.Archivo RSA. ? será CERT o ANDROIDE o puede ser otra cosa. Mostrará toda la información asociada con tu apk.

 4
Author: mhanifa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-30 12:51:43