Quote (Andy_maN)
Quote (lupus)
1.) Open the PRX with your favourite HexEditor
2.) Select only the data from (offset)0x150 till the end of the file
3.) Save the selected data as "filename.gz"
4.) Open and extract the *.gz-archive with 7-Zip or WinRAR and rename it to "filename.prx"
--> now you have the decompressed(decrypted) PRX
Интересная инструкция (можно и так в принципе распаковывать)
А по запаковке там что нибудь говорилось? (да кстати источник бы подкинул, мне интересно взглянуть)
Запаковать вручную так же просто как и распаковать.
После распаковки PRX получаем декриптованный файл ELF.
После чего его можно редактировать по своему усмотрению.
Отредактировав, опять сжимаем его в GZIP с нормальной степенью сжатия. Если сильно сжать, то потом может притормаживать.
Потом обратно вставляем его в исходник ~PSP в хексе начиная с 0х150. Единственно, надо будет указать в заголовке (0х00-0х14F) некоторые хитрости:
Например, я взял знакомый вам ваш recovery.prx 5.00M33-3.
1. В offset: [0x28,0x29] - указывается размер декриптованного файла задом наперёд. Размер вашего декриптованного ELF-файла = f55e, значит в ofset: [0x28,0x29] записываем наоборот побайтово - 5ef5.
2. В offset: [0xB0,0xB1] - записан размер GZIP-архива (0х150 - до конца файла). Ваш размер GZ (0х150 - до конца файла) был 0х6357 (ставим курсор перед 0х150 и выделяем до конца Shift+END), поэтому у вас в данном месте offset: [0xB0,0xB1] было написано [5763].
3. В offset: [0x2C,0x2D] - указывается размер всего файла ~PSP. Выделяю весь файл CTRL+A, и вижу 0х64a7. Там пишется [a764].
Пример:
1. Я декриптовал ваш файл, получил ELF, посмотрел на него.
Назвал файл как Andy_maN_lupus_ErikPshat (без расширения) - для прикола. Но ничего не трогал, поэтому размер декриптованного файла не изменился.
Поэтому в offset: [0x28,0x29] менять ничего не придётся, там так и останется [5ef5].
2. Затем я его, не изменяя, заархивировал обратно в GZIP с помощью архиватора 7-Zip, но размер заархивированного файла изменится полюбэ по сравнению с тем, который мы изначально вырезали в *.GZ, как ни крути. Поэтому эта цифра самая важная.
Открываю заархивированный файл в хексе. Смотрю его размер - у меня 0х613b. Теперь копирую его весь и вставляю в ваш исходник от 0х150, предварительно удалив старый код с этого места.
В offset: [0xB0,0xB1] записываю новый размер [3b61].
3. Далее, в offset: [0x2C,0x2D] записываю размер всего файла. Выделяю весь полученный файл CTRL+A, вижу 0х628b.
Записываю в данное место [8b62].
Жму "Сохранить" и кидаю полученный recovery.prx в прошивку. О, чудо, всё работает как обычно!
Причем мой перекомпилированный файл получился меньше - 25227 байт, а ваш 25767 байт.
Только в коде файла добавилось название Gzip файла, по которому можно как бы идентифицировать автора, короче можно ставить свою подпись.
Это происходит, когда вы сжимаете файл в Gzip, то его название тоже записывается в код. Смотрите скрин ниже.
Надеюсь, что этой инструкцией хоть немного помог...
Для наглядности в аттаче 2 файла в архиве - ваш и мой, который тот же ваш