PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Архив (https://www.pspx.ru/forum/forumdisplay.php?f=304)
-   -   Разбор формата FLASH0.TN из комплекта CEF (https://www.pspx.ru/forum/showthread.php?t=104409)

lupus 16.01.2014 12:49

Разбор формата FLASH0.TN из комплекта CEF
 
Появилась идея перевести/замодить recovery и vsh menu текущей версии CEF TN-V 7.3.
Вся проблема в том, что оригинальные файлы из прошивки PSP 6.60 лежат открыто, а вот пачка кастомных - упакованы в один архив, который я и пытаюсь разобрать.
Сжатие используется не такое, как в оригинале.
На всякий случай ссылка на файл.
Форматы архива для TN-C, сырцы которого есть в сети и текущей версии TN-V7.3 немного отличаются, но как мне показалось только заголовком.
Разобрал примерно так:
0x00 - 4 байта - количество файлов в архиве (0x0D = 13)
0x04 - 4 байта - magic TNPK
0x08 - 4 байта - размер файла в распакованном виде
0x0C - 4 байта - размер длины строки пити к файлу (0x0F)
0x10 - 15 байт (0x0F) - путь к файлу в архиве
0x1F - 1 байт - размер имени заголовка файла (0x1D)
0x20 - 29 байт (0x1D) - заголовок файла
0x3d - ?? тело упакованного модуля ??
0x0DC1 - снова 4 байта magic TNPK

и далее всё по аналогии...
Может будут подсказки?

PS. Сам TN, к сожалению, ограничился кратким ответом:
Цитата:

The FLASH0.TN file is compressed by an other type. However you can load your own recovery by adding recovery.prx to ms0:/flash/kd/recovery.prx
TN

frostegater 16.01.2014 15:07

В старых сырцах TN-V есть прога package_maker.exe, но она только запаковывает.

upd/
во FLASH0.TN файлы лежат в чистом виде, даже не запакованы
а метод распаковки есть в самих сырцах TN
пакер/анпакер сделать расплюнуть

lupus 16.01.2014 17:55

Пакер из тн-с я смотрел, благодаря сравнению данных до и после упаковки получилось кой-чего выудить из того, что написано. Там однозначно какое-то сжатие есть, т.к. после сборки flash0.tn он весит меньше, чем файлы в нём до упаковки + в хексе данные не совпадают, если бы в чистом виде лежали - то можно было бы руками всё выдрать и не париться.
По сути только анпакер нужен. Буду благодарен , если сможешь собрать...

SILENT-Pavel 17.01.2014 00:54

lupus, а можно что-нибудь изменить не дергая тотал_нуба? Ну например на бум повключать звук в пс1 хоть какой, или ну не знаю сделать фикс для досБокс используя анализ АРК прошивки (там он работает) или вообще что-нибудь в этом роде? например убрать поддержку 64 метров оперативки в 2.12, оно нестабильно.

frostegater 17.01.2014 01:22

lupus, хорошо, вечером сделаю

lupus 17.01.2014 08:45

Цитата:

Сообщение от SILENT-Pavel (Сообщение 1083377)
lupus, а можно что-нибудь изменить не дергая тотал_нуба? Ну например на бум повключать звук в пс1 хоть какой, или ну не знаю сделать фикс для досБокс используя анализ АРК прошивки (там он работает) или вообще что-нибудь в этом роде? например убрать поддержку 64 метров оперативки в 2.12, оно нестабильно.

Теоретически, можно всё, но это не ко мне - я не настолько продвинут в вопросе. Если бы были откыты исходники - было бы проще.

Цитата:

Сообщение от frostegater (Сообщение 1083380)
lupus, хорошо, вечером сделаю

Спасибо, буду ждать.

frostegater 18.01.2014 14:38

lupus, вот) https://twitter.com/frostegater/stat...90214757646336

lupus 18.01.2014 15:16

frostegater, что-то я бинарника в архиве не вижу, там только сырцы? Собери, если не сложно.

frostegater 18.01.2014 17:37

Вложений: 1
lupus, Вложение 9686

lupus 18.01.2014 21:56

Хм, это просто разбор на части, а что с декомпрессией?
Цитата:

однозначно какое-то сжатие есть, т.к. после сборки flash0.tn он весит меньше, чем файлы в нём до упаковки + в хексе данные не совпадают, если бы в чистом виде лежали - то можно было бы руками всё выдрать и не париться.
В recovery я не вижу ни шрифта ни текста.
Это как-то поможет?
Код:

    u32 file_count;

    //Repeat this file_count times:
    u32 signature; (0x4B504E54)
    u32 file_size;
    u32 name_length;
    u8 name[name_length];
    u8 file[file_size];


frostegater 19.01.2014 02:35

lupus, https://www.pspx.ru/forum/showthread.php?t=76183
Пспшная gzip компрессия.

lupus 19.01.2014 09:29

Я это в первую очередь попробовал.
Цитата:

The FLASH0.TN file is compressed by an other type. However you can load your own recovery by adding recovery.prx to ms0:/flash/kd/recovery.prx
TN

frostegater 20.01.2014 05:11

lupus, ага) ок разберемся, мне сказали какое там сжатие

lupus 20.01.2014 12:16

Ок, жду))

frostegater 21.01.2014 09:17

Как всегда все оказалось намного сложнее. Сейчас делаем реверс алгоритма шифрации TN.BIN, чтобы вытащить алгоритм декомпрессии)) Может по пути обнародуем kernel эксплоит ТНа.

TN.DECODER
Код:

loc_00000078:

        //0x00000078
        // div        $a2, $t4
        LO = (s32)a2 / (s32)t4;
        HI = (s32)a2 % (s32)t4;
       
        //0x0000007C
        // lbu        $v0, 0x0($t0)
        v0 = *(u8 *)(t0);
       
        //0x00000080
        // lbu        $a0, 0x0($a0)
        a0 = *(u8 *)(a0);
       
        //0x00000084
        // xori      $v0, $v0, 0x1A
        v0 = v0 ^ 0x1A;
       
        //0x00000088
        // xor        $v0, $v0, $a0
        v0 = v0 ^ a0;
       
        //0x0000008C
        // mfhi      $v1
        v1 = HI;
       
        //0x00000090
        // srav      $v1, $t2, $v1
        v1 = (s32)t2 >> v1;
       
        //0x00000094
        // mult      $a2, $a3
        LO = (s32)a2 * (s32)a3;
        HI = ((s32)a2 * (s32)a3) >> 32;
       
        //0x00000098
        // addiu      $a3, $a3, 0x1
        a3 = a3 + 1;
       
        //0x0000009C
        // mflo      $a0
        a0 = LO;
       
        //0x000000A0
        // xor        $v1, $v1, $a0
        v1 = v1 ^ a0;
       
        //0x000000A4
        // ext        $v1, $v1, 5, 8
        v1 = (v1 >> 5) & 0xFF;
       
        //0x000000A8
        // divu      $t1, $t3
        LO = (u32)t1 / (u32)t3;
        HI = (u32)t1 % (u32)t3;
       
        //0x000000AC
        // xor        $v0, $v0, $v1
        v0 = v0 ^ v1;
       
        //0x000000B0
        // addiu      $v0, $v0, -0x20
        v0 = v0 - 0x20;
       
        //0x000000B4
        // xori      $v0, $v0, 0x20
        v0 = v0 ^ 0x20;
       
        //0x000000B8
        // sb        $v0, 0x0($t0)
        *(u8 *)(t0) = v0;
       
        //0x000000BC
        // addiu      $t0, $t0, 0x1
        t0 = t0 + 1;
       
        //0x000000C0
        // mfhi      $a2
        a2 = HI;
       
        //0x000000C4
        // sltu      $v0, $a1, $a3
        v0 = (u32)a1 < (u32)a3;
       
        //0x000000C8
        // addiu      $t1, $a2, 0x1
        t1 = a2 + 1;
       
        //0x000000CC
        // addu      $a0, $a2, $s0
        a0 = a2 + s0;
       
        //0x000000D4 delay slot
        // sllv      $t2, $t5, $a3
        t2 = t5 << a3;
       
        //0x000000D0
        // beqz      $v0, loc_00000078
        if(v0) goto loc_00000078;


lupus 21.01.2014 11:43

Обнародовать может пока и рано. Мне на данном этапе достаточно непожатых recovery и satellite.

frostegater 21.01.2014 14:18

lupus, ну дак их можно достать и без распаковки. Вопрос как обратно запакуешь?

lupus 21.01.2014 15:22

Ну так я ж писАл: вынуть и распаковать, чтобы можно было редактировать. А назад запихивать не обязательно, достаточно их в папку kd положить, чтобы cef их подхватила. Об этом TN мне на вололо сказал.

lupus 24.01.2014 11:36

Ну как, есть сдвиги?

frostegater 24.01.2014 17:23

lupus, да пока занят. Модули можно сдампить напрямик из RAM, там они в чистом виде лежат.


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

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