Comment savoir quel fichier de clés a été utilisé pour signer une application?

J’ai une application qui est signée et plusieurs fichiers de clés. Je voudrais mettre à jour l’application, donc j’ai besoin de savoir laquelle des clés a été utilisée.

Comment puis-je comparer le fichier de clés utilisé à l’origine pour signer mon application avec les différents fichiers de clés de ma machine?

Tout d’abord, dézippez l’APK et extrayez le fichier /META-INF/ANDROID_.RSA (ce fichier peut également être CERT.RSA, mais il ne doit y avoir qu’un seul fichier .RSA).

Ensuite, lancez cette commande:

keytool -printcert -file ANDROID_.RSA 

Vous obtiendrez des empreintes de certificates comme ceci:

  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 

Ensuite, utilisez à nouveau l’outil keytool pour imprimer tous les alias de votre fichier de clés de signature:

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

Vous obtiendrez une liste d’alias et leur empreinte digitale de certificate:

 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! nous pouvons maintenant déterminer que l’apk a été signé avec ce fichier de clés, et avec l’alias ‘android_key’.

Keytool fait partie de Java, alors assurez-vous que votre répertoire contient le répertoire d’installation Java.

Vous pouvez utiliser l’outil de clé de l’outil de gestion de clés et de certificates de Java 7 pour vérifier la signature d’un fichier de clés ou d’un fichier APK sans extraire de fichiers.

Signature d’un APK

 keytool -list -printcert -jarfile app.apk 

La sortie révélera la signature propriétaire / émetteur et les empreintes MD5, SHA1 et SHA256 du fichier APK app.apk .

(Notez que l’argument -jarfile été introduit dans Java 7; consultez la documentation pour plus de détails.)

Signature d’un magasin de clés

 keytool -list -v -keystore release.jks 

La sortie révélera les alias (entrées) dans le fichier de release.jks , avec les empreintes de certificate (MD5, SHA1 et SHA256).

Si les empreintes SHA1 entre l’APK et le magasin de clés correspondent, vous pouvez être assuré que cette application est signée avec la clé.

Pour construire sur la réponse de Paul Lammertsma, cette commande affichera les noms et signatures de tous les fichiers APK dans le répertoire actuel (j’utilise sh car plus tard, je dois redirect la sortie vers grep):

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

Sortie de l’échantillon:

 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 

Ou si vous vous souciez de SHA1:

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

Sortie de l’échantillon:

 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 

Un moyen beaucoup plus facile de visualiser le certificate de signature:

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

Cela affichera uniquement le DN, donc si vous avez deux certificates avec le même DN, vous devrez peut-être comparer par empreinte.

Il existe de nombreux freewares pour examiner les certificates et les magasins de clés tels que KeyStore Explorer .

Décompressez le fichier apk et ouvrez le fichier META-INF / ?. RSA. ? doit être CERT ou ANDROID ou peut être autre chose. Il affichera toutes les informations associées à votre apk.