Что значит декриптованная прошивка

Что значит декриптованная прошивка

Чат Аркады Магазин Форум
PSPx форум > Sony PlayStation > Sony PSP > Софт для PSP > Русификация игр и софта для PSP
Декриптовка — Русификация — Запаковка

Русификация игр и софта для PSP Здесь выкладываем локализации всего, что связано с PSP
Страница 1 из 8 1 2 3 4 5 > Последняя »

Декриптуем, русифицируем и обратно пакуем

на примере RECOVERY.PRX

Решил довести начатое почти год назад и не доведённое до конца дело: http://www.pspx.ru/forum/showthread.php?t=59657

Данным методом, о котором пойдёт речь ниже, запакованы все кастомные файлы кастомной прошивки:

  • kd
    • galaxy.prx
    • idcanager.prx
    • march33.prx
    • popcorn.prx
    • systemctrl.prx
    • usbdevice.prx
    • vshctrl.prx

  • vsh/module
    • recovery.prx
    • satelit.prx

А так-же, этим способом можно распаковывать и запаковывать любые кастомные файлы PRX, файлы тем, программ и игр Homebrew и т.п..
После успешного усвоения данного урока, у вас на декриптовку будут уходить считанные секунды.
Итак, начнём!
Наша работа будет производится в 3 этапа:

  • I) Декриптовка.
  • II) Русификация.
  • III) Запаковка с новой криптовкой.

PSP и собственно самого Исполняемого Кода ELF .

    «Заголовoк

PSP » — это та часть кода, которая содержит технические данные о файле и метод защиты (проверка целостности данных). Находится в начале файла от 0х00 до 0х14F включительно в 16-ричной системе исчисления и содержит ровно 0х150 Байт (336 байт)

  • Примечание: когда перед цифрами пишем или после символ h — имеется в виду шестнадцатеричное число.
    Например 0х150 либо 150h байт в 16-ричной системе = 336 байт в десятичной.

  • «Исполняемый Код ELF » — находится после Заголовка, начиная от 0х150 включительно и до конца файла. Как оказалось — это попросту самодостаточный архив GZIP . Такой архив легко можно распаковать любым современным архиватором WinRar, 7Zip, ZIP и пр.
    Архивный файл GZIP должен иметь расширение .gz на конце, после точки.
  • Декриптовка — это самый лёгкий и быстрый этап.

    Для примера я взял файл recovery.prx из flash0 своей прошивки, который лежит в папке: flash0:/vsh/module/.

    Вам понадобится Хекс-редактор, после установки которого, у вас появиться в контекстном меню при клике правой кнопкой мыши на файле — пункт «Hex Edit with Hex Workshop«.

      Нажмите правой кнопкой на файле recovery.prx, предварительно скопированном из прошивки на компьютер и выберите в открывшемся контекстном меню этот пункт «Hex Edit with Hex Workshop«. Этот файл откроется в Хекс-редакторе.

    PSP — это та часть кода, которая содержит технические данные о файле и метод защиты (проверка целостности данных).
    Находится в начале файла от 0х00 до 0х14F включительно в 16-ричной системе исчисления и содержит ровно 0x150 Байт

    05.11.2008, 18:07 Сообщение: #1 (735299)

    Здесь, как раз, вы этот заголовок и видите. Он выделен чёрным цветом с красной окантовкой и составляет ровно 0x150 байт, о чём свидетельствуют цифры внизу, в выделенной красным рамке (Sel от слова Select — выбрано, выделено):

    PSP», выделенного на скрине выше. Чем мы и займёмся далее.

    Ставим курсор в начало строки 0х150. Число 0х150 — это не что иное, как 00000150 в левом вертикальном столбце отсчёта, просто записываются, для удобства, без лишних нулей спереди. Эта цифра так же отображается в нижней строке окна программы под названием «Caret: 00000150» и указывает на позицию, где находится курсор, как показано на рисунке ниже:

    Нажмите сочетание клавиш CTRL + C — выделенная область скопируется в буфер обмена.

    Нажмите в верхнем меню «File->New«. У вас создасться новый пустой документ:

    После сохранения, код в хекс-редакторе изменится с красного на чёрный. Теперь вы можете совсем закрыть хекс-редактор и перейти в папку с сохранённым только-что GZIP-архивом.

    Разархивируйте полученный архив любым архиватором. Вы получите файл «recovery«, но без всякого расширения. Нажмите на файле правой кнопкой мыши и выберите из раскрывшегося контекстного меню пункт «Переименовать«. Добавьте расширение «.prx» к названию файла «recovery» и нажмите Enter. Правда можно было обойтись с переименованием, если бы вы сразу сохраняли файл под названием «recovery.prx.gz«, тогда он уже лежал бы в архиве с нужным расширением.
    Но мне просто захотелось усложнить вам задачу ))).

    Всё, декриптованный файл «recovery.prx» у вас готов.
    Убедиться в этом можно, открыв его в хекс-редакторе и увидев заветное слово ELF в начале файла:

    Если вы видите эти три буквы ELF в начале файла, то знайте, что перед вами — декриптованный файл.

    А когда вы видите слово

    PSP в начале файла, то перед вами упакованный зашифрованный файл.

    В общем, декриптовка определённого файла подразумевает последующую его кастомизацию, в данном случае русификацию, иначе для чего же его декриптовать.
    Тут я подумал, зачем же я взял для примера этот recovery.prx?

    И. надумал встроить в него поддержку русских символов.
    Как вам известно, в рекавери-меню нет поддержки кириллицы и если вы положите файл с переводом ru_recovery.txt в папку «seplugins» или в корень flash1, то в рекавери-меню вместо русских букв появятся крякозяблики.

    Буквы, как известно, нарисованы на квадратике — 16 символов в ширину и 16 рядов в высоту, итого 16х16=256 символов, что соответствует максимальной величине FF в шестнадцатеричной системе. Каждый квадратик с символом (буквой), в свою очередь, состоит из 64-х пикселей по 1 биту. То есть, каждый символ составляет ровно 8 байт, исходя из того, что 1 байт = 8 бит.
    Так вот, из этой картинки и берутся буквы, цифры и прочие символы, которые мы видим на экране PSP в виде упорядоченного текста.

    В рекавери-меню от Dark_Alex, нет русского алфавита и выглядит его таблица символов так:

    А если учесть, что русская кодировка символов находится в диапазоне C0 — FF, как раз в том месте, где находятся всякие ненужные треугольники, кирпичики и гиперборейские символы, то в результате мы имеем в распоряжении полноценный англо-русский алфавит:

    Причём все символы из таблицы в Хексе будут иметь код именно такой, если вы возьмёте значения, которые я пронумеровал слева и сверху.
    Берём значение по вертикали и добавляем к нему значение по горизонтали, как в шахматах.

    • Например улыбающийся смайлик, будет иметь код в хексе — 01
    • Буква Z будет иметь код —
    • А маленькая русская буква я будет иметь код — FF

    P.S. Для разработчиков: чтобы каждый раз, после компилирования, не искать вручную таблицу символов в скомпилированной программе, чтобы вставить русский шрифт, проще сразу заменить матрицу шрифтов в библиотеке, где она содержиться и вставляется в программу при каждой компиляции.
    Эта библиотека находится здесь: c:\pspsdk\psp\sdk\lib\libpspdebug.a

    1. Если вы так и не поняли, из написанного выше, как самому вручную извлечь и вставить свою матрицу шрифтов, то воспользуйтесь программкой, написанной Andy_maN, которая содержит в себе бинарник картинки с англо-русскими символами: PatcheR.1.0b.zip.

    2. Запустите файл «PatcheR.1.0b.exe«

    3. В первой строке «Что будем патчить:«, нажмите на квадратик справа и в открывшемся проводнике укажите ваш декриптованный файл recovery.prx:

    5. Нажмите внизу кнопку «Патчить«.

    6. Всё, ваш recovery.prx русифицирован!
    Такой, декриптованный пока ещё, файл можно положить на место во flash0:/vsh/module/. и он будет прекрасно работать. Не забудьте только положить текстовой документ с переводом ru_recovery.txt в папку «seplugins» или в корень «flash1».

    7. Наслаждайтесь русским рекавери-меню!

    Но, заметьте, ваш декриптованный файл теперь весит 61,3 Кб (62814 байта), а изначальный исходник весил 25,1 Кб (25784 байта) — это почти в два с половиной раза больше места занимает во flash0.

    Чтобы исправить ситуацию, лучше его обратно упаковать и закриптовать.
    Поэтому переходим к третьему пункту:

    III) Запаковка с новой криптовкой.

    Запаковать обратно вручную так же просто как и распаковать.
    Наш декриптованный и русифицированный файл recovery.prx теперь нужно обратно заархивировать в GZIP-архив с нормальной степенью сжатия. Если сильно сжать, то потом просто может немного притормаживать, а так на работоспособность степень сжатия никак больше не влияет. Для этого воспользуйтесь архиватором 7-Zip.
    WinRar, к сожалению, не умеет архивировать в GZIP, только разархивировать.

    1. Предварительно, прежде чем архивировать, его можно переименовать как заблагорассудится, даже без расширения.
    Я, например, его переименовал так: Andy_maN_lupus_ErikPshat_PSPx.Ru — в честь разработчиков русификатора, ну и себя любимого :-), а так же нашего сайта. Для чего? Узнаете далее.

    2. Запаковываем в GZIP наш кастомизированный файл recovery.prx ака Andy_maN_lupus_ErikPshat_PSPx.Ru.

    2.1. Нажмите правой кнопкой мыши на нашем файле и выберите
    в открывшемся контекстном меню: «7-Zip -> Добавить к архиву. »

    5. Выделив, нажмите CTRL + C, чтобы скопировать выделенное в буфер обмена.

    6. Нажмите в верхнем меню «File -> Open. »

    Ну вот, файл мы упаковали и собрали. Но ещё не сохраняли.
    Теперь дело осталось за малым — сгенерировать и проставить секретные криптографические метки 🙂

    12. Cразу открою секрет этих меток.

    A) В offset: [0x28,0x29,0x2A,0x2B] — указывается размер декриптованного ELF-файла задом наперёд (нули спереди отбрасываются при указании смещений).

    Б) В offset: [0xB0,0xB1,0xB2,0xB3] — записан размер GZIP-архива (0х150 — до конца файла).

    В) В offset: [0x2C,0x2D,0x2E,0x2F] — указывается размер всего исполняемого кода файла вместе с заголовком

    A) Итак, в offset: [0x28,0x29,0x2A,0x2B] — указывается размер декриптованного ELF-файла задом наперёд.

    Вспомните, в первой главе в пункте 10, мы записывали этот размер на бумажку. Размер декриптованного ELF-файла у нас составлял 0хF55E , а задом наперёд это значит будет записываться побайтово, как 5EF5 .

    Прокрутите наш, ещё не сохранённый собранный красный файл в самое начало и смотрите значения в offset: [0x28,0x29,0x2A,0x2B]
    Как видите, эти значения 5EF5 как были записаны в оригинальном исходном файле, так они у нас не изменились. По идее распакованный ELF-файл и не должен никогда менятся, т.к. при изменении размера, файл становится нерабочим. Мы просто удостоверились в данном случае, что с этим делом у нас всё в порядке.

    Б) Далее, в offset: [0xB0,0xB1,0xB2,0xB3] — записан размер GZIP-архива (0х150 — до конца файла).

    Этот параметр очень важный, так как размер GZIP-архива в исходнике по любому будет отличаться от нашего архива по размеру. Просто невозможно подобрать такую степень компрессии, чтобы в точности попасть в размер исходного архива.

    А GZIP-архив у нас находится прямо перед глазами, выделенный красным цветом от 0х150 и до конца файла. Поэтому, ставим курсор в начало первой красной строки в offset: 0x150 и нажимаем Shift + End. Размер выделенной области, являющейся GZIP-архивом, который мы запаковали ранее и вставили в эту позицию, смотрим внизу и записываем:

    Ну здесь вроде всё ясно.
    Выделяем весь код файла, нажав сочетание клавиш CTRL + A.
    Смотрим внизу значение всего выделенного файла.
    Видим 0х6293 :

    На этом вся криптовка заканчивается.

    14. Жмем «File -> Save As. » и сохраняем как recovery.prx в любую свободную папку.

    15. Подключаем PSP к компьютеру и кидаем файл во flash0:/vsh/module/.
    Создаём на компьютере пустой текстовой документ под названием ru_recovery.txt, копируем в него код из спойлера ниже, сохраняем и закидываем в корень flash1 или в папку seplugins.

    Таким образом можно распаковывать и назад запаковывать некоторые другие PRX файлы, перечисленные в списке вначале.
    У меня на распаковку уходит не более 10 сек, а на запаковку — не более 30 сек.

    1. Предварительно, прежде чем архивировать, его можно переименовать как заблагорассудится, даже без расширения.
    Я, например, его переименовал так: Andy_maN_lupus_ErikPshat_PSPx.Ru — в честь разработчиков русификатора, ну и себя любимого :-), а так же нашего сайта. Для чего? Узнаете далее.

    PSP исходника, то имя файла в коде так же переезжает в основной файл, что может служить как бы авторской подписью.

    Эти 24 пользователя(ей) сказали Спасибо ErikPshat за это полезное сообщение:

    05.11.2008, 18:21 Сообщение: #2 (735303)
    Эти 2 пользователя(ей) сказали Спасибо KingSD за это полезное сообщение:

    05.11.2008, 20:06 Сообщение: #3 (735352)
    Этот пользователь сказал Спасибо PSPFANat за это полезное сообщение:

    06.11.2008, 11:35 Сообщение: #4 (735623)
    Этот пользователь сказал Спасибо Astra1111 за это полезное сообщение:

    17.04.2009, 21:06 Сообщение: #5 (788392)

    Dr.House, ну это через Ромартист. Я снял скрин и добавил слева и сверху нумерацию. Там же можно размер отображения матрицы менять от 1:1 до 4:1.

    А до этого, были сделаны старые скрины в фотошопе. Фотошоп тоже умеет отображать эту матрицу шрифтов, т.к. это же фактически картинка в RAW формате. Но скрины получились там не очень красивыми. А вот RomArtist их чётко показывает.

    18.04.2009, 00:41 Сообщение: #6 (788464)
    Этот пользователь сказал Спасибо ErikPshat за это полезное сообщение:

    20.06.2009, 01:23 Сообщение: #7 (804051)
    Нажмите кнопку «Поиск» и введите значение 3C42A581 — это значение в хексе и определяет первые символы в кодовой странице.

    Я ничего не считал. Посмотри на картинку с символами, двумя сообщениями выше.
    Видишь, первый квадратик — пустой. Это и есть первые 8 нулевых байт (00 00 00 00 00 00 00 00) таблицы Debug-шрифта.

    Теперь посмотри на следующий квадратик — там нарисован смайлик. Это и есть следующие 8 байт, который в хексе записывается так: 3C 42 A5 81 A5 99 42 3C.

    Поэтому, чтобы найти начало таблицы шрифтов, то достаточно ввести в поиск 3C 42 A5 81, что безошибочно приведёт на нужное место.
    Ессно, что искать нужно в декриптованном файле, а не в заархивированном GZIP архиве.

    20.06.2009, 02:40 Сообщение: #8 (804059)

    20.06.2009, 08:43 Сообщение: #9 (804075)

    20.06.2009, 17:48 Сообщение: #10 (804203)

    Я ничего не считал. Посмотри на картинку с символами, двумя сообщениями выше.
    Видишь, первый квадратик — пустой. Это и есть первые 8 нулевых байт (00 00 00 00 00 00 00 00) таблицы Debug-шрифта.

    Теперь посмотри на следующий квадратик — там нарисован смайлик. Это и есть следующие 8 байт, который в хексе записывается так: 3C 42 A5 81 A5 99 42 3C.

    Поэтому, чтобы найти начало таблицы шрифтов, то достаточно ввести в поиск 3C 42 A5 81, что безошибочно приведёт на нужное место.
    Ессно, что искать нужно в декриптованном файле, а не в заархивированном GZIP архиве.

    Спасибо, то есть один символ это 8 байт?

    lex3a добавил 20-06-2009 в 19:23

    20.06.2009, 19:23 Сообщение: #11 (804221)

    Я делаю через прогу. Удобно и быстро — на расжатие и сжатие prx по исходнику уходят 2-3 секунды.

    20.06.2009, 19:51 Сообщение: #12 (804235)

    Я бы не сказал, что быстро. Т.к. нужно сначала найти ярлык на прогу, затем запустить, затем нажать там кнопочку, выбрать файл, затем сжать или расжать. Ну может быть действительно быстрее, суть не в этом.

    Когда ты делаешь это вручную, то достаточно нажать правой кнопкой на файле и запустить Хекс-редактор. Он запустится, открыв этот файл. Далее элементарные операции Копи->New->Пасте->Save. Может это действительно чуть дольше, зато весь процесс контролируется и я точно знаю, что делаю и что получаю. Причём я могу контролировать размер файла при упаковке.

    Например, ты видел мой установщик 5.00М33-6 или мою сборку Пандоры. Так вот, туда никак ты не подберёшь файлы сконврченные автоконвертером, т.к. файлы от новой проши просто не влезут по размеру или не совпадёт чексумма.

    20.06.2009, 23:44 Сообщение: #13 (804295)

    29.07.2009, 00:49 Сообщение: #14 (812799)

    29.07.2009, 10:34 Сообщение: #15 (812829)

    1. В Ultimate VSH Menu v2.00 просто замени вручную бинарник с русским шрифтом вместо английского шрифта (хотя может и патчер сам сработает правильно).
    2. Патчер залочку не снимает, поэтому залочку нужно искать самому. В принципе это дело 2-ух минут — она находится по адресу 0х40A0.
      Там нужно поменять значение 7F на FF (ессно в декриптованном файле).
    3. Всё, можешь писать по русски в файле vshmenu.uvm, прилагающемся с программой или напрямую в файле vshmenu.prx.
    4. Изменения применяются только после перезагрузки.

    Вот я набросал на скорую руку для примера. Если что не получится, спрашивай.

    30.07.2009, 01:51 Сообщение: #16 (812991)
    Эти 2 пользователя(ей) сказали Спасибо ErikPshat за это полезное сообщение:

    14.08.2009, 13:20 Сообщение: #17 (815565)
    Этот пользователь сказал Спасибо intelfx за это полезное сообщение:

    Имя — просто информация. Туда можно написать всё, что угодно, хоть Вася_Пупкин по русски.

    И обрати внимание в той же теме, для того, чтобы файлы принимались на чужой PSP:

    1. Я взял декриптованные файлы PRX.
    2. Потом их обратно ужал и закриптовал.
    3. Но заголовок как раз подставлял универсальный один и тот-же. Самое главное в заголовке — это правильно проставить размеры, как описано в данном FAQ:
      • A) В offset: [0x28,0x29] — указывается размер декриптованного ELF-файла задом наперёд.
      • Б) В offset: [0xB0,0xB1] — записан размер GZIP-архива (0х150 — до конца файла).
      • В) В offset: [0x2C,0x2D] — указывается размер всего исполняемого кода файла вместе с заголовком

    PSP.

    И, как видишь, там аж 21 PRX изменён с одним и тем-же заголовком. И ничего, вроде работает у всех, что ты сам проверил и подтвердил.
    Можешь проверить выложенный там мой автоконвертер тем. Когда запускаешь программу «5.00 Hybrid 5.50.exe«, из неё извлекается самораспаковывающийся архив «archive.exe«.
    В нём лежит папка «support/550/vsh/module/» и можешь посмотреть на заголовки всех 21-го файла.
    Yoti использовал эти-же мои файлы, только его программа пишет файлы в прошивку.

    Я этот метод не совсем поддерживаю, так как при замене файлов в прошивке, необходимо пропатчивать темы CTF, чтобы в них не остались ни одного файла из 21-го, иначе произойдет конфликт между разными версиями прошивок, т.к. файлы PRX и RCO работают впаре. Или вообще отказаться от использования Тем, что я считаю неприемлемым.

    Мой же способ — это замена/добавление файлов в Тему, после активирования которой, необходимый набор файлов активируются из темы, а не из прошивки и никаких конфликтов не будет. И вдобавок, таким образом, мы не вмешиваемся в целостность самой прошивки.

    Исходя из того, что хоть в первом, хоть во втором случае, необходимо пропатчивать темы, то зачем тогда производить лишнее действие по замене файлов в прошивке, если их можно добавить в Тему во время пропатчивания одним махом и так-же получить все функции прошивки 5.50.
    Может кто-то скажет, что я вообще не использую темы, мне это не надо, то что мешает создать стандартную CTF тему )))

    А заголовок я взял когда-то давно из проги «Xmb Multi Cusomizer for Windows«. При сохранении файла там есть опция компресии и она сама добавляет заголовок. Я его посмотрел и мне он понравился, поэтому я его отдельно вырезал и храню про запас )).

    Источник

    Читайте также:  Что значит код ошибки 264
    Оцените статью
    15.08.2009, 06:29 Сообщение: #18 (815653)