Полный [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. Собственно вот для чего я вёл такой долгий диалог в этом блоке инструкции.
Список модулей ядра в каждой из секций ROS0 и ROS1:
creserved_0
sdk_version
spu_pkg_rvk_verifier.self
spu_token_processor.self
spu_utoken_processor.self
sc_iso.self
aim_spu_module.self
spp_verifier.self
mc_iso_spu_module.self
me_iso_spu_module.self
sv_iso_spu_module.self
sb_iso_spu_module.self
me_iso_for_ps2emu.self
sv_iso_for_ps2emu.self
default.spp
lv1.self
lv0
lv0.2
lv2_kernel.self
eurus_fw.bin
emer_init.self
hdd_copy.self
manu_info_spu_module.self
prog.srvk
pkg.srvk
Далее, я вам буду показывать всё на картинках в шестнадцатеричном редакторе, ибо без него никак.
Для примера я взял профессиональный и мой любимый 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
Теперь наш дамп реверснулся и приобрёл читабельный и узнаваемый вид со знакомыми нам выражениями: asecure_loader, eEID, cISD, cCSD, trvk_prg и так далее...
Как нам найти эти росы и где вообще их можно достать?
Как раз в той же области, почти в самом начале файле дампа, начиная от позиции 0x400 мы увидим весь список перечисляемых секций, как на скриншоте выше, где секции ROS0 и ROS1 идут по списку предпоследними одна за другой, смотрите скриншоты ниже.
Структура секций простая. В позиции 0x400 идёт Header (заголовок всех секций) из 16 байт - это ровно одна строка кода. А потом, перед названием каждой секции прописана её позиция и размер, отсчёт идёт от позиции 0x400, смотрите на примере секций ros0 и ros1:
Как мы видим, позиция секции ros0 - 0x000BFC00, размер - 0x00700000
Как мы видим, позиция секции ros1 - 0x007BFC00, размер - 0x00700000
Теперь ставим курсор в позицию 0x400 (все нули спереди не считаются, можно записать так 0x00000400, как мы видим слева в столбике нумерации первого байта в стоке, указатель 0x перед числом указывает, что речь идёт о 16-ричном числе, а если написать так - 400 или так - 00000400, то мы бы просто подумали про число четыреста, хотя на самом деле 0x400 - это совсем не 400, а 1024)
В меню Edit -> Goto... вставляем позицию 000BFC00 в HEX и указываем горошком Current Position (от текущей позиции) и нажимаем Go
Нажимаем на клавиатуре Shift + Home - у нас выделится весь код от курсора до начала файла.
Нажимаем клавишу Delete - удаляем всё выделенное начало. Теперь позиция 0x000C0000 у нас стала нулевой позицией, т.е. началом файла.
Теперь нам нужно отделить размер - 0x00700000.
Снова так же ставим курсор в начало, идём в меню Edit -> Goto..., вставляем позицию 00700000 в HEX и указываем горошком Current Position (от текущей позиции) и нажимаем Go
Попадаем в позицию 0x00700000 по указанному размеру файла.
Как видим, схожая картина как на предыдущем скрине, только позиция другая. Отсюда начинается аналогичная следующая секция ROS1, но нам она не нужна, т.к. при патче испорченного своего дампа, эта секция и так продублируется.
На клавиатуре нажимаем Shift + End - у нас выделится всё от курсора до конца файла.
Нажимаем клавишу Delete - удалится весь выделенный хвост файла.
Вот у нас уже в HEX-редакторе осталась полная секция ROS0, но нам она полная не нужна...
Первые 16 байт - вся первая строка секции ROS0 - это Header (заголовок) секции, который не учитывается, поэтому выделяем мышкой всю первую строку и удаляем. Теперь начало кода начинается с 00 00 00 01 - это метка начала.
Теперь нажимаем клавишу End и попадаем в конец файла, там видим последнюю строчку FF - 16 раз, так же выделяем её и удаляем.
Вот теперь у нас чистый ROS0, нажимем в меню File -> Save As... и сохраняем как ROS0.
Внизу редактора мы должны увидеть размер файла ровно 7340000 байт
Патчим свой родной BAD-дамп с испорченными росами
Запускаем PS3DumpChecker и кидаем мышкой туда свой испорченный дамп.
Отказываемся от предложения пропатчить дамп, т.к. мы его уже вручную пропатчили и забираем исправленный ОК дамп 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 в принципе тоже самое, только позиция начала в другом месте, подробнее в этом видео.