Дёрнуло меня попробовать jailbreak моего iPhone 3Gs, на котором стоит iOS 4.0. Для этого я использовал PwnageTool 4.01, внимательно прочитав все предупреждения разработчиков. Благо в моём 3Gs стоит старый BootROM (это проверяется по 4-й и 5-й цифре серийного номера, если там стоит число 40 или меньше, то всё в порядке).

Поясню - jailbreak я не использую (тем более с целью "бесплатной" установки софта), но ориентироваться в теме мне интересно, поэтому периодически я и провожу такие эксперименты. Возможно это больше психологический момент, но мне кажется, что на взломанном iPhone система ведёт себя менее плавно, появляются странные лаги. Надолго меня не хватает, и я через пару дней возвращаюсь на официальную прошивку.

Как раз из-за любви к таким экспериментам я и готов переплатить за отсутствие привязки к оператору.

Итак, запустил процесс по-накатанному. Но когда дошло до восстановления из подготовленного образа, то тут начались проблемы. На телефоне светился значок необходимости подключения к iTunes, но сам iTunes бесконечно долго находился в состоянии "Preparing your iPhone for restore".

Продвинуться за эту стадию мне не удавалось. Хуже того, мне не удавалось восстановить официальную версию 4.0, iPhone несмотря на попытки перезагрузки с различными вариантами нажатых клавиш продолжал находиться в Restore Mode, а iTunes упорно не хотел ничего восстанавливать.

Перепробовал и запуск на разных машинах, и восстановление с разными версиями iTunes (9.1 и 9.2), и переустановку iTunes, и пытался восстановить из Organizer'а XCode (он вылетал аварийно на двух Маках), и пытался вернтуться на 3.1.3 (получал ответ, что я "is not eligible to use this version").

Всё было безрезультатно. Один раз из-за сбоя iTunes (выдался лог в Apple Script Editor) произошло чудо - iPhone вышел из DFU и загрузился. Но я решил добить jailbreak, и загнал его обратно. И снова продолжились пляски, но теперь iTunes не сбоил и я практически остался без телефона...

В процессе поиска в Интернет вариантов решений я наткнулся на статью "Downgrade iOS 4.0 to iOS 3.1.3 iPhone Firmware".

Мне понадобилась утилита iRecovery, для работы которой нужен libusb.

Запустил iRecovery:

$ ./iRecovery -s
iRecovery - Recovery Utility for 0x1281 and WTF.
by wEsTbAeR-- and Tom3q
...
(Recovery) iPhone$

Выполнил команды:

setenv auto-boot true
saveenv
fsboot
exit

Отключил телефон от Мака и рестартовал его нажатием Power и Home (отпустил их, как только появилось Apple logo).

Ура - iPhone загрузился. Спокойно вздохнул и отложил попытки jailbreak на какое-то время.

Зачем я всё это описал - чтобы в подобной ситуации вы вспомнили об iRecovery.

Update 02.07.2010: только что испытал утилиту RecBoot - она выводит iPhone из Recovery Mode одним нажатием на кнопку (нужно запустить "RecBoot Exit Only").