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

62

La dernière mise à jour de Google Maps n'étant pas disponible dans mon pays, j'ai téléchargé une version par Google pour "Google Maps 5.4.0 apk". En fait, je l’ai trouvé, mais je me demande maintenant comment puis-je savoir s’il s’agit de la même version que sur le marché?

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

Nathan Fellman
la source
Si vous visitez, depuis votre mobile, la page m.google.com/maps:, vous offre-t-elle un lien de téléchargement ou quelque chose de similaire?
Nicolás
@ Nicolás: Il est lié au marché, à partir duquel je ne peux pas le télécharger.
Nathan Fellman,
Pas surprenant venant de google. A propos, et je sais que je ne réponds pas à votre question initiale, mais avez-vous testé MapDroyd ?
Nicolás
@ Nicolás: Ce n'est pas le cas, et j'utilise effectivement Waze pour la navigation quotidienne. Google Maps n'est qu'un exemple. Google Books est un autre exemple, Google Streetview et encore un autre (en fait, il semblerait que seules les applications Google me causent ce problème ...)
Nathan Fellman
1
Si vous avez une deuxième application "authentique" provenant du même fournisseur, vous pouvez comparer les deux applications avec les mêmes clés / identités: android.stackexchange.com/a/208326/2241
Robert

Réponses:

71

Pour contourner le débat sur la légitimité de l’installation de cette application sur votre téléphone, je voulais depuis un moment comprendre la question de la vérification, et vous m’avez incité à essayer de trouver un moyen de vérifier qui a signé. un apk.

Les applications Android sont signées à la manière habituelle des fichiers .jar (.apk n’est en fait qu’un fichier .jar spécial, qui n’est qu’un fichier .zip spécial.) Toutefois, il peut s'avérer utile de tracer l'authenticité des certificats à moins que vous ne connaissiez quelque chose d'intéressant. comparer aux. C’est essentiellement ce que le téléphone fait lui-même - vérifie que quelque chose qui prétend appartenir à la même personne que quelque chose qui est déjà au téléphone est réellement - le téléphone ne refuse pas d’installer des choses avec des signataires inconnus, il ne peut que (object to / clear application données de) falsifications apparentes quand quelque chose de nouveau ne correspond pas à quelque chose de vieux auquel il prétend.

Vous aurez besoin d'avoir jarsigner et keytool. Je crois que ceux-ci proviennent du JDK, qui est une condition préalable au SDK android plutôt qu'au SDK lui-même.

Tout d’abord, vous voulez essayer de vérifier la clé publique contenue dans le fichier .apk. C’est généralement dans META-INF / CERTS.RSA, mais cela peut être dans un autre fichier - unzip -l vous le dira. Vous voulez voir ce que vous pouvez trouver à ce sujet:

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

Cela va déverser beaucoup d'informations sur qui le signataire prétend être. Certains certificats sont apparemment eux-mêmes signés par des parties connues, mais je ne pense pas que vous puissiez 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 sont suffisants.

En supposant que vous ayez décidé de faire confiance au certificat, vous pourrez voir s'il a été utilisé pour signer chacun des fichiers du fichier .apk.

jarsigner -verbose -verify suspect.apk

(S'il y a plus d'un fichier .RSA dans l'archive, vous devez ajouter l'indicateur -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é)

Chris Stratton
la source
9
Y at-il un moyen de vérifier qu'un apk donné est le même que celui officiel sur le magasin Google Play?
Bryce
@ Bryce j'ai la même question. Avez-vous trouvé une réponse?
Kaizer Sozay
@Chris Stratton Est-il possible de copier Google Maps apk d'un appareil? Ensuite, on peut vérifier les certs comme vous l'avez dit.
Kaizer Sozay
En outre, vous pouvez extraire un fichier APK d'un appareil à l'aide de l'application suivante: play.google.com/store/apps/details?id=com.ext.ui&hl=fr Best, Paul. [Modifié par le Seigneur du Feu]
Spipau
4

Il existe (maintenant) un apksigneroutil build-toolsqui fait ce que vous voulez. De la docs :

Vérifiez si les signatures de l'APK doivent être confirmées comme valides sur toutes les plateformes Android prises en charge par l'APK:

apksigner verify [options] app-name.apk
Kahbou
la source
1

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

Le service analysera également l'APK avec plus de 60 analyseurs de virus et vous indiquera s'il a des signatures similaires à celles des virus déjà détectés.

Raddevus
la source
0

Pour comparer les certificats d’un fichier apk suspect, vous pouvez peut-être télécharger sa version sur le Play Store officiel de votre téléphone, effectuer une sauvegarde sur votre ordinateur, aller dans le répertoire de sauvegarde, sélectionner le fichier apk concerné et effectuer les mêmes vérifications. Vous pouvez également afficher les certificats Google en effectuant la vérification sur une application par défaut (comme pour tout com.google.android. * Apk).

Nozalys
la source
0

La méthode correcte pour vérifier un fichier APK consiste à utiliser apksigner.

apksigner fait partie des outils de construction Android, il est donc possible que plusieurs versions soient installées, une pour chaque version des outils de construction installés.

Voici un exemple de chemin dans le SDK Android apksigner:

android-sdk/build-tools/29.0.2/apksigner

Exécutez apksigner de cette façon:

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

Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
Verified using v3 scheme (APK Signature Scheme v3): true
Number of signers: 1
Signer #1 certificate DN: CN=Whisper Systems, OU=Research and Development, O=Whisper Systems, L=Pittsburgh, ST=PA, C=US
Signer #1 certificate SHA-256 digest: 29f34e5f27f211b424bc5bf9d67162c0eafba2da35af35c16416fc446276ba26
Signer #1 certificate SHA-1 digest: 45989dc9ad8728c2aa9a82fa55503e34a8879374
Signer #1 certificate MD5 digest: d90db364e32fa3a7bda4c290fb65e310
Signer #1 key algorithm: RSA
Signer #1 key size (bits): 1024
Signer #1 public key SHA-256 digest: 75336a3cc9edb64202cd77cd4caa6396a9b5fc3c78c58660313c7098ea248a55
Signer #1 public key SHA-1 digest: b46cbed18d6fbbe42045fdb93f5032c943d80266
Signer #1 public key MD5 digest: 0f9c33bbd45db0218c86ac378067538d
<skipped a lot of warnings>

Vous avez maintenant vérifié le fichier APK, mais vous ne savez toujours pas si vous pouvez faire confiance à la personne / organisation qui a signé le fichier APK. En effet, sur les signatures Android APK, on ​​utilise par définition des certificats auto-signés. Si vous pouvez faire confiance à un certificat est donc une question difficile. Le seul moyen consiste à vérifier les autres applications qui ont été signées à l'aide du même certificat.

Le seul moyen que je connaisse est d'utiliser le service d'analyse PlayStore androidobservatory.org. Il dispose d'une API permettant de vérifier quelles applications ont été signées par le même certificat à l'aide du certificat SHA-1 Digest:

Edit: apkmirror.com permet également de rechercher le résumé du certificat. Entrez simplement le résumé du certificat SHA-1 ou SHA-256 en clair (sans les deux points ni les espaces) dans le champ de recherche:

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

Robert
la source