08 марта 2012

Подписывание apk-пакетов и ftf-прошивок.



APK-пакет, из которого ставятся программы для Android и FTF-пакеты, в которых распространяются прошивки для Android-устройств представляют собой обычные zip-архивы с набором файлов. Их подписывание заключается в генерировании специального хеша для каждого файла внутри с помощью специального ключа. Все хеши сводятся в специальный файл манифеста внутри папки "META-INF".
В интернете можно найти множество программ, которые автоматизируют процесс до нажатия нескольких кнопок. В данном посте я расскажу самый аскетичный способ подписывания с помощью собственного ключа, который изготовим в процессе.

Подготовим инструменты:

JRE необходимо для запуска программы SignAPK и обычно уже установлено в системе.
Для начала загружаем и устанавливаем OpenSSL. Этот набор нам нужен, чтобы создать свой собственный ключ для подписи. Для этого переходим в папку "%openssl%\bin" и начинаем командовать.
1) Генерируем ключ длиной 1024 бита.
openssl genrsa -out key.pem 1024
2) Создаем запрос для сертификата по ключу.
openssl req -new -key key.pem -out request.pemПрограмма запросит множество данных. Вводить их можно что угодно, но в пределах допустимого.
3) Генерируем по сертификату закрытый ключ.
openssl x509 -req -days 9999 -in request.pem -signkey key.pem -out certificate.pem
4) Генерируем открытый ключ.
openssl pkcs8 -topk8 -outform DER -in key.pem -inform PEM -out key.pk8 -nocrypt

У нас появилась горсть файлов:
certificate.pem
key.pem
key.pk8
request.pem

Теперь можно заниматься подписыванием. Для этого возьмем например файл прошивки с baseband версии 66 для WT19i с именем "WT19i_4.0.2.A.0.69_baseband.ftf", все наши сертификаты и ключи b программу "signapk.jar". Положим всё это одну папку и в ней же скомандуем:
java -jar signapk.jar certificate.pem key.pk8 WT19i_4.0.2.A.0.69_baseband.ftf WT19i_4.0.2.A.0.69_baseband.signed.ftf
В итоге получится подписанный файл "WT19i_4.0.2.A.0.69_baseband.signed.ftf".