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, alors 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 savoir si c'est bien la même version que sur le marché.

Comment puis-je être sûr qu'elle n'a pas été modifiée? Les applications sont-elles signées de toute manière? Y a-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: Cela renvoie au marché, à partir duquel je ne peux pas le télécharger.

0 votes

D'où l'as-tu téléchargé, puisque ta question a été récemment modifiée. J'utilise gappsandroid.blogspot.com, j'ai vérifié certaines des applications et toutes correspondent aux sommes MD5 des applications officielles du Play Store.

77voto

Chris Stratton Points 1639

Évitant le débat sur la légitimité de l'installation de cette application sur votre téléphone, la question de la vérification est une que j'ai cherché à comprendre depuis un moment, et tu m'as incité à essayer de trouver un moyen possible de vérifier qui a signé un fichier apk.

Les applications Android sont signées de la manière normale des fichiers .jar (.apk est en réalité juste un .jar spécial qui est juste un .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 fondamentalement 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 ne peut que (s'opposer à/supprimer les données d'application) les fausses apparences quand quelque chose de nouveau ne correspond pas à quelque chose d'ancien qu'il prétend être.

Vous aurez besoin de jarsigner et keytool. Je crois que ceux-ci viennent du JDK qui est une prérequis à l'SDK Android plutôt que l'SDK lui-même.

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 à son sujet:

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

Cela va vous donner 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 savoir comment les tracer, je suppose 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 connu et de confiance 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 dans le .apk

jarsigner -verbose -verify suspect.apk

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

0 votes

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

0 votes

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

1 votes

Les applications Android récentes ne contiennent souvent plus de 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 la méthode préférée pour vérifier la signature d'un fichier APK.

21voto

pr0nin Points 353

Vérification de la signature d'un APK

La bonne manière 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 d'outils de construction installée.

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

android-sdk/build-tools/30.0.1/apksigner

Pour plus de détails sur la manière 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
Nom du certificat du signataire n°1 : CN=Whisper Systems, OU=Recherche et Développement, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Empreinte SHA-256 du certificat du signataire n°1 : 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Empreinte SHA-1 du certificat du signataire n°1 : 45989dc9ad8728c2aa9a82fa55503e34a8879374
Empreinte MD5 du certificat du signataire n°1 : d90db364e32fa3a7bda4c290fb65e310
Algorithme de clé du signataire n°1 : RSA
Taille de clé du signataire n°1 (bits) : 1024
Empreinte SHA-256 de la clé publique du signataire n°1 : 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Empreinte SHA-1 de la clé publique du signataire n°1 : b46cbed18d6fbbe42045fdb93f5032c943d80266
Empreinte MD5 de la clé publique du signataire n°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 manière de le savoir est de vérifier les autres applications qui ont été signées avec le même certificat.

La seule manière que je connaisse de le faire est d'utiliser des services en ligne de crawling PlayStore comme androidobservatory.org. Il propose une API pour vérifier quelles applications ont été signées avec le même certificat en utilisant l'empreinte de certificat SHA-1 :

Édition : apkmirror.com permet également de rechercher l'empreinte de certificat. Il suffit d'entrer l'empreinte de certificat SHA-1 ou SHA-256 en texte brut (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 de apksigner

Apksigner est un outil Java fourni par Google, qui propose au démarrage un fichier batch apksigner.bat (Windows) ou un script shell apksigner.sh (Linux, MacOS).

Comme mentionné précédemment, il est inclus dans chaque version d'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 l'ensemble du 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 mènent aux emplacements de téléchargement originaux de Google).

Je préfère apksigner de la version d'outils de construction v30 :

Vous n'avez besoin que du fichier lib/apksigner.jar de l'archive. Extraites-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 d'une version ultérieure (idéalement 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 système d'exploitation :

/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 Google App Store et celui que j'ai obtenu sur ApkMirror

0 votes

Pour toute personne souhaitant 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 plus de cela, il est toujours possible de télécharger uniquement le SDK Android sans Android Studio. Consultez 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 mentionnés. Au total, vous vous retrouvez avec environ 150 Mo de téléchargement.

7voto

kahbou Points 161

Il y a maintenant un outil apksigner dans build-tools qui fait ce que vous voulez. Selon les docs:

Vérifier 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 site gratuit de vérification des virus VirusTotal.com. Cela 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 probablement) alors 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 au vérificateur de virus, car je doute que ces programmes antivirus se concentrent sur chaque APK Android jamais 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 chaque APK jamais distribué. 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 est-ce quelque chose d'inconnu et plus probablement malveillant. De plus, la plupart des APK valides seront probablement là. Pourquoi ne pas inclure cela comme une partie de l'analyse comme un autre outil? Cela peut fournir juste un autre niveau de confiance ou de non-confiance sur le package. Vous n'êtes pas obligé de le considérer comme la dernière parole, mais le considérer comme plus de données.

0 votes

D'accord, je suis d'accord que c'est utile comme 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, faire une sauvegarde sur votre ordinateur et aller dans le répertoire de sauvegarde, sélectionner le fichier apk concerné et effectuer les mêmes vérifications. Vous pouvez également visualiser 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