Wie überprüfe ich, ob eine Android-Apk mit einem Release-Zertifikat signiert ist?


222

Wie kann ich überprüfen, ob ein Android-Apk mit einem Release signiert ist und kein Debug-Zertifikat?


6
Ich habe ein Skript geschrieben , das eine apk gegen einen Keystore validiert.
Johnny Lambada

Akzeptiere die Antwort, wenn du deine hast.
Rinkal Bhanderi

@JohnnyLambada Wie kann ich Ihr Skript auf einem Mac ausführen?
Aaron Azhari

1
@JohnnyLambada Wie kann ich Ihr Skript ausführen?
Sunil

@sunil Es ist ein Bash-Skript, das eine neue Bash-Funktion erstellt. Folgen Sie dem Link und fügen Sie ihn dann in eine Datei ein source thatfile. Kommentare im Skript erklären, wie es ausgeführt wird.
Johnny Lambada

Antworten:


372

Verwenden Sie diesen Befehl (gehen Sie in der Eingabeaufforderung cmd zu Java <jdk <bin path).

$ jarsigner -verify -verbose -certs my_application.apk

Wenn "CN = Android Debug" angezeigt wird, bedeutet dies, dass die APK mit dem vom Android SDK generierten Debug-Schlüssel signiert wurde (dh, sie ist nicht signiert). Andernfalls finden Sie etwas für CN. Weitere Informationen finden Sie unter: http://developer.android.com/guide/publishing/app-signing.html


1
Ich habe die Nachricht als jar am Ende der Befehlsausführung für 2 verschiedene apk-Dateien überprüft bekommen. Also wurde verwirrt. aber da es CN = "android debug" für 1 apk gibt und anders für andere apk. muss wissen, welche 1 signiert ist. Danke.
iRunner

3
Wie überprüft dies die Signatur? Wird es die vertrauenswürdigen Zertifizierungsstellen des Systems verwenden? Oder ist dies nur ein Tool, um die Integrität der JAR-Dateien zu überprüfen? Vielen Dank
Mostafa Shahverdy

2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- Dies bedeutet nicht, dass es nicht signiert ist. Es bedeutet, was Sie gerade geschrieben haben - es ist mit dem Debug-Schlüssel signiert.
Dmitry Zaytsev

3
Wie können wir überprüfen, ob es mit derselben genauen Zertifikatdatei signiert wurde und nicht nur mit einer, die zufällig dieselben Werte für Organisation, Standort usw. hat?
OlivierM

1
Vielen Dank. Also jarsigner -verify -verbose -certs myapp.apk | grep CN= | lessund wir sollten nicht "CN = Android Debug" sehen.
Rpattabi

70

Verwenden Sie den Konsolenbefehl:

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

Sie finden apksigner in ../sdk/build-tools/24.0.3/apksigner.bat. Nur für Build-Tools ab Version 24.0.3.

Lesen Sie auch die Google-Dokumente: https://developer.android.com/studio/command-line/apksigner.html


Ich fand apksignerin `% LOCALAPPDATA% \ Android \ sdk \ build-tools \ 25.0.3` (und jeder anderen Build-Tool-Version, die ich installiert hatte)
Jon

2
Beachten Sie, dass dies apksignerin der Version 26.0.0der Build-Tools fehlt . Es wird in issuetracker.google.com/issues/62696222 verfolgt und soll in der nächsten Version behoben werden. Die Abhilfe bis dahin ist die Verwendung apksignervon 25.0.3.
Friederbluemle

2
Update: apksignerist in der Version enthalten26.0.1
forresthopkinsa

Update: APKSigner ist auch in 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 Ich glaube, Sie werden es in allen zukünftigen Versionen finden :)
Kirill Vashilo

2
Für eine ausführliche Ausgabe verwenden Sie -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo

59

Verwenden Sie diesen Befehl: (Jarsigner befindet sich in Ihrem Java-Bin-Ordner. Gehen Sie zu Java-> JDK-> Bin-Pfad in der Cmd-Eingabeaufforderung.)

$ jarsigner -verify my_signed.apk

Wenn die APK-Datei ordnungsgemäß signiert ist, druckt Jarsigner "jar verified".


13
Dies ist nicht gut genug, da sowohl Debug- als auch Release-Apks signiert sind und "jar verified" ergeben. Überprüfen Sie die Details der Antwort von @ Anass.
Rpattabi

Ich habe genau diesen Befehl ausprobiert und er wurde überprüft. Dann ging ich als Experiment in die APK und löschte buchstäblich jede Datei außer den Sig-Dateien und dem Manifest, und es wurde immer noch überprüft. Hier stimmt also etwas nicht. Allerdings habe ich @ Anass 'Antwort noch nicht ausprobiert.
Orblivion

39

Das einfachste von allen:

keytool -list -printcert -jarfile file.apk

Dies verwendet die in Java integrierte Keytool-App und erfordert keine Extraktion oder Installation von Build-Tools.


Für alle, die nicht keytoolsofort laufen können , überprüfen Sie dies und versuchen Sie vielleicht %JAVA_HOME%\bin, dem Pfad
hinzuzufügen

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.