Come posso verificare che un apk Android sia firmato con un certificato di rilascio?


222

Come posso verificare che un apk Android sia firmato con una versione e non con debug cert?


6
Ho scritto una sceneggiatura che convaliderà un apk contro un keystore.
JohnnyLambada,

accetta la risposta se hai il tuo.
Rinkal Bhanderi,

@JohnnyLambada Come posso eseguire il tuo script su Mac?
Aaron Azhari,

1
@JohnnyLambada Come posso eseguire il tuo script?
domenica

@sunil È uno script bash che crea una nuova funzione bash. segui quindi il link e incollalo in un file source thatfile. I commenti nello script spiegano come eseguirlo.
JohnnyLambada,

Risposte:


372

Utilizzare questo comando, (vai a java <jdk <percorso bin nel prompt cmd)

$ jarsigner -verify -verbose -certs my_application.apk

Se vedi "CN = Debug Android", significa che .apk è stato firmato con la chiave di debug generata da Android SDK (significa che non è firmato), altrimenti troverai qualcosa per CN. Per maggiori dettagli, consultare: http://developer.android.com/guide/publishing/app-signing.html


1
Ho ricevuto il messaggio come jar verificato alla fine dell'esecuzione del comando per 2 file apk diff. Quindi sono stato confuso. ma dato che dà CN = "android debug" per 1 apk e diverso per altri apk .got per capire quale 1 è firmato. Grazie.
iRunner,

3
Come si verifica la firma? Utilizzerà le CA affidabili del sistema? O questo è solo uno strumento per verificare l'integrità dei file jar? Grazie
Mostafa Shahverdy,

2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- questo non significa che non sia firmato. Significa quello che hai appena scritto: è firmato con la chiave di debug.
Dmitry Zaytsev,

3
Come possiamo verificare che sia stato firmato con lo stesso file di certificato esatto e non solo uno che ha gli stessi valori per organizzazione, posizione, ecc.?
OlivierM,

1
Grazie. Quindi jarsigner -verify -verbose -certs myapp.apk | grep CN= | lessnon dovremmo vedere "CN = Android Debug".
rpattabi,

70

Usa il comando console:

apksigner verify --print-certs application-development-release.apk

Puoi trovare apksigner in ../sdk/build-tools/24.0.3/apksigner.bat. Solo per strumenti di build v. 24.0.3 e versioni successive.

Leggi anche documenti di Google: https://developer.android.com/studio/command-line/apksigner.html


Ho trovato apksignerin `% LOCALAPPDATA% \ Android \ sdk \ build-tools \ 25.0.3` (e tutte le altre versioni degli strumenti di build che avevo installato)
Jon

2
Si noti che apksignermanca nella versione 26.0.0di build-tools. È monitorato in issuetracker.google.com/issues/62696222 e dovrebbe essere corretto nella prossima versione. La soluzione alternativa fino ad allora è di utilizzare apksignerda 25.0.3.
friederbluemle,

2
Aggiornamento: apksignerè incluso nella versione26.0.1
forresthopkinsa,

Aggiornamento: APKSigner è anche in 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 Credo che lo troverai in tutte le versioni future :)
Kirill Vashilo,

2
per un output dettagliato usare -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo

59

Utilizzare questo comando: (Jarsigner si trova nella cartella bin Java goto java-> jdk-> percorso bin nel prompt cmd)

$ jarsigner -verify my_signed.apk

Se .apk è firmato correttamente, Jarsigner stampa "jar verificato"


13
Questo non è abbastanza buono poiché entrambi gli apk di debug e di rilascio sono firmati forniranno "jar verificato". Controlla i dettagli della risposta di @ Anass.
rpattabi,

Ho provato esattamente questo comando e ho verificato. Quindi, come esperimento, sono entrato nell'APK e ho letteralmente eliminato tutti i file tranne i file sig e manifest e lo ho ancora verificato. Quindi qualcosa è molto sbagliato qui. Tuttavia devo ancora provare la risposta di @ Anass.
orblivion,

39

Il più semplice di tutti:

keytool -list -printcert -jarfile file.apk

Questo utilizza l'app keytool Java integrata e non richiede estrazione o installazione di strumenti di build.


Per chiunque non sia in grado di eseguire keytoolimmediatamente, controlla questo e forse prova ad aggiungere %JAVA_HOME%\binal percorso
TT--

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.