[FAQ] Ещё раз про подписывание прошивок

Если вы хотите увидеть на нашем сайте ответы на интересующие вас вопросы обо всём, что связано с техникой Apple, операционной системой Mac OS X (и её запуском на PC), пишите нам через форму заявки на обзор или форму обратной связи.

К нам поступил следующий вопрос:

Здравствуйте.

Никак не могу понять как работает
алгоритм подписывания прошивок,
проверка хэша во время прошивки, и что
именно подписывается (прошивка целиком,
root ramdisk, ядро, …)?..

Основной вопрос: почему возможно
прошить девайс кастомной прошивкой,
собранной с помощью pwnage tool или snowbreeze, но
прошить более ранней прошивкой, не имея
SHSH хэша, нельзя? По идее ведь, измененная
прошивка не должна проходить
верификацию на серверах Apple?

Заранее благодарю за ответ. С уважением,
Александр.

Здравствуйте!

Подписывается прошивка целиком, точнее, лежащие внутри неё IMG-образы. Хеш SHSH выписывается активационными серверами Apple на базе следующей информации:

  • ECID — уникальный аппаратный идентификатор каждого устройства
  • версия и билд прошивки, которую вы намерены поставить на устройство

Запрос на получение хеша SHSH отправляется в самом начале прошивания, после того, как файл прошивки распаковывается iTunes. Если версия и билд прошивки соответствуют «разрешённым», то сервер Apple генерирует и высылает хеш SHSH. Если прошивка уже не подписывается, iTunes не получит хеш и выдаст ошибку, гласящую, что устройство нельзя прошить на данную версию iOS.

Прошить девайсы кастомной прошивкой без проверки хешей SHSH нельзя, iTunes всё равно будет требовать проверку подписывания. Кастомные прошивки подписываются серверами Apple точно так же, как и официальные, лишь по той простой причине, что серверам важна только версия прошивки, но никак не её размер и начинка.

Увы, полностью обойти проверку SHSH нереально. Есть теоретическая возможность прошиться на старую версию iOS без хешей, но никто так и не придумал, как потом загрузить устройство, поскольку во всех современных гаджетах Apple загрузка операционной системы блокируется при включении устройства, если не была пройдена проверка SHSH.

Напрашивается разумный вопрос: почему нельзя у новой прошивки заменить внутри версию на старую и получить для неё хеши? Не всё так просто — недостаточно прописать в системных файлах другую версию; эти сведения хранятся внутри прошивки в разных местах, в т.ч. и в зашифрованном виде. Механически скопировать все упоминания о версии из старой прошивки тоже невозможно.

Надеемся, что помогли прояснить ситуацию.

P.S. C Днём Победы вас!