87 votes

Comment puis-je vérifier l'authenticité d'un fichier APK que j'ai téléchargé ?

La dernière mise à jour de Google Maps n'est pas disponible dans mon pays, donc j'ai téléchargé une version en cherchant sur Google "Google Maps 5.4.0 apk". Je l'ai en effet trouvée, mais maintenant je me demande comment je peux vérifier si c'est bien la même version que celle sur le marché.

Comment puis-je être sûr qu'elle n'a pas été altérée? Les applications sont-elles signées d'une manière ou d'une autre? Existe-t-il un moyen de vérifier les signatures?

0 votes

Si vous visitez, depuis votre mobile, la page : m.google.com/maps, vous propose-t-elle un lien de téléchargement ou quelque chose de similaire ?

0 votes

@Nicolás: Il renvoie vers le marché, à partir duquel je ne peux pas le télécharger.

0 votes

Où l'avez-vous téléchargé, puisque votre question a été récemment éditée. J'utilise gappsandroid.blogspot.com, j'ai vérifié certaines des applications et tous les sommes MD5 correspondent aux applications officielles sorties sur le Play Store.

77voto

Chris Stratton Points 1639

En évitant le débat sur la légitimité d'installer cette application sur votre téléphone, la question de la vérification est quelque chose que j'ai cherché à comprendre depuis un moment, et vous m'avez incité à essayer de trouver un moyen possible de vérifier qui a signé un apk.

Les applications Android sont signées de la même manière que les fichiers .jar (.apk est en réalité juste un fichier .jar spécial qui est en fait un fichier .zip spécial) cependant il peut ne pas être trivial de tracer l'authenticité des certificats à moins que vous ayez quelque chose de connu pour comparer. C'est essentiellement ce que fait le téléphone lui-même - il vérifie que quelque chose qui prétend être de la même partie que quelque chose déjà sur le téléphone l'est effectivement - le téléphone ne refuse pas d'installer des choses avec des signataires inconnus, il peut seulement (s'opposer/supprimer les données de l'application) à des contrefaçons apparentes lorsque quelque chose de nouveau ne correspond pas à quelque chose de vieux qu'il prétend être.

Vous aurez besoin de jarsigner et keytool. Je crois qu'ils viennent du JDK qui est un prérequis pour le SDK Android plutôt que le SDK lui-même.

Tout d'abord, vous voulez essayer de vérifier la clé publique contenue dans le .apk. Habituellement, elle se trouve dans META-INF/CERTS.RSA mais elle peut être dans un autre fichier - unzip -l vous le dira. Vous voulez voir ce que vous pouvez découvrir à ce sujet :

unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert

Cela va afficher beaucoup d'informations sur qui le signataire prétend être. Certains certificats sont apparemment eux-mêmes signés par des parties connues, mais sans comprendre comment retracer cela, je soupçonne que vous pourriez faire quelque chose comme ceci :

unzip -p suspect.apk META-INF/CERT.RSA | keytool -printcert | grep MD5
unzip -p knowngood.apk META-INF/CERT.RSA | keytool -printcert | grep MD5

Si vous avez un apk de confiance connu du même auteur qui a utilisé le même certificat. Je suppose que les certificats ayant la même somme MD5 suffisent.

En supposant que vous avez décidé de faire confiance au certificat, alors vous pouvez voir s'il a été utilisé pour signer chacun des fichiers à l'intérieur du .apk

jarsigner -verbose -verify suspect.apk

(S'il y a plus d'un fichier .RSA dans l'archive, vous devriez ajouter le drapeau -certs pour vous indiquer quel(s) certificat(s) ont été utilisé(s) pour signer chaque fichier, afin de vous assurer que c'est bien le certificat que vous avez vérifié)

0 votes

@Chris Stratton Est-il possible de copier l'APK de Google Maps à partir d'un appareil ? Ensuite, on peut vérifier les certificats comme vous l'avez dit.

0 votes

De plus, vous pouvez extraire un APK d'un appareil avec l'application suivante: play.google.com/store/apps/details?id=com.ext.ui. Cordialement, Paul.

1 votes

Les applications Android récentes ne contiennent souvent plus une signature v1 qui peut être vérifiée avec jarsigner (seulement une signature v2 ou v3). Par conséquent, apksigner de Android SDK devrait être le moyen privilégié pour vérifier la signature d'un fichier APK.

21voto

pr0nin Points 353

Vérification d'une signature APK

La bonne façon de vérifier un fichier APK est d'utiliser apksigner.

apksigner fait partie des outils de construction Android (SDK Android), vous pouvez donc trouver plusieurs versions installées, une pour chaque version des outils de construction installée.

Un exemple de chemin dans le SDK Android vers apksigner est le suivant :

android-sdk/build-tools/30.0.1/apksigner

Pour plus de détails sur la façon d'obtenir apksigner, consultez le dernier chapitre de cette réponse.

Exécutez apksigner de cette manière :

apksigner verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Vérifie
Vérifié en utilisant le schéma v1 (signature JAR) : vrai
Vérifié en utilisant le schéma v2 (schéma de signature APK v2) : vrai
Vérifié en utilisant le schéma v3 (schéma de signature APK v3) : vrai
Nombre de signataires : 1
DN du certificat du signataire #1 : CN=Whisper Systems, OU=Recherche et Développement, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Empreinte de hachage SHA-256 du certificat du signataire #1 : 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Empreinte de hachage SHA-1 du certificat du signataire #1 : 45989dc9ad8728c2aa9a82fa55503e34a8879374
Empreinte de hachage MD5 du certificat du signataire #1 : d90db364e32fa3a7bda4c290fb65e310
Algorithme de clé du signataire #1 : RSA
Taille de clé du signataire #1 (bits) : 1024
Empreinte de hachage SHA-256 de la clé publique du signataire #1 : 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Empreinte de hachage SHA-1 de la clé publique du signataire #1 : b46cbed18d6fbbe42045fdb93f5032c943d80266
Empreinte de hachage MD5 de la clé publique du signataire #1 : 0f9c33bbd45db0218c86ac378067538d

Estimer l'authenticité du certificat du signataire

Maintenant que vous avez vérifié l'APK, vous ne savez toujours pas si vous pouvez faire confiance à la personne/organisation qui a signé le fichier APK. Cela est dû au fait que, sur Android, les signatures d'APK utilisent par définition des certificats auto-signés. Il est donc difficile de dire si l'on peut faire confiance à un certificat. La seule façon de le faire est de vérifier les autres applications qui ont été signées avec le même certificat.

La seule méthode que je connais pour le faire est d'utiliser des services d'exploration en ligne du PlayStore comme androidobservatory.org. Elle dispose d'une API pour vérifier quelles applications ont été signées avec le même certificat en utilisant l'empreinte de hachage SHA-1 du certificat :

Édition : apkmirror.com permet également de rechercher l'empreinte du certificat. Il suffit d'entrer l'empreinte du certificat SHA-1 ou SHA-256 (sans deux-points ni espaces) dans le champ de recherche :

Sur cette page, vous pouvez voir tous les autres fichiers APK sur le Google Play Store qui sont signés avec le même certificat.

Obtention et exécution d'apksigner

Apksigner est un outil Java que Google fournit au démarrage sous la forme d'un fichier de commandes apksigner.bat (Windows) ou d'un script shell apksigner.sh (Linux, MacOS).

Comme mentionné précédemment, il est inclus dans chaque version des outils de construction du SDK Android. Mais il n'est pas placé dans le PATH, vous ne pouvez donc pas simplement ouvrir une invite de commande ou un terminal et exécuter apksigner, vous devez plutôt fournir manuellement le chemin complet vers apksigner.bat/apksigner.sh.

Si vous ne voulez pas installer tout le SDK Android (avec ou sans Android Studio), vous pouvez directement télécharger les outils de construction, les extraire et exécuter apksigner. Des liens vers tous les outils de construction sont fournis sur ce site web (les liens fournis renvoient aux emplacements de téléchargement originaux de Google).

Je préfère apksigner de build-tools v30 :

Vous avez seulement besoin du fichier lib/apksigner.jar de l'archive. Extrayez-le et ouvrez un shell dans le dossier. Ensuite, exécutez java -jar apksigner.jar. Pour exécuter, vous avez besoin de Java 9 ou version ultérieure (de préférence Java 11 ou 17).

En utilisant cette approche directe, la commande pour exécuter apksigner est

java -jar apksigner.jar verify --verbose --print-certs "Signal-website-universal-release-4.49.13.apk"

Ou si vous utilisez des noms de chemin complets - remplacez les sections <..> par le chemin approprié qui fonctionne sur votre OS :

/java -jar /apksigner.jar verify --verbose --print-certs ""

0 votes

C'est la réponse qui m'a le plus aidé, merci! J'ai utilisé apksigner pour comparer le certificat d'une application du même développeur que j'ai obtenue sur le Google App Store et celui que j'ai obtenu sur ApkMirror.

0 votes

Pour toute personne cherchant à NE PAS télécharger 1 Go de SDK, voici le lien de téléchargement direct vers les outils de construction (actuels) : dl.google.com/android/repository/…

1 votes

@BorislavIvanov Vous devriez mentionner que votre lien est uniquement pour Windows. En dehors de cela, il y a toujours l'option de télécharger uniquement le SDK Android sans Android Studio. Vérifiez la section "Outils en ligne de commande uniquement" ici: developer.android.com/studio#downloads Elle contient le gestionnaire SDK qui permet de télécharger les "Outils de compilation r30" que vous avez liés. Au total, vous vous retrouvez avec environ 150 Mo de téléchargement.

7voto

kahbou Points 161

Il existe désormais un outil apksigner dans build-tools qui fait ce que vous voulez. Selon les docs :

Vérifiez si les signatures de l'APK sont censées être confirmées comme valides sur toutes les plates-formes Android prises en charge par l'APK :

apksigner verify [options] app-name.apk

0 votes

Où télécharger ?

0 votes

(des sources officielles/"de confiance")

2voto

raddevus Points 169

Vous pouvez également essayer de télécharger l'APK sur le vérificateur de virus VirusTotal.com gratuit. Il générera un hachage unique pour l'APK et si d'autres l'ont déjà téléchargé pour le tester (très probable), vous aurez une meilleure idée que l'APK est valide.

Le service analysera également l'APK avec plus de 60 scanners de virus et vous informera s'il estime qu'il a des signatures similaires à des virus déjà trouvés.

3 votes

Je ne ferais pas confiance à la vérification du virus, car je doute que ces programmes antivirus se concentrent uniquement sur chaque fichier APK Android distribué. De plus, le MD5 ne vous dira pas grand-chose, à part que le même fichier a été téléchargé auparavant.

0 votes

@Stan - Il analyse les octets du fichier pour les octets de logiciels malveillants. Il n'a pas besoin de connaître tous les APK jamais distribués. De plus, ce n'est pas un MD5, c'est un SHA256 et il y a un peu d'informations supplémentaires communiquées à ce sujet, si c'est la première fois que l'APK est téléchargé, peut-être que c'est quelque chose d'inconnu et plus malveillant. De plus, la plupart des APK valides seront probablement là. Pourquoi ne pas inclure cela dans l'analyse comme un autre outil à utiliser? Cela peut fournir un autre niveau de confiance ou de non-confiance concernant le package. Vous n'avez pas à le considérer comme un mot final, mais en tant que plus de données.

0 votes

D'accord, je suis d'accord que c'est utile en tant que source supplémentaire, juste pas la seule.

0voto

Nozalys Points 1

Pour comparer les certificats d'un fichier apk suspect, peut-être une idée est de le télécharger sur le Play Store officiel sur votre téléphone, de faire une sauvegarde sur votre ordinateur et d'aller dans le répertoire de sauvegarde, sélectionnez le fichier apk concerné et faire les mêmes vérifications. Vous pouvez également afficher les certificats Google en effectuant la vérification sur une application par défaut du périphérique (comme n'importe quelle apk com.google.android.*)

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X