PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Русификация игр и софта для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=190)
-   -   Декриптовка - Русификация - Запаковка (https://www.pspx.ru/forum/showthread.php?t=76183)

ErikPshat 05.11.2008 18:07

Декриптовка - Русификация - Запаковка
 
Вложений: 33
Декриптуем, русифицируем и обратно пакуем

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

Решил довести начатое почти год назад и не доведённое до конца дело: https://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 этапа:
Предисловие (основные понятия)

Данные файлы состоят из двух частей - Заголовка ~PSP и собственно самого Исполняемого Кода ELF.
  1. "Заголовoк ~PSP" - это та часть кода, которая содержит технические данные о файле и метод защиты (проверка целостности данных). Находится в начале файла от 0х00 до 0х14F включительно в 16-ричной системе исчисления и содержит ровно 0х150 Байт (336 байт)

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

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

I. Декриптовка

Декриптовка - это самый лёгкий и быстрый этап.

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

Вам понадобится Хекс-редактор, после установки которого, у вас появиться в контекстном меню при клике правой кнопкой мыши на файле - пункт "Hex Edit with Hex Workshop".
  1. Нажмите правой кнопкой на файле recovery.prx, предварительно скопированном из прошивки на компьютер и выберите в открывшемся контекстном меню этот пункт "Hex Edit with Hex Workshop". Этот файл откроется в Хекс-редакторе.
    Скрин
    Как я говорил в предисловии, файлы в прошивке находятся в запакованном виде. На это указывает начало файла в заголовке в правом столбце: ~PSP
    Цитата:

    1. Заголовoк - ~PSP - это та часть кода, которая содержит технические данные о файле и метод защиты (проверка целостности данных).
    Находится в начале файла от 0х00 до 0х14F включительно в 16-ричной системе исчисления и содержит ровно 0x150 Байт
    Здесь, как раз, вы этот заголовок и видите. Он выделен чёрным цветом с красной окантовкой и составляет ровно 0x150 байт, о чём свидетельствуют цифры внизу, в выделенной красным рамке (Sel от слова Select - выбрано, выделено):


    Если у вас таблица выглядит не так как на рисунке, то для представления в однобайтном формате, сделайте следующее:
    зайдите в меню "Options->Preferences..." и выставьте так, как показано на рисунке ниже, затем нажмите кнопку "ОК":
    Теперь мы видим числа побайтово, то есть попарно по два числа. Один байт - это двухзначное число в 16-ричной системе исчисления от 00 до FF.
    Нам нужно из файла выдернуть "Исполняемый код ELF", который фактически и есть GZIP-архив, о котором я упоминал в предисловии. Он начинается от 0х150 включительно и до конца файла, сразу после "Заголовка ~PSP", выделенного на скрине выше. Чем мы и займёмся далее...

  2. Ставим курсор в начало строки 0х150. Число 0х150 - это не что иное, как 00000150 в левом вертикальном столбце отсчёта, просто записываются, для удобства, без лишних нулей спереди. Эта цифра так же отображается в нижней строке окна программы под названием "Caret: 00000150" и указывает на позицию, где находится курсор, как показано на рисунке ниже:
  3. Нажмите сочетание клавиш Shift + End - у вас выделится часть кода файла от места, где стоял курсор и до конца:
  4. Нажмите сочетание клавиш CTRL + C - выделенная область скопируется в буфер обмена.

  5. Нажмите в верхнем меню "File->New". У вас создасться новый пустой документ:
  6. Нажмите сочетание клавиш CTRL + V - скопированные ранее данные вставятся в новый документ, но в красном цвете:
  7. Нажмите в верхнем меню "File->Save As...".
    В открывшемся окне сохранения введите название файла, как "recovery.gz" и нажмите кнопку "Сохранить" - не забыли, что это у нас GZIP-архив?
    После сохранения, код в хекс-редакторе изменится с красного на чёрный. Теперь вы можете совсем закрыть хекс-редактор и перейти в папку с сохранённым только-что GZIP-архивом.

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

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

    Вложение 10581

    А когда вы видите слово ~PSP в начале файла, то перед вами упакованный зашифрованный файл.
  10. Выделите весь код файла, нажав CTRL + A и запишите на бумажке значения всего выделенного декриптованного ELF-файла внизу в области Sel: 0xF55E. Эта цифра нам понадобится в самом конце при криптовке, не забудьте!

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

II. РУСИФИКАЦИЯ

В общем, декриптовка определённого файла подразумевает последующую его кастомизацию, в данном случае русификацию, иначе для чего же его декриптовать.
Тут я подумал, зачем же я взял для примера этот 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
Как-же выглядит этот алфавит в Хекс-редакторе и как его отыскать там?
  1. Насколько вы понимаете, иностранные разработчики в таблицу символов не встраивают русский язык, поскольку их это не особо заботит.
  2. Откройте файл, который вы хотите русифицировать.
  3. Нажмите кнопку "Поиск" и введите значение 3C42A581 - это значение в хексе и определяет первые символы в кодовой странице.
  4. Но, перед этими значениями ещё необходимо сделать отступ на 8 нулевых байтов к началу. Поэтому от найденных значений 3C42A581, отсчитайте 8 байт назад. Ведь, как видно на матрице (картинке) с символами, первый символ пустой и составляет 8 байт.
  5. Выделите код, размером ровно 2048 байт. Так как один символ равен 8 байт, а таких символов в матрице 256, то и получаем размер всей матрицы ровно 2048 байт.
  6. Во время выделения, внизу хекс-редактора будет показываться количество выделенной области. В десятеричном отображении вам надо выделить 2048 байт, а в шестнадцатеричном виде эта цифра будет выглядить как 800 шестнадцатеричных символов.
  7. Скопируйте выделенный код и вставьте в новый документ в хекс-редакторе, и сохраните его как, например FONT.BIN. Это и будет бинарная матрица шрифта.
  8. Теперь вы можете посмотреть этот файл в Вложение 924 и наглядно, без искажений, увидеть таблицу символов, состоящую из алфавита с дополнительными символами. Программа, так-же, позволяет редактировать эту таблицу вручную.
  9. Вы можете вручную вставить на место выделенной таблицы другую, нарисованную вами или уже готовую Вложение 233, содержащую наряду с английскими, русские символы.
А выглядит эта таблица символов в хексе вот так:
Таблица символов в Хексе


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


Итак, приступим к русификации!

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

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

3. В первой строке "Что будем патчить:", нажмите на квадратик справа и в открывшемся проводнике укажите ваш декриптованный файл recovery.prx:
4. Этот пункт можете пропустить, но если вы нарисовали свой шрифт и хотите его использовать, то переходите ко второй строчке "Файл патча:", нажмите на квадратик справа ниже и укажите на ваш файл шрифта (2048 байт):
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 -> Добавить к архиву..."
2.2. В открывшемся окне архиватора выставьте "Формат архива: GZip" и всё, как на скрине ниже:

3. Нажмите правой кнопкой мыши на создавшемся архиве Andy_maN_lupus_ErikPshat_PSPx.Ru.gz и выберите в раскрывшемся контекстном меню пункт: "Hex Edit with Hex Workshop v6.8".
4. В открывшемся окне хекс-редактора нажмите сочетание клавиш CTRL + A, чтобы выделить весь файл полностью:
5. Выделив, нажмите CTRL + C, чтобы скопировать выделенное в буфер обмена.

6. Нажмите в верхнем меню "File -> Open..."
7. Найдите в открывшемся проводнике исходный криптованный файл recovery.prx и нажимаем его.
8. Ставим курсор в начало строки 0х150, как показано на рисунке ниже:
Обратите внимание, что код в этой позиции начинается с 1F8B - это волшебная метка начала Gzip-архива.
9. Нажмите сочетание клавиш Shift + End - у вас выделится часть кода файла от места, где стоял курсор и до конца:
10. Нажмите клавишу "Del" (Delete), чтобы удалить ненужный выделенный исходный код.
11. Нажмите сочетание клавиш CTRL + V, чтобы вставить скопированный ранее в "Пункте 5" код нашего кастомизированного Gzip-архива. Обратите внимание, что вставленный код отображается красным цветом и он так же начинается с 1F8B.
Ну вот, файл мы упаковали и собрали. Но ещё не сохраняли...
Теперь дело осталось за малым - сгенерировать и проставить секретные криптографические метки :-)

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

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

В) В offset: [0x2C,0x2D,0x2E,0x2F] - указывается размер всего исполняемого кода файла вместе с заголовком ~PSP.
13. Давайте проставим эти метки...
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-архивом, который мы запаковали ранее и вставили в эту позицию, смотрим внизу и записываем:
Как видим, размер выделенной области показывает Sel: 0x6143. Значит, в offset: [0xB0,0xB1,0xB2,0xB3] мы должны записать 4361. Нули спереди обычно не пишутся и отбрасываются, поэтому, когда я имею в виду "записать значение 4361" - это надо понимать, что фактически в хексе размер пишеться 4-мя байтами 43610000, ведь мы пишем код задом наперёд, значит читаем его начиная с нулей.
Перемещаемся в начало файла и записываем эти значения:
В) И последний этап, в offset: [0x2C,0x2D,0x2E,0x2F] - указывается размер всего исполняемого кода файла вместе с заголовком ~PSP.

Ну здесь вроде всё ясно.
Выделяем весь код файла, нажав сочетание клавиш CTRL + A.
Смотрим внизу значение всего выделенного файла.
Видим 0х6293:
Значит в offset: [0x2C,0x2D,0x2E,0x2F] записываем 9362:

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

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

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

Отключено
Включено
По умолчанию
Япония
Америка
Европа
Корея
Великобритания
Мексика
Австралия/Нов. Зеландия
Восток
Тайвань
Россия
Китай
1ый тип отладки
2ой тип отладки
Обычный -Необходим UMD-
Старый OE isofs -Без UMD-
Драйвер M33 -Без UMD-
Sony NP9660 -Без UMD-
Соединение USB
Конфигурация
Дополнительно
Дополнительные настройки
Запустить программу
Частота ЦП
Плагины
Твики реестра
Выход
Назад
Активировать WMA
Активировать Flash Player
USB включено
USB выключено
Отформатировать flash1 и сбросить настройки
Форматирование
состояние
Простые модули UMD/ISO
Выполнять BOOT.BIN в UMD/ISO
Пропускать лого Sony
Прятать повреждённые иконки
Папка приложений
Автозапуск:
Режим UMD
Регион
Использовать VSH меню
Устройство USB
UMD диск
M33 интернет обновление
Прятать PIC0.PNG и PIC1.PNG в меню игры
Всегда подзаряжать по USB
Частота в XMB
Частота в UMD/ISO
Назначение кнопок
O - ввод
X - ввод
WMA уже было активировано.
Активирование WMA...
Flash player уже был активирован.
Активирование Flash Player...
Выходим из меню восстановления
Главное меню
Ядро 1.50
Ядро 5.XX
Плагины XMB
Плагины GAME
Плагины POPS
Использовать version.txt

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

Цитата:

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

KingSD 05.11.2008 18:21

ErikPshat, спасибо за подробную информацию. низкий тебе поклон

PSPFANat 05.11.2008 20:06

Спасибо, Эрик! Отлично написал! Впрочем, не впервой) Оффтоп: как перевести файлы тем prx для новой проши?

Astra1111 06.11.2008 11:35

ErikPshat, спасибо за такой полезный мануал.

Dr.House 17.04.2009 21:06

ErikPshat, а через что ты такой шрифт получил?)
http://i008.radikal.ru/0904/f5/c9c6b4a83e94.png

ErikPshat 18.04.2009 00:41

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

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

lex3a 20.06.2009 01:23

Цитата:

Нажмите кнопку "Поиск" и введите значение 3C42A581 - это значение в хексе и определяет первые символы в кодовой странице.
Как ты это подсчитал?

ErikPshat 20.06.2009 02:40

Цитата:

Сообщение от lex3a (Сообщение 804051)
Как ты это подсчитал?

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

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

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

myhouse_1991 20.06.2009 08:43

Интересно, а никто не пробовал несжатый *.prx сжать (исходник не сжатый)?

ErikPshat 20.06.2009 17:48

myhouse_1991, в смысле? Если ты имеешь ввиду recovery.prx, то он в проше сжатый.
А вообще я только этим способом расжимаю и сжимаю все файлы. Никакими конвертерами не пользуюсь, т.к. это лишние заморочки, на которое уходит время.
А таким образом значительно быстрее и всё под контролем.

lex3a 20.06.2009 19:23

Цитата:

Сообщение от ErikPshat (Сообщение 804059)
Я ничего не считал. Посмотри на картинку с символами, двумя сообщениями выше.
Видишь, первый квадратик - пустой. Это и есть первые 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
Цитата:

Сообщение от ErikPshat (Сообщение 804203)
myhouse_1991, в смысле? Если ты имеешь ввиду recovery.prx, то он в проше сжатый.
А вообще я только этим способом расжимаю и сжимаю все файлы. Никакими конвертерами не пользуюсь, т.к. это лишние заморочки, на которое уходит время.
А таким образом значительно быстрее и всё под контролем.

Он имел ввиду наверно просто плагин сжать....Типа POPS. Кстати я посмотрел и обнаружил что таким способом сжат FusaScr.

myhouse_1991 20.06.2009 19:51

Цитата:

Сообщение от ErikPshat (Сообщение 804203)
Никакими конвертерами не пользуюсь, т.к. это лишние заморочки, на которое уходит время.
А таким образом значительно быстрее и всё под контролем.

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

Цитата:

Сообщение от ErikPshat (Сообщение 804203)
myhouse_1991, в смысле?

Представь, что тебе попался несжатый prx файл. Редактировать его не собираешься, но ты его хочешь его сжать в GZIP таким образом, чтобы PSP понимал этот prx. Сложность заключается в том, что нет исходного, но уже сжатого prx с тем же содержимым, что и несжатый файл.

ErikPshat 20.06.2009 23:44

Цитата:

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

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

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

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

Цитата:

Сообщение от myhouse_1991 (Сообщение 804235)
Представь, что тебе попался несжатый prx файл. Редактировать его не собираешься, но ты его хочешь его сжать в GZIP таким образом, чтобы PSP понимал этот prx. Сложность заключается в том, что нет исходного, но уже сжатого prx с тем же содержимым, что и несжатый файл.

Если нет исходного PRX с заголовком, о чём ты намекаешь, как я думаю, то здесь это не главное. Заголовок можно взять от любого файла из той же категории и проставить там правильные размеры. У меня есть для таких случаев универсальный заголовок, взятый из тех-же автоконвертеров.

SunTexnik 29.07.2009 00:49

Такой вопросец-
Пробовал русифицировать vshmenu.prx из ultimate vsh menu v.2.00,вроде делал все по технике,несколько раз.
Потом прочел в ридми патчера,что с его помощью невозможно снять 'залочку в некоторых файлах,таких как vsh меню' отсюда вопрос,можно ли пользоваться патчером,или бинарник с русским шрифтом вручную через хекс вставлять?
З.Ы. Пробовал с помощью патчера,и без него,эффект нулевой(

Dr.House 29.07.2009 10:34

если "залочку" снимешь то патчером можно будет

ErikPshat 30.07.2009 01:51

Цитата:

Сообщение от SunTexnik (Сообщение 812799)
отсюда вопрос,можно ли пользоваться патчером,или бинарник с русским шрифтом вручную через хекс вставлять?

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

http://i069.radikal.ru/0907/80/4290e2628196.png

intelfx 14.08.2009 13:20

ErikPshat, огромное спасибо!
Цитата:

Сообщение от ErikPshat
У меня есть для таких случаев универсальный заголовок, взятый из тех-же автоконвертеров.

BTW заголовки для каждого модуля отличаются хотя бы потому, что в самом начале в него вставлено имя модуля(например, SystemControl в systemctrl.prx) и есть какой-то ключ, расположенный 0x130-0x132 закриптованного файла, но я не врубился, зачем он нужен. И он везде разный. А во всех известных мне компрессорах PRX (P-Zip, PRX Compressor) заголовки подставляются в зависимости от файла, а в них уже патчатся размеры. В PRX Compressor'е заголовок берется из ориг. файла, а в P-Zip есть отдельная папка с предустановленными заголовками модулей.

ErikPshat 15.08.2009 06:29

Цитата:

Сообщение от intelfx (Сообщение 815565)
отличаются хотя бы потому, что в самом начале в него вставлено имя модуля(например, SystemControl в systemctrl.prx)

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

Цитата:

Сообщение от intelfx (Сообщение 815565)
есть какой-то ключ, расположенный 0x130-0x132 закриптованного файла, но я не врубился, зачем он нужен. И он везде разный.

О привязке файла я писал здесь и здесь (пункт5)

И обрати внимание в той же теме, для того, чтобы файлы принимались на чужой 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". При сохранении файла там есть опция компресии и она сама добавляет заголовок. Я его посмотрел и мне он понравился, поэтому я его отдельно вырезал и храню про запас )).


Цитата:

Сообщение от intelfx (Сообщение 815565)
А во всех известных мне компрессорах PRX (P-Zip, PRX Compressor) заголовки подставляются в зависимости от файла

Спасибо, что обратил на это внимание. Я, честно, даже не задумывался об этом. Поэтому есть смысл проверить что почём...

svetlois 27.08.2009 15:21

такой вопрос: а если в фаиле нет таблицы шрифтов, что делать?
калбашу dayviewer.prx

ErikPshat 27.08.2009 21:11

svetlois, да, там нету debug-шрифта. Там другой тип шрифта и причём без поддержки UTF-8, скорее всего UTF-7, в котором нет русского алфавита.


Текущее время: 10:34. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.