Модель консоли: PSP-1004
Прошивка: 6.60 PROMOD
Другие консоли: iPad 3 WiFi
Регистрация: 18.12.2006
Адрес: Москва
Возраст: 57
Сообщений: 46,675
Вы сказали Спасибо: 27,300
Поблагодарили 42,821 раз(а) в 12,237 сообщениях
Сила репутации: 10Репутация: 42016 
(репутация неоспорима)
|
Полный [FAQ] Как восстановить испорченные ROS0 и ROS1 в дампе!
[FAQ] Как восстановить испорченные ROS0 и ROS1 в дампе! - Давайте сначала определимся, что же такое ROS0 и ROS1?
- Это такие 2 секции, идущие одна за другой, каждая из которых содержит ядро прошивки CORE_OS, т.е. все загрузочные модули SCE ядра ОС прошивки.
- Все эти модули ядра вы можете найти в любом обновлении прошивки PS3UPDAT.PUP, которые при первом проходе упакованы в архиве update_files.tar, а при втором проходе - в шифрованном файле CORE_OS_PACKAGE.pkg, впоследствии пакет дешифруется и из него извлекаются все эти модули по отдельности. Увидеть пакет и все модули по отдельности, вы можете, распаковав этот файл обновления прошивки с помощью PS3GameExtractor или утилитой FirmwareExtractor из вложения этой темы.
- Эти секции ROS0 и ROS1 содержат каждая только модули ядра Core OS прошивки, но самих файлов прошивки она не содержит.
- Особо важное стоит заметить, это то, что секция ROS0 содержит версию и все модули ядра именно той прошивки, которая на данный момент установлена на PS3. А вот следующая секция ROS1 содержит версию и все модули ядра той прошивки, которая была установлена до обновления! Но, если установить одну и ту же прошивку дважды, тогда обе секции, и ROS0, и ROS1 будут абсолютно идентичными!!! Думаю вы догадываетесь почему так происходит, потому что, устанавливая первый раз прошивку, в секции ROS1 запишется версия и модули той прошивки, с которой производилось обновление, а при повторной установке той же прошивки, в секцию ROS1 запишется версия и модули ядра предыдущей прошивки, установленной при первой установке, т.е. этой самой ))). То есть, обе секции будут содержать одну и ту же версию и одни и те же модули ядра прошивки, они будут идентичными даже по MD5. Поэтому, при патчинге испорченных дампов с испорченной любой из этих двух секций, программе PS3DumpChecker достаточно указать только одну секцию и она автоматически восстановит точные копии в этих двух секциях ROS0 и ROS1. Собственно вот для чего я вёл такой долгий диалог в этом блоке инструкции.
Далее, я вам буду показывать всё на картинках в шестнадцатеричном редакторе, ибо без него никак.
Для примера я взял профессиональный и мой любимый Hex Workshop - скачайте и установите его по ссылке (потребуется перезагрузка).
Рассказывать про его использование и про 16-ричные числа я здесь не буду, т.к. в теме по ссылке, вы можете об этом почитать.
- Какой дамп нам понадобится для восстановления ROS0 и ROS1?
По поводу дампа NAND смотрите позиции и размер секции на этом видео.
Ниже приведены данные для дампов NOR:
- Для восстановления такого испорченного дампа, нам понадобится дамп от той же версии прошивки что у вас, т.к. в росах записана версия прошивки и все шифрованные модули OS, содержащие так же версию прошивки, для которой предназначены. А полный дамп восстановления содержит ведь не только росы, но и все файлы прошивки, расположенные отдельно в других секциях дампа, а файлы одной прошивки не смогут корректно работать с ядром в росах от другой версии прошивки. Такой дамп вы можете подобрать в теме с коллекцией таких дампов: Дампы Flash-памяти PS3
- Я взял дамп под 4.83 от такой же прошивки 4.83: bkpps3.bin - Slim CECH-2008A (DYN-001) 4.83 (заведомо здоровый дамп).
- Чтобы достать росы, для начала нам понадобится дамп чипа флеш-памяти консоли PS3, а затем из дампа мы можем вытащить эти росы.
- Нам подойдёт любой дамп - программный в формате flash.hex или аппаратный, снятый программатором E3 Flasher в формате bkpps3.bin.
- По сути и по содержанию это одни и те же форматы дампов с полным содержимым флеш-памяти консоли. Различие между ними кроется лишь в одном, что в дампах от E3 Flasher каждая пара байт перевёрнуты задом наперёд, т.е. в формате Little Endian 16-бит. Это такая особенность программатора. Если учесть, что один байт - это 8 бит, значит 16 бит - это 2 байта. А байт - это двузначное 16-ричное число от 00 по FF. Таким образом, для примера, вот эти 4 байта 00 01 02 AB в обычном читабельном формате Big Endian 16-бит будут в формате Little Endian 16-бит каждые 2 байта перевёрнуты задом наперёд вот так: 01 00 AB 02
- Если у нас есть программный дамп flash.hex, тогда с ним ничего делать не надо, а вот если у нас аппаратный дамп от E3 Flasher в формате bkpps3.bin, тогда нам его нужно будет привести в читабельный вид, то есть, реверснуть. Вот так он выглядит в хексе, текст справа в текстовом блоке неузнаваем и нечитаем: это отмотав чуток от начала c позиции 0x400
1. bkpps3.bin.png
- Для реверса аппаратного дампа имеется утилита FlowRebuilder, запускаем её (для Progskeet и Teensy реверс делать не надо).
- Из раскрывающегося списка Operation выбираем Byte reverse a dump
- В поле Select the input Dump File указываем через проводник путь к дампу bkpps3.bin
- Нажимаем внизу на широкую кнопку Execute Operation, он сконвертируется и сохраниться как bkpps3.swap.bin
2. FlowRebuilder.png
- Теперь наш дамп реверснулся и приобрёл читабельный и узнаваемый вид со знакомыми нам выражениями:
asecure_loader, eEID, cISD, cCSD, trvk_prg и так далее...
3. bkpps3.swap.bin.png
- Как нам найти эти росы и где вообще их можно достать?
- Как раз в той же области, почти в самом начале файле дампа, начиная от позиции 0x400 мы увидим весь список перечисляемых секций, как на скриншоте выше, где секции ROS0 и ROS1 идут по списку предпоследними одна за другой, смотрите скриншоты ниже.
- Структура секций простая. В позиции 0x400 идёт Header (заголовок всех секций) из 16 байт - это ровно одна строка кода. А потом, перед названием каждой секции прописана её позиция и размер, отсчёт идёт от позиции 0x400, смотрите на примере секций ros0 и ros1:
4. Offset and Size ros0-ros1.png - Как мы видим, позиция секции ros0 - 0x000BFC00, размер - 0x00700000
- Как мы видим, позиция секции ros1 - 0x007BFC00, размер - 0x00700000
- Теперь ставим курсор в позицию 0x400 (все нули спереди не считаются, можно записать так 0x00000400, как мы видим слева в столбике нумерации первого байта в стоке, указатель 0x перед числом указывает, что речь идёт о 16-ричном числе, а если написать так - 400 или так - 00000400, то мы бы просто подумали про число четыреста, хотя на самом деле 0x400 - это совсем не 400, а 1024)
- В меню Edit -> Goto... вставляем позицию 000BFC00 в HEX и указываем горошком Current Position (от текущей позиции) и нажимаем Go
5. Goto.png
- Попадаем по адресу 0x000C0000 с учётом прыжка 0x000BFC00 с отсчётом от смещения 0x400.
6. ROS0 offset.png
- Нажимаем на клавиатуре Shift + Home - у нас выделится весь код от курсора до начала файла.
- Нажимаем клавишу Delete - удаляем всё выделенное начало. Теперь позиция 0x000C0000 у нас стала нулевой позицией, т.е. началом файла.
- Теперь нам нужно отделить размер - 0x00700000.
- Снова так же ставим курсор в начало, идём в меню Edit -> Goto..., вставляем позицию 00700000 в HEX и указываем горошком Current Position (от текущей позиции) и нажимаем Go
- Попадаем в позицию 0x00700000 по указанному размеру файла.
7. ROS0 end.png
- Как видим, схожая картина как на предыдущем скрине, только позиция другая. Отсюда начинается аналогичная следующая секция ROS1, но нам она не нужна, т.к. при патче испорченного своего дампа, эта секция и так продублируется.
- На клавиатуре нажимаем Shift + End - у нас выделится всё от курсора до конца файла.
- Нажимаем клавишу Delete - удалится весь выделенный хвост файла.
- Вот у нас уже в HEX-редакторе осталась полная секция ROS0, но нам она полная не нужна...
- Первые 16 байт - вся первая строка секции ROS0 - это Header (заголовок) секции, который не учитывается, поэтому выделяем мышкой всю первую строку и удаляем. Теперь начало кода начинается с 00 00 00 01 - это метка начала.
- Теперь нажимаем клавишу End и попадаем в конец файла, там видим последнюю строчку FF - 16 раз, так же выделяем её и удаляем.
- Вот теперь у нас чистый ROS0, нажимем в меню File -> Save As... и сохраняем как ROS0.
- Внизу редактора мы должны увидеть размер файла ровно 7340000 байт
- Патчим свой родной BAD-дамп с испорченными росами
- Запускаем PS3DumpChecker и кидаем мышкой туда свой испорченный дамп.
8. PS3DumpChecker BAD.png
- Нажимаем в левом верхнем углу иконку гаечного ключа.
- Ставим галочку на Use embedded patcher и Use Custom ROS Patch, указываем путь к нашему файлу ROS0.
- Проставляем галочки на Enable force patching и Restore ROS headers
- Нажимаем Save
9. PS3DumpChecker Patch.png
- Теперь у нас стала активной наверху кнопка Force Patch - жмём её, соглашаемся на предупреждения.
- Рядом с дампом создастся новый файл bkpps3.swap_patched.bin, кидаем его снова в окно PS3DumpChecker для проверки и должны увидеть такую картину:
10. PS3DumpChecker OK.png
- Отказываемся от предложения пропатчить дамп, т.к. мы его уже вручную пропатчили и забираем исправленный ОК дамп bkpps3.swap_patched.bin. На будущее, снимите в настройках гаечного ключа галочку "Enable auto patch", если вы не собираетесь ставить на поток патчинг сотен дампов этим ROS .
- Чтобы привести swap-дамп для прошивания через E3 Flasher вам необходимо обратно реверснуть этот дамп с помощью FlowRebuilder.
- Progskeet и Teensy, как и софтовый дампер, снимает и записывает дамп в обычном формате, для них реверс делать не надо.
- Удачи!
Дополнения к инструкции: Инструкция предназначена для объяснения некоторых вещей, происходящих в прошивке, что откуда и из чего вытекает, и целенаправленно вас обучает по использованию такого мощного хакерского инструмента как Hex Workshop. - 1-ый совет - так как вы уже являетесь обладателем Hex Workshop, чтобы открыть любой файл в редакторе, вам не обязательно искать ярлык для его запуска, а затем в нём искать через проводник нужный файл и открывать. Достаточно нажать правой кнопкой мыши по любому файлу и выбрать в контекстном меню пункт Hex Edit with Hex Workshop v6.8
- 2-ой совет - вам не обязателен FlowRebuilder, у вас же есть Hex Workshop.
Открываем файл дампа bkpps3.bin, идём в меню Tools -> Operations -> Byte Flip..., в открывшемся окошке выбираем из раскрывающегося списка 16 Bit Unsigned Short (реверс по 2 байта) и жмём ОК . Правда на больших файлах выделяется много кэш-памяти, поэтому процесс реверса может быть затяжным и программа может сделать вид как-будто зависла, нужно просто немножечко подождать.
- 3-ий совет - если вам лень выполнять все эти пункты инструкции, тогда вам достаточно дочитать до конца пункта I.b., где написано про FirmwareExtractor, которым вы можете распаковать любую официальную прошивку, зайти в папку Part3 и забрать файл CORE_OS_PACKAGE - это и есть ROS0 в чистом виде, размером 6,99 МБ (7*340*000 байт) .
- В папке Part4_enc\CORE_OS вы увидите распакованное содержимое всех модулей ROS0 в шифрованном виде - это так к слову, это вам не надо.
- В папке Part5_dec\CORE_OS эти же модули, только в декриптованном виде ELF - это так к слову, это вам не надо.
Имейте в виду, что в прошивке все файлы находятся в шифрованном виде!
В примере Выше показан дамп от NOR (16 мб), для NAND в принципе тоже самое, только позиция начала в другом месте, подробнее в этом видео.
Программа для восстановления ros
Последний раз редактировалось in1975; 22.01.2024 в 12:22.
|