¿Cómo averiguo 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 saber cuál de las claves se utilizó.

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

Primero, descomprima el APK y extraiga el archivo /META-INF/ANDROID_.RSA (este archivo también puede ser CERT.RSA, pero solo debe haber un archivo .RSA).

Luego emita este comando:

keytool -printcert -file ANDROID_.RSA 

Obtendrá huellas dactilares de certificados 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 

A continuación, use la herramienta de claves nuevamente 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 de 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 la aplicación ha sido firmada con este almacén de claves y con el alias ‘android_key’.

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

Puede utilizar keytool Tool keytool Key and Certificate de Java 7 para verificar la firma de un keystore o un APK sin extraer ningún archivo.

Firma de un APK

 keytool -list -printcert -jarfile app.apk 

El resultado revelará el propietario de la firma / emisor y las huellas dactilares MD5, SHA1 y SHA256 de la aplicación del archivo app.apk .

(Tenga en cuenta que el argumento -jarfile se introdujo en Java 7; consulte la documentación para obtener más detalles).

Firma de un almacén de claves

 keytool -list -v -keystore release.jks 

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

Si las huellas dactilares 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.

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

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

Muestra de salida:

 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' \;

Muestra de salida:

 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 

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 certs con el mismo DN, es posible que tenga que comparar por huella digital.

Hay muchos freewares para examinar los certificados y las tiendas de claves, como KeyStore Explorer .

Descomprime la aplicación y abre el archivo META-INF / ?. RSA. ? debe ser CERT o ANDROID o puede ser otra cosa. Mostrará toda la información asociada con tu apk.