Wie kann ich die Echtheit einer heruntergeladenen APK-Datei überprüfen?

62

Das neueste Update von Google Maps ist in meinem Land nicht verfügbar. Daher habe ich eine Version heruntergeladen, indem ich für "Google Maps 5.4.0 apk" googelt habe. Ich habe es tatsächlich gefunden, aber jetzt frage ich mich, wie ich feststellen kann, ob dies tatsächlich die gleiche Version wie auf dem Markt ist.

Wie kann ich sicher sein, dass es nicht manipuliert wurde? Sind Apps in irgendeiner Weise signiert? Gibt es eine Möglichkeit, die Signaturen zu überprüfen?

Nathan Fellman
quelle
Wenn Sie von Ihrem Handy aus die Seite besuchen: Bietet m.google.com/mapssie Ihnen einen Download-Link oder ähnliches?
Nicolás
@ Nicolás: Es verlinkt auf den Markt, von dem ich ihn nicht herunterladen kann.
Nathan Fellman
Kein Wunder, von Google zu kommen. Übrigens, und ich weiß, dass ich Ihre ursprüngliche Frage nicht beantworte, aber haben Sie MapDroyd getestet ?
Nicolás
@ Nicolás: Das habe ich nicht und ich benutze Waze tatsächlich für meine tägliche Navigation. Google Maps ist nur ein Beispiel. Google Books ist ein weiteres Beispiel, Google Streetview noch ein weiteres (in der Tat sieht es so aus, als ob nur Google Apps mir diese Probleme bereiten ...)
Nathan Fellman
1
Wenn Sie eine zweite App haben, die "authentisch" ist und vom selben Hersteller stammt, können Sie vergleichen, ob beide Apps mit demselben Schlüssel / derselben Identität signiert sind
Robert

Antworten:

71

Abgesehen von der Debatte über die Legitimität der Installation dieser App auf Ihrem Telefon ist die Frage der Überprüfung eine, die ich schon seit einiger Zeit verstehen möchte, und Sie haben mich aufgefordert, einen möglichen Weg zu finden, um zu überprüfen, wer signiert hat eine apk.

Android - Apps werden auf normale Weise von .jar - Dateien signiert (APK ist wirklich nur ein besonderes .jar die nur eine spezielle .zip ist) aber es kann nicht trivial sein zu verfolgen , um die Echtheit der Zertifikate , wenn Sie etwas gewusst haben gut vergleichen mit. Das ist im Grunde genommen das, was das Telefon selbst tut - es überprüft, ob es sich um etwas handelt, das angeblich von derselben Partei stammt wie etwas, das sich bereits auf dem Telefon befindet. Das Telefon weigert sich nicht, Dinge mit unbekannten Unterzeichnern zu installieren, sondern kann nur (Einwände gegen / Löschung von Anwendungen) Daten von offensichtlichen Fälschungen, wenn etwas Neues nicht mit etwas Altem übereinstimmt, von dem es behauptet, dass es es sei.

Sie benötigen Jarsigner und Keytool. Ich glaube, diese stammen aus dem JDK, das eine Voraussetzung für das Android-SDK und nicht für das SDK selbst ist.

Versuchen Sie zunächst, den in der APK-Datei enthaltenen öffentlichen Schlüssel zu überprüfen. Normalerweise ist dies in META-INF / CERTS.RSA, aber es kann sich auch in einer anderen Datei befinden - unzip -l wird es Ihnen mitteilen. Sie möchten sehen, was Sie darüber herausfinden können:

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

Das wird eine Menge Informationen darüber verbreiten, wer der Unterzeichner zu sein vorgibt. Einige Zertifikate sind anscheinend selbst von bekannten Parteien signiert, aber ohne herauszufinden, wie man das nachvollziehen kann, vermute ich, dass Sie so etwas tun könnten:

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

Wenn Sie eine bekannte vertrauenswürdige apk des gleichen Autors haben, der das gleiche Zertifikat verwendet. Ich gehe davon aus, dass die Zertifikate mit der gleichen MD5-Summe ausreichen.

Angenommen, Sie haben sich dafür entschieden, dem Zertifikat zu vertrauen, können Sie feststellen, ob alle Dateien in der APK-Datei damit signiert wurden

jarsigner -verbose -verify suspect.apk

(Wenn sich mehr als eine .RSA-Datei im Archiv befindet, sollten Sie das Flag -certs hinzufügen, um anzugeben, welche Zertifikate zum Signieren der einzelnen Dateien verwendet wurden, damit Sie sicher sein können, dass es sich um das von Ihnen verifizierte Zertifikat handelt.)

Chris Stratton
quelle
9
Gibt es eine Möglichkeit, zu überprüfen, ob eine bestimmte Apk mit der offiziellen im Google Play Store identisch ist?
Bryce
@Bryce Ich habe die gleiche Frage. Hast du eine Antwort gefunden?
Kaizer Sozay
@Chris Stratton Kann man Google Maps apk von einem Gerät kopieren? Dann kann man die Zertifikate wie gesagt überprüfen.
Kaizer Sozay
Darüber hinaus können Sie mit der folgenden Anwendung eine APK von einem Gerät extrahieren: play.google.com/store/apps/details?id=com.ext.ui&hl=de Best, Paul. [Bearbeitet von Moderator Firelord]
Spipau
4

Es gibt (jetzt) ​​ein apksignerWerkzeug build-tools, das macht, was Sie wollen. Aus den Dokumenten :

Überprüfen Sie, ob die Signaturen des APK voraussichtlich auf allen von dem APK unterstützten Android-Plattformen als gültig bestätigt werden:

apksigner verify [options] app-name.apk
kahbou
quelle
1

Sie können auch versuchen, die APK auf den kostenlosen VirusTotal.com- Virenscanner hochzuladen . Es wird ein eindeutiger Hash für die APK generiert, und wenn andere ihn bereits hochgeladen haben, um ihn zu testen (sehr wahrscheinlich), haben Sie eher eine Vorstellung davon, dass die APK gültig ist.

Der Dienst scannt die APK auch mit über 60 Virenscannern und teilt Ihnen mit, ob er der Ansicht ist, dass sie ähnliche Signaturen wie bereits gefundene Viren aufweist.

Raddevus
quelle
0

Um Zertifikate aus einer verdächtigen Apk-Datei zu vergleichen, können Sie die Version im offiziellen Play Store Ihres Telefons herunterladen, eine Sicherungskopie auf Ihrem Computer erstellen und das Sicherungsverzeichnis aufrufen, die betreffende Apk-Datei auswählen und dieselben Überprüfungen durchführen. Sie können die Google-Zertifikate auch anzeigen, indem Sie eine Standardanwendung für ein Gerät überprüfen (wie jede andere com.google.android. * Apk).

Nozalys
quelle