Come posso verificare l'autenticità di un file APK che ho scaricato?


62

L'ultimo aggiornamento di Google Maps non è disponibile nel mio paese, quindi ho scaricato una versione cercando su Google "Google Maps 5.4.0 apk". In effetti l'ho trovato, ma ora mi chiedo come posso sapere se questa è in realtà la stessa versione del mercato.

Come posso essere sicuro che non sia stato manomesso? Le app sono firmate in qualche modo? Esiste un modo per controllare le firme?


Se visiti, dal tuo cellulare, la pagina: m.google.com/mapsti offre un link per il download o qualcosa di simile?
Nicolás,

@Nicolás: si collega al mercato, dal quale non riesco a scaricarlo.
Nathan Fellman,

Non sorprende che provenga da Google. A proposito, e so che non sto rispondendo alla tua domanda originale, ma hai testato MapDroyd ?
Nicolás,

@Nicolás: Non l'ho fatto e in realtà utilizzo Waze per la mia navigazione quotidiana. Google Maps è solo un esempio. Google Libri è un altro esempio, Google Streetview è un altro (in realtà sembra che solo le app di Google mi diano questo problema ...)
Nathan Fellman

1
Se hai una seconda app "autentica" e proveniente dallo stesso fornitore, puoi confrontare se entrambe le app sono firmate utilizzando le stesse chiavi / identità: android.stackexchange.com/a/208326/2241
Robert

Risposte:


71

Evitando il dibattito sulla legittimità dell'installazione di quell'app sul telefono, la questione della verifica è una questione che intendevo capire da un po 'e mi hai spinto a cercare di capire un possibile modo per verificare chi ha firmato un apk.

Le app Android sono firmate nel modo normale dei file .jar (.apk è in realtà solo uno speciale .jar che è solo uno speciale .zip), tuttavia potrebbe non essere banale rintracciare l'autenticità dei certificati a meno che non si abbia qualcosa di noto Paragonare a. Questo è fondamentalmente ciò che fa il telefono stesso - verifica che qualcosa che afferma di appartenere alla stessa parte di quello che è già effettivamente sul telefono - il telefono non rifiuta di installare cose con firmatari sconosciuti, può solo (obiettare / cancellare l'applicazione dati di) falsi apparenti quando qualcosa di nuovo non corrisponde a qualcosa di vecchio a cui afferma.

Avrai bisogno di jarsigner e keytool. Credo che questi provengano dal JDK, che è un prerequisito per l'SDK Android piuttosto che per l'SDK stesso.

Per prima cosa, prova a verificare la chiave pubblica contenuta in .apk. Di solito questo è in META-INF / CERTS.RSA ma può essere in un altro file - decomprimere -l. Vuoi vedere cosa puoi scoprire al riguardo:

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

Sta per scaricare molte informazioni su chi sostiene di essere il firmatario. Apparentemente alcuni certificati sono firmati da parti conosciute, ma senza capire come rintracciarlo, sospetto che potresti fare qualcosa del genere:

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

Se hai un apk attendibile noto dello stesso autore che ha utilizzato lo stesso certificato. Suppongo che i certificati con la stessa somma MD5 siano sufficienti.

Supponendo che tu abbia deciso di fidarti del certificato, allora puoi vedere se è stato usato per firmare ciascuno dei file all'interno di .apk

jarsigner -verbose -verify suspect.apk

(Se nell'archivio è presente più di un file .RSA, devi aggiungere il flag -certs per dirti quali certificati sono stati usati per firmare ogni file, quindi puoi essere sicuro che sia il certificato che hai verificato)


9
Esiste un modo per verificare che un determinato apk sia lo stesso di quello ufficiale sul Google Play Store?
Bryce,

@Bryce Ho la stessa domanda. Hai trovato una risposta?
Kaizer Sozay,

@Chris Stratton È possibile copiare l'apk di Google Maps da un dispositivo? Quindi si può controllare i certificati come hai detto.
Kaizer Sozay,

Inoltre, puoi estrarre un APK da un dispositivo con la seguente applicazione: play.google.com/store/apps/details?id=com.ext.ui&hl=it Best, Paul. [A cura del moderatore Firelord]
Spipau,

4

C'è (ora) uno apksignerstrumento build-toolsche fa quello che vuoi. Dai documenti :

Verifica se le firme dell'APK devono essere confermate valide su tutte le piattaforme Android supportate dall'APK:

apksigner verify [options] app-name.apk

1

Puoi anche provare a caricare l'APK sul controllo antivirus gratuito VirusTotal.com . Genererà un hash univoco per l'APK e se altri l'hanno già caricato per testarlo (molto probabilmente) allora avrai più l'idea che l'APK sia valido.

Il servizio eseguirà inoltre la scansione dell'APK con oltre 60 antivirus e ti farà sapere se ritiene che abbia firme simili ai virus già rilevati.


0

Per confrontare i certificati da un file apk sospetto, forse un'idea è quella di scaricare la versione dal Play Store ufficiale sul telefono, fare un backup sul computer e andare nella directory di backup, selezionare il file apk interessato e fare gli stessi controlli. Puoi anche visualizzare i certificati di Google eseguendo il controllo su un'applicazione predefinita del dispositivo (come qualsiasi com.google.android. * Apk)


0

Il modo corretto per verificare un file APK è utilizzare apksigner.

apksigner fa parte degli strumenti di build di Android, pertanto è possibile trovare più versioni installate, una per ogni versione di strumenti di build installata.

Un percorso di esempio all'interno dell'SDK di Android apksignerè:

android-sdk/build-tools/29.0.2/apksigner

Esegui apksigner in questo modo:

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>

Ora hai verificato l'APK, ma non sai ancora se puoi fidarti della persona / organizzazione che ha firmato il file APK. Questo perché su Android le firme APK usano per definizione i certificati autofirmati. Se puoi fidarti di un certificato è quindi una domanda difficile. L'unico modo è verificare le altre app che sono state firmate utilizzando lo stesso certificato.

L'unico modo che conosco per farlo è utilizzare il servizio di scansione di PlayStore androidobservatory.org. Ha un'API per verificare quali app sono state firmate dallo stesso certificato usando il digest SHA-1 del certificato:

Modifica: apkmirror.com consente anche di cercare il digest del certificato. Basta inserire il semplice digest certificato SHA-1 o SHA-256 (senza due punti o spazi) nel campo di ricerca:

In questa pagina puoi vedere tutti gli altri file APK su Google Play Store che sono firmati con lo stesso certificato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.