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 легко и прочие файлы.


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

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