PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   loadexec_01g(_02g).prx - секреты прошивки. (https://www.pspx.ru/forum/showthread.php?t=85557)

ErikPshat 26.12.2009 02:28

loadexec_01g(_02g).prx - секреты прошивки.
 
Как всем известно, новые игры, требующие повышенную прошивку, не желают запускаться, пока эта прошивка не будет установлена.

От чего же это происходит?
Какая-то защита, проверяющая версию прошивки по каким-то файлам во Flash0?

Такой вопрос возникал наверное у каждого. Но всё намного проще. Просто-напросто, запускающий файл PRX, он же EBOOT.BIN, находящийся в образе по адресу disk0:/PSP_GAME/SYSDIR/..., упакован в специфический запароленный архив (KL3E, KL4E или RLZ). Так вот, чтобы запустить игру, необходимо подставить пароль на архив, после чего файл извлекается в расшифрованном виде и приобретает рабочее состояние.

Получается такое дело, что предыдущая версия прошивки просто не имеет нового пароля. Вот поэтому новая игра не может запуститься.
Чтобы запускались современные игры, а так-же предыдущие, необходимо, чтобы прошивка имела все предыдущие пароли, называемые по другому - ключи.
Но если запускающий файл игры EBOOT.BIN будет находиться в образе уже в распакованном виде, то естесственно нет необходимости подставлять ключ для распаковки.

Таким образом, SONY прибегает к такому, несколько примитивному методу борьбы с пиратством и в случае взлома пароля от существующей прошивки, выпускает новую версию прошивки, добавляя каждый раз ещё один новый ключ к играм. И конечно, ещё по ключу для распаковки файлов самой прошивки для PSP-1000 и 2000.

Правда некоторые производители игр добавляют к этому ещё свою защиту - на проверку версии прошивки. Но и эта защита была найдена и пофиксена. Как вы знаете, впервые mc707 обнаружил её и выпустил Eboot.bin.Patcher для понижения версии.

Каким же образом работает механизм распаковки зашифрованных файлов?

Чтобы подобрать необходимый ключ под определённый вид файла, сначала определяется "Тег" по заголовку этого файла, состоящий из 4-ёх байт. А уже по этому тегу подставляется необходимый ключ, соответствующий именно этому тегу. В файлах EBOOT.BIN игр этот Тег записан по адресу 0хD0. Его можно увидеть через любой Хекс-редактор или даже через UMDGen:

Определив номер тега, подставляется соответствующий ключ и файл рапаковывается в память, приобретая рабочий вид.

Но где-же хранятся все эти теги и ключи к ним?

Вот тут и приходит на ум название файла в названии темы =)).

Итак, я взял на исследование файл loadexec_01g.prx из Flash0 своей толстушки с прошивкой 5.00 М33-6.
Декриптовал его с помощью PRXdecrypter v2.3 и получил ELF-файл в заголовке, как и положено быть декриптованному файлу:

Ну и решил сразу проверить на наличие уже известного Тега для прошивки 5.00 - F0 16 94 4C (0х4C9416F0), который можно посмотреть по таблице тегов. И да, тут-же нашёл этот тег в этом файле. Вот он, выделен на скрине чёрным:

Но посмотрев немного выше, я обнаружил аббревиатуру "~PSP". В голову пошли подозрительные мысли...
Отсчитав выделением от начала этой аббревиатуры ~PSP до начала найденного тега, получилось смещение ровно D0:

Что за чёрт, это ведь тег зашифрованного файла, который находится внутри декриптованного loadexec_01g.prx. Сразу всё встало на места, вспомнив про извлечение какого-то непонятного reboot.bin с помощью PRXdecrypter. Ну и PSARDumper так-же извлекает этот reboot.bin, но происхождение его и использование было не понятным, т.к. в прошивках такого файла не встречается.
Вот где собака зарыта!

Так как PRXdecrypter и PSARDumper почему-то из loadexec_01g(_02g).prx извлекают и декриптуют reboot.bin без заголовка ELF, что мне не понравилось, то мне было проще и быстрее извлечь этот файл целым вручную.
Зная, что размер всего PRX-файла записывается по адресу 0х2С, то я отсчитал от начала это количество байт и посмотрел размер этого файла:

Итак, я прочитал размер с позиции 0х2С задом-наперёд как 0х00009480, отображаемый на скрине красным, выделил этот файл, скопировал в новый пустой документ и сохранил под названием reboot.bin.

После декриптовки получил странный файл с названием в заголовке "KL3E", что наводило на мысль об одноимённом формате сжатия:

То есть я получил декриптованный файл, но в сильно сжатом виде.
Посмотрев в зашифрованном файле в позиции 0х28 (можно увидеть на предыдущем рисунке), где записан размер декриптованного файла 0х00009324 (37668 байт) и сверив с моим декриптованным, я удостоверился, что всё в точности сходится, а значит декриптовка произошла правильно.

Но, что и следовало ожидать, размер аналогичного файла, извлечённого с помощью PRXdecrypter или PSARDumper был больше в 2 с лишним раза - 76188 байт, из-за того, что файл помимо декриптовки, был ещё и расжат, в отличии от моего, просто декриптованного.
Никакие попытки расжать этот, известный всем декрипторам формат "KL3E" не увенчались успехом. Поэтому мне пришлось убрать его в сторону и просто воспользоваться извлечённым и расжатым reboot.bin с помощью PRXdecrypter-а.

А что-же дальше, в чём соль?

А делалось всё это, в попытке найти теги и ключи, предположительно в этом файле - loadexec_01g(_02g).prx, который в себе ещё содержит reboot.bin.
Итак, искомый файл у нас есть от прошивки 5.00. Теперь требуется найти в нём известные уже теги, характерные этой прошивке. Возьмём их из составленной таблицы, где я выписал известные в свободном доступе теги с ключами:
  1. PSP-100x

    F0 16 94 4C { 0x4C9416F0, keys500_0, 0x43 } /* 5.00 kernel (PRX's) */
    {
    0xEB, 0x1B, 0x53, 0x0B, 0x62, 0x49, 0x32, 0x58, 0x1F, 0x83, 0x0A, 0xF4, 0x99, 0x3D, 0x75, 0xD0
    };
  2. PSP-200x - должен иметь тег от 100x для общих файлов + тег от "_02g", характерный только Слимкам.

    F0 17 94 4C { 0x4C9417F0, keys500_1, 0x43 } /* 5.00 kernel 2000 specific */
    {
    0xBA, 0xE2, 0xA3, 0x12, 0x07, 0xFF, 0x04, 0x1B, 0x64, 0xA5, 0x11, 0x85, 0xF7, 0x2F, 0x99, 0x5B
    };
Ну и вот результат:

В reboot.bin от PSP-100x был найден соответствующий тег:

В reboot_02g.bin от PSP-200x было найдено 2 тега:

Только вот где лежат сами ключи к этим тегам, вероятно в mesg_led.prx или memlmd.prx. А это уже вопрос времени и дизасма )).

И есть ещё 2 тега, сохранившихся со старых прошивок 3.30 и до сих пор не менявшихся.
Один из которых идёт на распаковку конкретно vshmain.prx.
Второй - на прочие не системные файлы прошивки.
И есть 3-ий - для запуска игр, требующих прошивку 5.00. Ключи-то нам известны, но вот где хранятся они - пока загадка.

Искомые теги
  1. F0 0A 7B 45 { 0x457B0AF0, keys330_1, 0x5B } /* user modules 3.30-6.20 PRX's */
    {
    0xE8, 0xBE, 0x2F, 0x06, 0xB1, 0x05, 0x2A, 0xB9, 0x18, 0x18, 0x03, 0xE3, 0xEB, 0x64, 0x7D, 0x26
    };
  2. F0 0A 02 38 { 0x38020AF0, keys330_2, 0x5A } /* vshmain.prx 3.30-6.20 */
    {
    0xAB, 0x82, 0x25, 0xD7, 0x43, 0x6F, 0x6C, 0xC1, 0x95, 0xC5, 0xF7, 0xF0, 0x63, 0x73, 0x3F, 0xE7
    };
  3. F0 09 16 D9 { 0xD91609F0, keys500_G, 0x5D }, //5.00 EBOOT.BIN
    {
    0xD0, 0x36, 0x12, 0x75, 0x80, 0x56, 0x20, 0x43, 0xC4, 0x30, 0x94, 0x3E, 0x1C, 0x75, 0xD1, 0xBF
    };

ErikPshat 30.12.2009 06:06

Уря! Уря! Уря!

Я нашёл все теги и ключи к ним в декриптованном файле от прошивки 5.00, как и предполагалось, они находятся в mesg_led.prx.
Это так элементарно, просто слов нет, лежат как на ладони, только бери прям напрямую без всяких шаманств и переписывай тупо на листочек.

Их там очень-очень много и все они верны, я проверил!!!
Даже намного больше, чем есть на самом деле ))).

В общем разобрался:
  1. В mesg_led.prx лежит вся коллекция ключей от предыдущих прошивок и к играм.
  2. В reboot.bin лежат только новые теги с ключами от этой-же прошивки, о которых говорилось в шапке.


doubledeath 02.01.2010 14:59

а будешь добавлять их в таблицу?

ErikPshat 02.01.2010 19:24

doubledeath, вероятно добавлю. Но там их 66 штук для Фатки и 84 штуки для Слимки. Для 3000 - 101 штука. Все переписывать - с ума сойдёшь =)

Самая проблема с reboot.bin, в котором лежат всего 3 ключа для Фат, Слим и Брайт. Вот эти главные ключи к системным файлам я пока не представляю где искать, т.к. в mesg_led.prx их нет.


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

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