| 
 
  
			
Модель консоли: PSP-1004 Прошивка: 6.60 PROMOD Другие консоли: iPad 3 WiFi Регистрация: 18.12.2006 Адрес: Москва Возраст: 58 
					Сообщений: 47,758
				 Вы сказали Спасибо: 27,999 
		
			
				Поблагодарили 43,800 раз(а) в 12,399 сообщениях
			
		
	 Сила репутации: 10 Репутация: 42991 
					(репутация неоспорима)
      | 
				 Полный [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.
 
 |