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, там они в чистом виде лежат.

lupus 24.01.2014 21:16

Расскажи чем и как это на витке сделать?

frostegater 24.01.2014 23:57

lupus, я сам попробую, объяснить это сложнее. флеш0 в вите представлен "сгустком" памяти - flashspace, таблица лежит по адресу 0x08B00000 и составляет структуру

struct{
char *modname;
void *buffer;
u32 modsize;
} flashspace;

читать память пока пойнтер buffer не станет нулевым. Особо ничего сложного, только я в трусах на заваленом вещами кресле в 8 утра сползаю под стол :D а вообще я лавно работаю над этим вопросом, только инаким путем. Достанем модули.

lupus 25.01.2014 00:26

Ясно, этот метод не для меня. Запасаюсь терпением...
*ушёл играть в наёмника*

lupus 29.01.2014 12:13

Фрости, есть ли сдвиги?

ErikPshat 30.01.2014 06:41

Цитата:

Сообщение от lupus (Сообщение 1083842)
Разбор формата FLASH0.TN

Где-то в какой-то теме я полностью расписывал структуру файла FLASH0.TN.
И даже подменял кастомные файлы в упаковке. Думаю в 7-ой редакции ничего более хитрого не свершилось.

lupus 30.01.2014 11:24

Хм, буду с компа, попробую поискать по твоим постам...
Хотя, со времён tn-c формат немного поменялся, но сжатие, надеюсь, осталось старым.

lupus 30.01.2014 13:48

Эрик, что-то ничего похожего пока не нахожу...

frostegater 30.01.2014 16:40

ErikPshat, в старой версии компрессии не было. Сейчас там какой-то хитрый алгоритм. Вроде LZSS, но модифицированный. Я в принципе сдампил VSH меню, но в байткоде, то есть это не ELF. Сейчас время появится попробую перехват функций из библиотеки LoadExec.

ErikPshat 30.01.2014 20:31

Цитата:

Сообщение от lupus (Сообщение 1083876)
Эрик, что-то ничего похожего пока не нахожу...

Либо старую тему по ТН-С потерли, либо мне показалось, что описывал структуру. Во всяком случае, я тот формат полностью разобрал по полочкам и подсовывал там кастомное наше рекавери или вш меню. Кажись даже пользователям скармливал сборку по приколу.

Думаю здесь ТН наврятли написал свой архиватор, а скорее использовал известрые библиотеки сжатия. Поэтому нужно не отлавливать в памяти модули, а искать по мэйджику первых 4-х байт сжатой области - спецификацию архива.

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

frostegater 31.01.2014 06:25

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

ErikPshat 31.01.2014 10:24

Цитата:

Сообщение от frostegater (Сообщение 1083912)
Тут конкретно контейнер компрессованых файлов и мейджик у каждого ТНовский, фирменный.

Он мог бы сменить только мэйджик в заголовке архивов, а архиватор использовать народный.

Например 1F8B0880 подмняет на что-то свое.

lupus 31.01.2014 21:14

Мог бы, это наиболее логично, но вот что именно он туда запихнул - хз...

ErikPshat 04.02.2014 02:10

Наконец-то добрался до ББ, однако инет у меня мобильный МТС EDGE. Ни роутера. Хитрыми извратными способами удалось приконнектить телефон симбиан к ББ и таким образом выходить в инет с Большого Брата :) Теперь хоть разглядеть форум на большом экране можно.

Что-то я не понял. Вроде речь шла о компрессии FLASH0.TN, но я что-то вижу, что каждый файл в отдельности как-то не так упакован. Пойду искать очки...

lupus 04.02.2014 11:10

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

ErikPshat 04.02.2014 17:06

Балин, недолго длилась радость с ББ. Установил на комп Logitech SetPoint для поддержки клавиатуры и мышки. После этого комп вывалился с синий экран смерти. Теперь даже в "Безопасный режим" не входит. И диска реаниматора нет с собой :(

Так что я пока в ауте.

Кстати, не успел разглядеть хедеры, не мог он подисать модули официальными ключами, например через prxEncrypter?

vash 04.02.2014 19:11

ErikPshat,

lupus 04.02.2014 20:17

Эрик, вот скрин из хекса:

ErikPshat 04.02.2014 21:37

Цитата:

Сообщение от lupus (Сообщение 1084038)
Эрик, вот скрин из хекса:

Посмотри внимательнее в позицию Е8.

lupus 04.02.2014 21:49

Хм, а что там? Не томи... Я с телефона тоже.

ErikPshat 04.02.2014 22:02

Цитата:

Сообщение от lupus (Сообщение 1084044)
Хм, а что там?

Цитата:

Сообщение от ErikPshat (Сообщение 1083913)
Например 1F8B0880



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

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