ErikPshat
03.12.2007, 07:20
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Делаем цветной шрифт в прошивках 3.52 М33
Как известно, за цвет шрифов в меню XMB отвечает файл VSHMAIN.PRX, с которым нам и предстоит работать в данной статье.
Наша работа будет производится в 3 этапа:
I) Декриптовка
II) Кастомизация
III) Запаковка с новой криптовкой.
Предисловие (основные понятия)
Как известно, корпорация Sony в файлах прошивок до 2.6 вообще не применяла никакого компрессионного механизма.
Затем, начиная с прошивки 2.7, стал применяться механизм сжатия ZLIB, который с лёгкостью распаковывался и запаковывался.
Но, начиная с версии прошивки 3.10, Sony изменила механизм компрессии и назвала его - RLZ.
С этого момента в процессе кастомизации появились некоторые затруднения. Если распаковывать такие файлы прошивки удавалось, то обратно запаковать никак не получалось, поэтому приходилось назад запаковывать в старый формат ZLIB или вообще не запаковывать, что приводило к значительному увеличению объёма файла.
Что же за такой хитрый формат RLZ ?
Оказалось всё достаточно просто.
Файлы этого формата состоят из двух частей - Заголовка - ~PSP и собственно самого Исполняемого Кода.
1. Заголовoк - ~PSP - это та часть кода, которая содержит технические данные о файле и метод защиты (проверка целостности данных).
Находится в начале файла от 0х0 до 0х14F включительно в 16-ричной системе исчисления и содержит ровно 150 Байт
2. Исполняемый Код - ELF - это самый секрет фирмы.
Находится после Заголовка, начиная от 0х150 включительно и до конца файла.
Как оказалось - это попросту самодостаточный архив GZIP, главная особенность которого - возможность работать с непрерывным потоком данных, упаковывая/распаковывая их «на лету». Такой архив легко можно распаковать и запаковать любым современным архиватором WinRar, 7Zip, ZIP и пр.
Архивный файл GZIP должен иметь расширение .gz на конце после точки.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I. Декриптовка
Декриптовка - это самый лёгкий и быстрый этап.
Для примера я взял файл VSHMAIN.PRX из своей прошивки 3.52 M33-4, который лежит в папке: flash0:\vsh\nodule\vshmain.prx
После установки HEX Workshop (http://rutracker.org/forum/tracker.php?nm=HEX%20Workshop), у вас появиться в контекстном меню при клике правой кнопкой мыши на файле - пункт "Hex Edit with Hex Workshop".
Нажмите правой кнопкой на файле VSHMAIN.PRX, предварительно скопированном из прошивки на компьютер, и выберите в открывшемся контекстном меню этот пункт.
Этот файл откроется в Хекс-редакторе.
http://i001.radikal.ru/0711/05/287385e9e220.pngПо умолчанию в редакторе стоит способ отображения кода в двухбитном режиме, то есть по четыре знака в каждом столбце (по 2 бита). Нам же в данном случае, для удобства лучше будет созерцать код файла в однобитном представлении, так как в дальнейшем нам придётся оперировать 3-хбайтными и 4-хбайтными числами.
Для представления в однобайтном формате, сделайте следующее:
зайдите в меню "Options->Preferences" и на первой вкладке "Layout" в графе "Columns", выберите Group by: 1 (byte) и нажмите кнопку "Применить" и "ОК", как показано на рисунке ниже.
http://i014.radikal.ru/0710/4a/c4cd26843bc1.pngТеперь мы видим числа побитово, то есть попарно по два числа. Один байт - это двухзначное число в 16-ричной системе исчисления от 00 до FF.
http://i019.radikal.ru/0711/92/0722c7c1b8be.pngВозьмите мышкой вертикальную полосу прокрутки справа и покрутите файл вниз и вверх. Обратите внимание на заголовок в начале файла ~PSP в правой части окна программы, о котором я говорил в Предисловии в пункте 1. Так же вы увидите в правом вертикальном столбце, на всём протяжении файла - Абракадабру. Основные приготовления мы сделали, а теперь поехали.
1) Выделите, протянув мышкой, весь небольшой код Заголовка от 0х0 до 0х14F включительно, или до 0х150 не включительно.
Числа 0х0 и 0х150 - это не что иное, как 00000000 и 00000150 в левом вертикальном столбце отсчёта, просто записываются для удобства без лишних нулей спереди. Эти числа так же отображаются в нижней строке окна программы под названием "Offset: XXXXXXXX" при установленном курсоре на определённой позиции.
http://i047.radikal.ru/0711/19/657dea143f0b.pngТеперь нам нужно только удалить выделенный Заголовoк - ~PSP - от 0х0 до 0х14F включительно, чтоб у нас остался только Исполняемый Код - ELF, который начинается сразу после Заголовка - от 0х150 включительно и до конца файла. Как я говорил ранее в Предисловии - это и есть архив GZIP, который впоследствии нам останется распаковать (декриптовать, так сказать :)).
Обратите внимание на области, выделенные красными прямоугольниками:
а) Область EF - это 0х14F. Её мы тоже захватываем.
б) Область 00000150 - её мы уже не трогаем, это начало заархивированного GZIP-файла и это число указывает на порядковый номер первого Байта в этой строке - 1F.
Следующий байт 8B будет иметь порядковый номер (offset) - 00000151 и так далее. Короче расклад понятен?
в) Область Sel: 0x150 bytes - указывает на количество выделенных Байт. Sel от слова Select - Выбор.
2) После того, как мы выделили нужную область - Заголовoк - ~PSP, нужно от неё избавиться, чтоб у нас остался только архивный GZIP-файл.
Нажмите на клавиатуре кнопку "DELETE" (Del), чтобы удалить выделенную область.
Ну вот, от Заголовка мы избавились. У нас остался чистый Исполняемый Код - ELF, упакованный в формат GZIP.
http://i022.radikal.ru/0711/e6/3562b40a8631.png3) Теперь нужно его сохранить.
Выбираем в меню "File->Save As..." и в открывшемся окне сохранения, дописываем в конец названия файла расширение .gz
Cохраняем его с получившимся названием vshmain.prx.gz
http://i037.radikal.ru/0711/b2/c770275070d0.png4) Теперь откройте получившийся архивный файл vshmain.prx.gz любым архиватором, лучше воспользуйтесь его ближайший родствеником - 7Zip (http://www.7-zip.org/).
Извлеките, находящийся в архиве файл vshmain.prx, только желательно под другим названием, чтобы не перепутать потом с оригиналом или не перезаписать случайно оригинальный файл вашей прошивки.
Назовите его лучше так: vshmain_elf.prx. Почему именно ELF, о котором я упоминал так же в самом начале, вы узнаете, если посмотрите на рисунок ниже.
Откройте ваш разархивированный (декриптованный) файл vshmain_elf.prx в Хекс-редакторе и посмотрите на начало кода в правом вертикальном столбце и вы увидите, что заголовок декриптованного файла начинается со слова ELF. Прокрутите файл вниз и понаблюдайте за правым столбцом и вы увидите, что там теперь вместо прежней Абракадабры появились вполне внятные и читабельные слова и всякие пути и расширения. Это говорит нам о том, что мы всё сделали правильно.
http://i025.radikal.ru/0711/54/1af65b7aef94.png http://i021.radikal.ru/0711/96/4ef92f789f16.pngНа этом процедура декриптовки у нас закончилась. Мы получили декриптованный файл, который теперь можно редактировать.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
II. Кастомизация - Изменяем цвет шрифта по месяцам
Продолжение следует...http://www.pspx.ru/forum/showthread.php?t=76183
Делаем цветной шрифт в прошивках 3.52 М33
Как известно, за цвет шрифов в меню XMB отвечает файл VSHMAIN.PRX, с которым нам и предстоит работать в данной статье.
Наша работа будет производится в 3 этапа:
I) Декриптовка
II) Кастомизация
III) Запаковка с новой криптовкой.
Предисловие (основные понятия)
Как известно, корпорация Sony в файлах прошивок до 2.6 вообще не применяла никакого компрессионного механизма.
Затем, начиная с прошивки 2.7, стал применяться механизм сжатия ZLIB, который с лёгкостью распаковывался и запаковывался.
Но, начиная с версии прошивки 3.10, Sony изменила механизм компрессии и назвала его - RLZ.
С этого момента в процессе кастомизации появились некоторые затруднения. Если распаковывать такие файлы прошивки удавалось, то обратно запаковать никак не получалось, поэтому приходилось назад запаковывать в старый формат ZLIB или вообще не запаковывать, что приводило к значительному увеличению объёма файла.
Что же за такой хитрый формат RLZ ?
Оказалось всё достаточно просто.
Файлы этого формата состоят из двух частей - Заголовка - ~PSP и собственно самого Исполняемого Кода.
1. Заголовoк - ~PSP - это та часть кода, которая содержит технические данные о файле и метод защиты (проверка целостности данных).
Находится в начале файла от 0х0 до 0х14F включительно в 16-ричной системе исчисления и содержит ровно 150 Байт
2. Исполняемый Код - ELF - это самый секрет фирмы.
Находится после Заголовка, начиная от 0х150 включительно и до конца файла.
Как оказалось - это попросту самодостаточный архив GZIP, главная особенность которого - возможность работать с непрерывным потоком данных, упаковывая/распаковывая их «на лету». Такой архив легко можно распаковать и запаковать любым современным архиватором WinRar, 7Zip, ZIP и пр.
Архивный файл GZIP должен иметь расширение .gz на конце после точки.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
I. Декриптовка
Декриптовка - это самый лёгкий и быстрый этап.
Для примера я взял файл VSHMAIN.PRX из своей прошивки 3.52 M33-4, который лежит в папке: flash0:\vsh\nodule\vshmain.prx
После установки HEX Workshop (http://rutracker.org/forum/tracker.php?nm=HEX%20Workshop), у вас появиться в контекстном меню при клике правой кнопкой мыши на файле - пункт "Hex Edit with Hex Workshop".
Нажмите правой кнопкой на файле VSHMAIN.PRX, предварительно скопированном из прошивки на компьютер, и выберите в открывшемся контекстном меню этот пункт.
Этот файл откроется в Хекс-редакторе.
http://i001.radikal.ru/0711/05/287385e9e220.pngПо умолчанию в редакторе стоит способ отображения кода в двухбитном режиме, то есть по четыре знака в каждом столбце (по 2 бита). Нам же в данном случае, для удобства лучше будет созерцать код файла в однобитном представлении, так как в дальнейшем нам придётся оперировать 3-хбайтными и 4-хбайтными числами.
Для представления в однобайтном формате, сделайте следующее:
зайдите в меню "Options->Preferences" и на первой вкладке "Layout" в графе "Columns", выберите Group by: 1 (byte) и нажмите кнопку "Применить" и "ОК", как показано на рисунке ниже.
http://i014.radikal.ru/0710/4a/c4cd26843bc1.pngТеперь мы видим числа побитово, то есть попарно по два числа. Один байт - это двухзначное число в 16-ричной системе исчисления от 00 до FF.
http://i019.radikal.ru/0711/92/0722c7c1b8be.pngВозьмите мышкой вертикальную полосу прокрутки справа и покрутите файл вниз и вверх. Обратите внимание на заголовок в начале файла ~PSP в правой части окна программы, о котором я говорил в Предисловии в пункте 1. Так же вы увидите в правом вертикальном столбце, на всём протяжении файла - Абракадабру. Основные приготовления мы сделали, а теперь поехали.
1) Выделите, протянув мышкой, весь небольшой код Заголовка от 0х0 до 0х14F включительно, или до 0х150 не включительно.
Числа 0х0 и 0х150 - это не что иное, как 00000000 и 00000150 в левом вертикальном столбце отсчёта, просто записываются для удобства без лишних нулей спереди. Эти числа так же отображаются в нижней строке окна программы под названием "Offset: XXXXXXXX" при установленном курсоре на определённой позиции.
http://i047.radikal.ru/0711/19/657dea143f0b.pngТеперь нам нужно только удалить выделенный Заголовoк - ~PSP - от 0х0 до 0х14F включительно, чтоб у нас остался только Исполняемый Код - ELF, который начинается сразу после Заголовка - от 0х150 включительно и до конца файла. Как я говорил ранее в Предисловии - это и есть архив GZIP, который впоследствии нам останется распаковать (декриптовать, так сказать :)).
Обратите внимание на области, выделенные красными прямоугольниками:
а) Область EF - это 0х14F. Её мы тоже захватываем.
б) Область 00000150 - её мы уже не трогаем, это начало заархивированного GZIP-файла и это число указывает на порядковый номер первого Байта в этой строке - 1F.
Следующий байт 8B будет иметь порядковый номер (offset) - 00000151 и так далее. Короче расклад понятен?
в) Область Sel: 0x150 bytes - указывает на количество выделенных Байт. Sel от слова Select - Выбор.
2) После того, как мы выделили нужную область - Заголовoк - ~PSP, нужно от неё избавиться, чтоб у нас остался только архивный GZIP-файл.
Нажмите на клавиатуре кнопку "DELETE" (Del), чтобы удалить выделенную область.
Ну вот, от Заголовка мы избавились. У нас остался чистый Исполняемый Код - ELF, упакованный в формат GZIP.
http://i022.radikal.ru/0711/e6/3562b40a8631.png3) Теперь нужно его сохранить.
Выбираем в меню "File->Save As..." и в открывшемся окне сохранения, дописываем в конец названия файла расширение .gz
Cохраняем его с получившимся названием vshmain.prx.gz
http://i037.radikal.ru/0711/b2/c770275070d0.png4) Теперь откройте получившийся архивный файл vshmain.prx.gz любым архиватором, лучше воспользуйтесь его ближайший родствеником - 7Zip (http://www.7-zip.org/).
Извлеките, находящийся в архиве файл vshmain.prx, только желательно под другим названием, чтобы не перепутать потом с оригиналом или не перезаписать случайно оригинальный файл вашей прошивки.
Назовите его лучше так: vshmain_elf.prx. Почему именно ELF, о котором я упоминал так же в самом начале, вы узнаете, если посмотрите на рисунок ниже.
Откройте ваш разархивированный (декриптованный) файл vshmain_elf.prx в Хекс-редакторе и посмотрите на начало кода в правом вертикальном столбце и вы увидите, что заголовок декриптованного файла начинается со слова ELF. Прокрутите файл вниз и понаблюдайте за правым столбцом и вы увидите, что там теперь вместо прежней Абракадабры появились вполне внятные и читабельные слова и всякие пути и расширения. Это говорит нам о том, что мы всё сделали правильно.
http://i025.radikal.ru/0711/54/1af65b7aef94.png http://i021.radikal.ru/0711/96/4ef92f789f16.pngНа этом процедура декриптовки у нас закончилась. Мы получили декриптованный файл, который теперь можно редактировать.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
II. Кастомизация - Изменяем цвет шрифта по месяцам
Продолжение следует...http://www.pspx.ru/forum/showthread.php?t=76183