Извлеките исходный сертификат X.509 из подписанного APK или JAR

У меня есть библиотека MD5-хэшей открытых ключей, используемых для подписи различных банок, и отображение их соответствующих хранилищ ключей, которые мы используем для подписи разных APK. То, что я хотел бы сделать, это определить, какое хранилище ключей было использовано для подписания APK, но без использования проб и ошибок. (К сожалению, многие из наших ключей имеют похожие или идентичные DN.)

Мое решение, потому что я знаю, что META-INF / FOO.RSA (или FOO.DSA) содержит сертификат, должен был извлечь сертификат из файла RSA APK и напрямую вычислить хэш MD5. (Я знаю, что сертификат существует, потому что он доступен для запуска приложения для Android, и документация jarsigner говорит мне, что он есть.)

Но я не могу найти какой-либо инструмент, который дает мне фактические байты сертификата. Я могу получить DN и метаданные сертификата, когда я использую jarsigner -verbose -verify -certs my.apk , но это не дает мне байтов.

Извлеките JAR, затем используйте «openssl» для вывода сертификата:

Поэтому, предполагая, что «foo.jar» находится в вашем текущем каталоге, сделайте что-то вроде:

 mkdir temp cd temp jar -xvf ../foo.jar cd META-INF openssl pkcs7 -in FOO.RSA -print_certs -inform DER -out foo.cer 

Hexdump FOO.RSA. Последние n байтов являются самой сигнатурой, где n зависит от длины ключа (например, 1024 бит RSA). Если вы подписываете что-то дважды с тем же ключом, вы можете различать файлы .RSA и видеть, что изменяются только последние n байтов; Статической частью файла является сертификат, а биты, которые изменяются, являются сигнатурой на хэше FOO.sf. Между сертификатом и подписью может быть разделитель, который также необходимо удалить.

Intereting Posts
Плагин IntelliJ Android: подавить генерацию BuildConfig.java или изменить, где она написана? Правильный способ использования сокетов в приложении для Android У меня есть два приложения для Android, можно отправить строку по локальной сети на определенный IP-адрес и другое приложение для приема, но я хочу транслировать строку по локальной сети? Ограничение макета бета-версии 4 – фрагменты не работают Как тренировать tesseract для распознавания только 20 – 30 цифр? Как получить полное разрешение и несжатые данные изображения с камерой Android? OnResume Camera Reinit Black Screen Переустанавливает ли Кэш авторизацию Android 5.1.1 камера по умолчанию возвращает пустое намерение в onActivityResult после захвата изображения Android Design Library: SwipeRefreshLayout не обнаруживает прокрутку поверх CollapsingToolbarLayout Кинжал 2 не действует Что такое «приостановленные» значения в сообщениях журнала GC_CONCURRENT? Анимировать прокрутку Android Studio 2.1.2 и Android 6: ошибка при установке патчей для перезапуска Скрыть ActionBar MenuItems, когда навигационный ящик слайдов для любой суммы