PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   Декриптовка IPL (https://www.pspx.ru/forum/showthread.php?t=86507)

ErikPshat 16.02.2010 01:59

rustot, привет! Хорошая работа.
Хотя нет. Ниасилил.
Поставил Strawberry, сохранил исходник как IPLDecrypt.pl.
Запустил батник из этой папки с командой C:/strawberry/perl/bin/cpan Math::Random::MT
Что-то там долго компилилось, но потом непонятно что вышло ))). В папке span образовалась куча файлов, но не имеющих отношения к программе. А как экзешник скомпилить, я так и не въехал.

Залей лучше на www.slil.ru

rustot 16.02.2010 21:36

бинарник залью вечером, он дома. компилить ничего не нужно, cpan поставил недостающую либу и теперь достаточно выполнить "perl IPLDecrypt.pl part2_nandipl_01g.bin main.bin", при этом psp_bios.bin должен лежать в текущей папке

кстати psp_bios.bin оказывается и есть весь pre-ipl, а не его кусок. там все, и инит оборудования и загрузка ipl с nand или стика и его декриптовка и запуск. а ipl поддерживает две версии pre-ipl, старый который есть у нас и новый, который еще никто не добыл. "if( $sum == ord(substr($ipl,0x28A0)) ) {" как раз патчит ключ в случае если pre-ipl оказался не той версии

rustot добавил 16-02-2010 в 21:23
http://slil.ru/28660285

2 декриптованных модуля, второй требует дополнительной декриптовки kirk

rustot добавил 16-02-2010 в 21:36
ErikPshat, сможешь декриптовать на psp? это тот же код которым например ipl декриптуется, команда №1, ключи не нужны

ErikPshat 16.02.2010 21:44

Вложений: 2
Цитата:

Сообщение от rustot (Сообщение 867480)
теперь достаточно выполнить "perl IPLDecrypt.pl part2_nandipl_01g.bin main.bin"

Спасибо! Разобрался сегодня. Действительно всё верно декриптится. Только странно, что это выдаётся только после предварительной декриптовки PSARDamper-ом в два прохода.

Щас попробую дальше...

А нельзя просто выдернуть декриптованный IPL полностью?
Кстати, что-то в main.bin не нашёл в прямом виде ключей. Слышал ещё про payload.bin, который находится тоже упакованный в main.bin и в котором эти ключи уж точно содержатся.
Просто я исследовл main.bin от 2.00, и там ключи лежали на поверхности.

Цитата:

Сообщение от rustot (Сообщение 867480)
ErikPshat, сможешь декриптовать на psp? это тот же код которым например ipl декриптуется, команда №1, ключи не нужны

Можно поподробнее.
Я-же всё-таки не программист, а просто любитель, поэтому мне не совсем понятны команды №1 и т.п.

Вот во вложении Пёрл-PC-декриптер. Декриптует он part2_nandipl_0Xg.bin, извлечённый и частично декриптованный (1-ая секция) PSARDumper-ом или программой "IPL Decrypt Sample" от SilverSpring-а.

rustot 17.02.2010 10:14

Цитата:

Сообщение от ErikPshat (Сообщение 867618)
А нельзя просто выдернуть декриптованный IPL полностью?
Кстати, что-то в main.bin не нашёл в прямом виде ключей. Слышал ещё про payload.bin, который находится тоже упакованный в main.bin и в котором эти ключи уж точно содержатся.
Просто я исследовл main.bin от 2.00, и там ключи лежали на поверхности.

ipl сначала раскриптовывыется аппаратной криптовалкой kirk, потом програмной криптовалкой из него вытаскивается main.bin, потом программной криптовалкой из main.bin вытаскивается еще один модуль (наверное это и есть payload.bin), но он закриптован дважды, программно я его декриптовал и теперь нужно декриптовать аппаратным kirk на psp.

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

Код:

u8 buf[0x80000];
...
ReadFile("ms0:/main2_enc.bin", buf, 0x80000);
PspKirkRegs *const crypt = KIRK_HW_REGISTER_ADDR;
crypt->command = 1;
crypt->src_addr = crypt->dst_addr = MAKE_PHYS_ADDR(&buf);
crypt->proc_phase = 1;
while((crypt->status & 0x11) == 0);
crypt->status_end = crypt->status;
SYNC();
WriteFile("ms0:/dec_ipl.bin", ipl, 0x80000);

это выдрано для примера из другого кода, но наверняка есть готовые тулзы, я просто не знаю

stillllll 17.02.2010 13:09

В упоминавшемся чуть выше IPLSDK есть функция
int pspKirkProc(void *dst,u32 dsize,void *src,u32 ssize,u32 cmd);
которая делает приблизительно тоже самое. Может быть просто сделать IPL для мультилоадера, который сделает все необходимые действия.

rustot 17.02.2010 13:14

Цитата:

Сообщение от stillllll (Сообщение 867725)
В упоминавшемся чуть выше IPLSDK есть функция
int pspKirkProc(void *dst,u32 dsize,void *src,u32 ssize,u32 cmd);
которая делает приблизительно тоже самое. Может быть просто сделать IPL для мультилоадера, который сделает все необходимые действия.

если кому не лень встраивать этот декриптовочный код в дампер, то да, это было бы логичнее чем декриптовать несколько раз то на psp то на pc. исходники необходимых sha224 sha256 mt sfmt на сях есть, чуть подправить и вкомпилить

в принципе на psp даже и декриптовать не надо, зная код можно брекпоинты в нужные места вставить и сдампить уже декриптованное из памяти. но только эти нужные места будут от версии к версии меняться

stillllll 17.02.2010 13:18

Цитата:

Сообщение от rustot (Сообщение 867726)
в принципе на psp даже и декриптовать не надо, зная код можно брекпоинты в нужные места вставить и сдампить уже декриптованное из памяти. но только эти нужные места будут от версии к версии меняться

Я конечно не уверен на все 100%, но мне кажется что врядли существуют средства, чтобы отлаживать на PSP в такие моменты как загрузка и выполнение IPL.

rustot 17.02.2010 13:30

Цитата:

Сообщение от stillllll (Сообщение 867729)
Я конечно не уверен на все 100%, но мне кажется что врядли существуют средства, чтобы отлаживать на PSP в такие моменты как загрузка и выполнение IPL.

так в своем собственном ipl это делать, как тот же мультилоадер. запускается твой ipl, копирует себя куда-нибудь, загружает на законное место родной ipl, декриптует его, подменяет инструкци перехода на main.bin на переход на себя, запускает стандартный ipl, ловит момент перехода на main.bin, дампит его декриптованным. подменяет в main.bin переход на второй декриптованный модуль, запускает main.bin, ловит момент когда пытался перейти на второй модуль - к тому времени он декриптован и можно его дампить

ErikPshat 17.02.2010 18:10

Такс, что дальше?

stillllll 17.02.2010 18:28

Цитата:

Сообщение от ErikPshat (Сообщение 867774)
Такс, что дальше?

Замутить IPL, который возьмет main2_enc.bin с мемористик, скормит KIRK, и результат запишет обратно на карточку, для этого все в IPLSDK есть.
Только я хз как его скармливать KIRK, полностью, кусками по 0x1000 байт, начиная сначала или со смещения 0x90 и т.п.

rustot 17.02.2010 22:12

Цитата:

Сообщение от stillllll (Сообщение 867778)
Замутить IPL, который возьмет main2_enc.bin с мемористик, скормит KIRK, и результат запишет обратно на карточку, для этого все в IPLSDK есть.
Только я хз как его скармливать KIRK, полностью, кусками по 0x1000 байт, начиная сначала или со смещения 0x90 и т.п.

целиком, одним куском. как я выше пример привел, считать из файла, вход выход указать один и тот же, вызвать kirk и сохранить

rustot добавил 17-02-2010 в 22:12
это из обычного приложения можно делать, как psardumper, не в режиме загрузки ipl

stillllll 17.02.2010 23:26

Вобщем я стал искать описание структуры PspKirkRegs и нашел у SilverSpring http://my.malloc.us/silverspring/200...ect-hw-access/
Там он декриптит с помощью KIRK блоками по 0x1000.

rustot 18.02.2010 01:38

Цитата:

Сообщение от stillllll (Сообщение 867827)
Вобщем я стал искать описание структуры PspKirkRegs и нашел у SilverSpring http://my.malloc.us/silverspring/200...ect-hw-access/
Там он декриптит с помощью KIRK блоками по 0x1000.

это процесс чтения ipl из флэша, блок 4 сектора считали, раскриптовали, чексум проверили, читаем следующий. а это уже не ipl, это уже второй модуль грузящийся после ipl. загрузился pre-ipl -> загрузил ipl -> ipl раскриптовл main.bin -> main.bin раскриптовал еще один модуль, который закриптован дважды, первый раз кирком, второй вручную. то что вручную я раскриптовал

ErikPshat 18.02.2010 01:47

А это что за KIRK Crypto Engine

rustot 18.02.2010 15:38

kirk это и есть главная тайна psp, аппаратная криптовалка. и если часть команд у нее известно что делает и воспроизводима программно, лишь бы знать ключи, то команда №1 тайна за семью печатью, ключей не требует и работает только в одну сторону - на декриптование. а симметриная функция криптования доступна только сони. вот и получается, что декриптовать и посмотреть код от сони мы можем (при наличии ломаной psp для доступа к кирку) а вот собственный код закриптовать так, чтобы его поняла psp - не можем.

то что я выше в качестве примера привел и есть прямой доступ к кирку, KIRK_HW_REGISTER_ADDR там равен 0xBDE00000

ErikPshat 19.02.2010 07:53

Цитата:

Сообщение от rustot (Сообщение 867845)
загрузился pre-ipl -> загрузил ipl -> ipl раскриптовл main.bin -> main.bin раскриптовал еще один модуль, который закриптован дважды, первый раз кирком, второй вручную. то что вручную я раскриптовал

Так ты расшифровал последний модуль окончательно? Можно взглянуть на него?

Вот ещё инфу надыбал: http://silverspring.lan.st/NPSPTD_01.txt
Это отсюда: http://www.lan.st/showthread.php?p=16132#post16132
Ага, вижу тебя там )

stillllll 19.02.2010 08:34

Цитата:

Сообщение от ErikPshat (Сообщение 868040)
Так ты расшифровал последний модуль окончательно?

Мне кажется, что без тебя (твой PSP) это невозможно =)

Вобщем код, для расшифровки я попробовал написать еще позавчера, но он как всегда не работает, а отладить/потестить мне нечем. Псплинк заставить работать у меня не получается. На файле который нужно расшифровать, моя psp просто выключается (не виснет как при косячном коде, а просто выключается, мгновенно)

А править код SilverSpring во второй раз мне чот уже как-то =).

ErikPshat 19.02.2010 08:59

stillllll, ну моя PSP полностью заряжена и ждёт указаний =)

Кстати, пробовал декриптить nandipl_01g.bin от 6.20 с помощью декриптера от СильверСпринга, то на выходе получается точно такой-же файл, как из PSARDumper-a part2_nandipl_01g.bin.

Но вот nandipl_02g.bin и nandipl_03g.bin дампер Сильвера уже не берёт, выдаёт ошибку.

Хотя PSARDumper выдаёт нормальный part2_nandipl_02g.bin, но вот part2_nandipl_03g.bin уже никто не даёт =)

Пёрл 01g отлично дампит и 02g дампит. Сначала забыл расширение поменять.

И ещё, смотрел я долго в main.bin на этот код, как будто он там зашифрован:

И есть ещё точно такого-же размера область пониже в конце, но я сравнил с main.bin от 5.50, а они одинаковые. Она тоже похожа на зашифрованную или просто на специальный код. Короче, я взял эту область отксорил с предыдущей областью и получился очень прикольный код при сравнении между собой, очень похожий, если сравнить part1_nandipl_01g.bin с part2_nandipl_01g.bin

ErikPshat 22.02.2010 01:32

Ну так что. Результаты уже есть и на этом остановились =)
  1. IPL декриптуется с помощью "IPL Decrypt Sample" от SilverSpring и получаем на выходе dec_ipl.bin, аналогичный part2_nandipl_0Xg.bin из PSARDumper.
  2. psp_bios.bin универсальный извлекли с помощью "ML_BIOS_DUMPER" от SilverSpring во время загрузки PSP путём подстановки вместо запуска DDCv5.
  3. MAIN.BIN извлекли из dec_ipl.bin с помощью кода под Perl благодаря rustot
  4. PAYLOAD.BIN извлекается из main.bin, но на этом застряли.
По моему, после включения PSP, всё должно декриптоваться в память сразу-же - IPL->MAIN.BIN->PAYLOD.BIN.
И наверное они должны храниться в памяти друг за другом, а не затирать друг друга.

Кстати, есть ещё такие проги "Kernel Damper Sample" из pspsdk и "DAMPKMEM" с исходниками от TiRaNiD. Причём первая работает и на 3.хх kernel и выводит мизер информации, а вторая работает только на 1.5 kernel и выводит кучу всякой инфы на экран.

Так вот, они тоже что-то дампят =)
Например какой-то файл boot.bin (1Mb) и kmem.bin (4Mb).

pronvit 23.02.2010 19:44

да, иметь полностью декриптованный ipl было бы хорошо.. его можно вручную загружать в нужной последовательности вместо зашифрованного и так загрузить прошивку. а потом уже патчить расшифрованный ipl легко и прочие файлы.

rustot 24.02.2010 11:10

Цитата:

Сообщение от ErikPshat (Сообщение 868706)
PAYLOAD.BIN извлекается из main.bin, но на этом застряли.

так это может сделать только имеющий psp и умеющий программировать kirk, я тут уже ничего сделать не могу. ну потрясу буржуев значит, один модуль они мне на форуме уже раскриптовали

хорошо бы вообще кто-нибудь организовал на базе psp онлайн http сервис, типа принимает файл, засылает его через usb на psp, на которой крутится в цикле программка вычитывающая в цикле файл с определенным именем, отдает его kirk, результат складывает обратно в файл, http отсылает его обратно. живее б дело шло

pronvit 24.02.2010 13:31

rustot, могу сейчас попробовать запрограммить, если пришлешь чего прогнать через kirk.

rustot 25.02.2010 15:27

Цитата:

Сообщение от pronvit (Сообщение 869165)
rustot, могу сейчас попробовать запрограммить, если пришлешь чего прогнать через kirk.

я ж выше давал

http://slil.ru/28660285

main2_enc.bin - вот его нужно подсунуть кирку целиком как есть, а не 4к кусками как ipl, это один сплошной криптованный кусок. но код (команды кирку) тот же каким декриптовались 4k куски ipl. на выходе должен получиться gzip, то есть первый байты 1F 8B

main.bin - он уже декриптован, это первая часть запускаемая из ipl, которая в числе прочего декриптует то что лежит в main2_enc.bin. после его декриптовки суммарно получаем декриптованным весь ipl который изначально грузится в память. соответственно в нем заведомо должны быть ключи которыми он декриптует остальное подгружаемое с флэшки в дальнейшем

pronvit 25.02.2010 15:47

Вложений: 2
держи...

rustot 25.02.2010 16:24

отлично, спасибо. вроде ничего больше криптованного не видно

pronvit 25.02.2010 17:08

Итак, это все части ipl у нас теперь есть? От какой это точно прошивки?
Вечером пройдусь по ним дизассемблером посмотрю какая часть чего инициализирует и по каким адресам грузит следующую. Потом можно будет попробовать записать их в расшифрованном виде вместо зашифрованных частей.
Ключи мне из них не интересны, ну а кто их хотел тоже теперь все есть.

rustot 25.02.2010 17:29

это 6.20

pre_ipl грузится с BFC00000, пересылает кусок себя в 80010000, оттуда покусочно грузит ipl по тем адресам какие в заголовках 4k блоков указаны. нынче это 40EC000

у загруженного ipl, несмотря на то что его весь декриптовали кирком реально декриптованы только первые 10к, которые и декриптуют все остальное

первым декриптуется и распаковывается по адресу 4000000 то что обозвано у меня main.bin. на него и передается управление. тот сначала декриптует 256-байтный кусок получая из него 32 байта каких то двух ключей (см дамп выше), оставляет декриптованное в BFC00200 для последующего использования. потом декриптует сначала софтом а потом кирком то что названо main2_enc.bin, вот адрес не помню куда складывает, там 8 и 6, типа 8060000 или 8600000 или как то так. там это все в начале main.bin, найти не сложно

rustot добавил 25-02-2010 в 17:29
дальше я не разбирался, решил дизасм свой сварганить сначала, интеллектуальный :)

pronvit 25.02.2010 17:43

Цитата:

Сообщение от rustot (Сообщение 869460)
rustot добавил 25-02-2010 в 17:29
дальше я не разбирался, решил дизасм свой сварганить сначала, интеллектуальный :)

а IDA чем плоха?

спасибо вощем. вечером дальше буду смотреть. надо объединить усилия, подумать, чего мы хотим этим достичь в первую очередь. я вот как писал хочу прежде всего загрузиться с расшифрованного ipl, чтобы убедиться, что все правильно сделали. потом патчить что надо.

rustot 25.02.2010 18:02

Цитата:

Сообщение от pronvit (Сообщение 869469)
а IDA чем плоха?

спасибо вощем. вечером дальше буду смотреть. надо объединить усилия, подумать, чего мы хотим этим достичь в первую очередь. я вот как писал хочу прежде всего загрузиться с расшифрованного ipl, чтобы убедиться, что все правильно сделали. потом патчить что надо.

ну ida чистый асм, а я не люблю ковыряться в risc. я хочу сделать трэйс регистров на непрерывных кусках кода хотя бы и получить на выходе строчки с реальными действиями а не постоянные пересылки из регистров в регистры. типа такого:

Код:

                                                      //80010000: lui    R4, 0x8001
                                                      //80010004: addiu  R4, R4, 0xA80
    sub_800106B0(0x80010A80)                          //80010008: jal    sub_800106B0
                                                      //8001000C: sll    R0, R0, 0
                                                      //80010010: lui    R8, 0xBC10
                                                      //80010014: lw      R9, 0x68(R8)
                                                      //80010018: srl    R9, R9, 16
    if(!(M(0xBC100068) >> 16)) goto loc_80010034      //8001001C: beq    R9, R0, loc_80010034
                                                      //80010020: sll    R0, R0, 0
                                                      //80010024: lw      R9, 0x78(R8)
                                                      //80010028: ori    R9, R9, 0x800
    M(0xBC100078) |= 0x800                            //8001002C: beq    R0, R0, loc_80010040
    goto loc_80010040                                //80010030: sw      R9, 0x78(R8)


pronvit 25.02.2010 18:07

а, в этом смысле.. а я чего-то привык уже)) ну pspdecompiler есть, с исходниками..

ErikPshat 26.02.2010 03:55

Вложений: 1
Цитата:

Сообщение от pronvit (Сообщение 869441)

Отличная работа! Написал бы, как ты main2 натравил на кирк.
Вот эти теги с ключами меня вообщем-то и интересовали. То есть, теги видны, а ключи остаётся дизасмить.

Правда их ранее успел извлечь bbtgp. Но суть не в этом.
Дело в том, что до сих пор нету ключей от прошивки 5.50 и 5.55, поэтому системные модули пока не декриптуются. А так-же, нету конечно ключей от 03g и 04g модулей, у которых ключи одинаковые.

Вот на всякий я закинул, что есть из ipl (5.50, 5.55, 6.хх), во вложение.

pronvit 26.02.2010 14:03

так там очень просто, собственно как в любом дешифраторе prxов после преобразовани заголовка.

Код:

SceUID fd = sceIoOpen("ms0:/enc.bin", PSP_O_RDONLY, 0);
int cbFile = sceIoLseek32(fd, 0, PSP_SEEK_END);
sceIoLseek32(fd, 0, PSP_SEEK_SET);
sceIoRead(fd, data, cbFile);
int retsize = *(u32*)&data[0x70];
int ret = sceUtilsBufferCopyWithRange(data, cbFile, data, cbFile, 0x1);
WriteFile("ms0:/dec.bin", data, retsize);
sceIoClose(fd);


ErikPshat 28.02.2010 00:40

Цитата:

Сообщение от rustot (Сообщение 869439)
я ж выше давал

http://slil.ru/28660285

main2_enc.bin

А можно проделать то-же самое с main.bin от 5.50 и 5.55, которые я в предыдущем посту выложил. То есть, вытащить main2_enc.bin, т.к. я этот процесс тоже не понял, каким образом его можно вытащить.

ANDPSP 12.03.2010 17:50

Повторное криптование
 
Вопрос ко всем и к Rustot в частности (поскольку у него личка не пашет ввиду отсутствия профиля):Если есть криптованный и декриптованный один и тот же файл, возможно даже и ключ, то возможно ли найти алгоритм повторного криптования декриптованного файла так чтобы закриптованный файл стал полность работоспособным ?

pronvit 12.03.2010 18:53

Цитата:

Сообщение от ANDPSP (Сообщение 872811)
Вопрос ко всем и к Rustot в частности (поскольку у него личка не пашет ввиду отсутствия профиля):Если есть криптованный и декриптованный один и тот же файл, возможно даже и ключ, то возможно ли найти алгоритм повторного криптования декриптованного файла так чтобы закриптованный файл стал полность работоспособным ?

теоритически возможно. как примерно устроен алгоритм тоже известно (AES и все такое).

а практически как-то вот что-то пока не очень.

правда datel вон умеют закриптовывать свои бинарники...

кстати, для достижения желаемого результата надо сидеть и долго смотреть на два дателовских бинарника. у них разные заголовки для kirk по 0x40 байт и разное тело, а расшифровываются они в одно и то же. можно сделать некоторые выводы..

ANDPSP 15.03.2010 17:43

Кто может посоветовать какой нить софт для криптовки/декриптовки с использованием ключа, работающий на PC. И есть ли какие нить проги анализирующие два файла (криптованный и декриптованный) и дающие какие нить рекомендации что ли по переводу одного в другое... И где можно посмотреть инфу по алгоритмам применяемым в кодировании софта PSP (это точно AES или какой то еще метод применяется)? может где то есть исходники PRX-декрипторов которые работают на PC а не на PSP ?

pronvit 20.03.2010 13:37

пытаюсь загрузить первую часть ipl вручную с карты - не грузится, но и не виснет, ничего не происходит, а 3 часть виснет.. вторую не могу попробовать пока..

не понятно, почему ipl от оригинальной прошивки из прошивки запускается, а с карточки нет...


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

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