Як я можу перевірити, що Android apk підписаний сертифікатом випуску?


222

Як я можу перевірити, що Android apk підписаний релізом, а не cert-налагодження?


6
Я написав сценарій, який перевірить apk проти keystore.
JohnnyLambada

прийміть відповідь, якщо у вас є своя.
Рінкал Бхандері

@JohnnyLambada Як я можу запустити ваш сценарій у Mac?
Аарон Ажарі

1
@JohnnyLambada Як я можу запустити ваш сценарій?
суніль

@sunil Це сценарій bash, який створює нову функцію bash. перейдіть за посиланням і вставте його у файл source thatfile. Коментарі в сценарії пояснюють, як його запустити.
JohnnyLambada

Відповіді:


372

Скористайтеся цією командою, (перейдіть до java <jdk <bin path in cmd)

$ jarsigner -verify -verbose -certs my_application.apk

Якщо ви бачите "CN = Android Debug", це означає, що .apk був підписаний ключем налагодження, згенерованим Android SDK (значить, він не підписаний), інакше ви знайдете щось для CN. Детальніше див. На веб-сторінці: http://developer.android.com/guide/publishing/app-signing.html


1
Я отримав повідомлення як перевірений jar в кінці виконання команди для 2-х різних apk файлів. Тому заплутався. але оскільки це дає CN = "андроїд-налагодження" на 1 apk і відрізняється від інших apk .goto knw, який 1 підписано. Дякую.
iRunner

3
Як це підтверджує підпис? Чи використовуватиме він довірені ЦО системи? Або це лише інструмент для перевірки цілісності файлів jar? Дякую
Мостафа Шахверді,

2
this means the .apk was signed with the debug key generated by the Android SDK (means it is unsigned)- це не означає, що він не підписаний. Це означає, що ви щойно написали - це підписано ключем налагодження.
Дмитро Зайцев

3
Як ми могли перевірити, чи він підписаний з тим самим точним файлом сертифікатів, а не лише одним, який має однакові значення для організації, місця розташування тощо?
Олів'єМ

1
Дякую. Тож jarsigner -verify -verbose -certs myapp.apk | grep CN= | lessі нам не слід бачити "CN = Android Debug".
рпаттабі

70

Використовуйте команду консолі:

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

Ви можете знайти apksigner у ../sdk/build-tools/24.0.3/apksigner.bat. Лише для інструментів збирання версії 24.0.3 і новіших.

Читайте також документи Google: https://developer.android.com/studio/command-line/apksigner.html


Я знайшов apksignerв `% LOCALAPPDATA% \ Android \ SDK \ Build-Tools \ 25.0.3` (і всі інші збірки інструментів версії я встановив)
Jon

2
Зауважте, що apksignerу версії 26.0.0build-інструментів відсутній . Він відслідковується в issueetracker.google.com/isissue/62696222 і повинен бути виправлений у наступній версії. Щоб обійти цю проблему до тих пір, щоб використовувати apksignerз 25.0.3.
friederbluemle

2
Оновлення: apksignerвключено у версію26.0.1
forresthopkinsa

Оновлення: APKSigner також в 26.0.2, 26.0.3, 27.0.0, 27.0.1, 27.0.2 Я вірю, що ви знайдете його у всіх майбутніх випусках :)
Кирило Василь

2
для багатослівного виводу використовуйте -v:./apksigner verify --print-certs -v ~/Downloads/MyAppHere.apk
Tilo

59

Скористайтеся цією командою: (Jarsigner знаходиться у вашій папці Java goto java-> jdk-> bin path у cmd запиті)

$ jarsigner -verify my_signed.apk

Якщо файл .apk підписаний належним чином, Jarsigner друкує "перевірену банку"


13
Це недостатньо добре, оскільки підписані додатки для налагодження та випуску дадуть "jar перевірено". Перевірте деталі відповіді @ Anass.
rpattabi

Я спробував саме цю команду, і вона перевірена. Потім в якості експерименту я ввійшов до APK і видалив буквально кожен файл, окрім сиг-файлів та маніфесту, і він все-таки перевірився. Так що тут щось не так. Однак мені ще потрібно спробувати відповідь @ Анасса.
orblivion

39

Найпростіший з усіх:

keytool -list -printcert -jarfile file.apk

Для цього використовується вбудований додаток Java Keytool і не вимагає вилучення чи встановлення будь-яких інструментів збирання.


Для тих, хто не може працювати keytoolвідразу, перевірте це і, можливо, спробуйте додати %JAVA_HOME%\binшлях
TT--

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.