rustot, привет! Хорошая работа.
Хотя нет. Ниасилил.
Поставил Strawberry, сохранил исходник как IPLDecrypt.pl.
Запустил батник из этой папки с командой C:/strawberry/perl/bin/cpan Math::Random::MT
Что-то там долго компилилось, но потом непонятно что вышло ))). В папке span образовалась куча файлов, но не имеющих отношения к программе. А как экзешник скомпилить, я так и не въехал.
бинарник залью вечером, он дома. компилить ничего не нужно, 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 оказался не той версии
теперь достаточно выполнить "perl IPLDecrypt.pl part2_nandipl_01g.bin main.bin"
Спасибо! Разобрался сегодня. Действительно всё верно декриптится. Только странно, что это выдаётся только после предварительной декриптовки PSARDamper-ом в два прохода.
Щас попробую дальше...
А нельзя просто выдернуть декриптованный IPL полностью?
Кстати, что-то в main.bin не нашёл в прямом виде ключей. Слышал ещё про payload.bin, который находится тоже упакованный в main.bin и в котором эти ключи уж точно содержатся.
Просто я исследовл main.bin от 2.00, и там ключи лежали на поверхности.
Сообщение от rustot
ErikPshat, сможешь декриптовать на psp? это тот же код которым например ipl декриптуется, команда №1, ключи не нужны
Можно поподробнее.
Я-же всё-таки не программист, а просто любитель, поэтому мне не совсем понятны команды №1 и т.п.
Вот во вложении Пёрл-PC-декриптер. Декриптует он part2_nandipl_0Xg.bin, извлечённый и частично декриптованный (1-ая секция) PSARDumper-ом или программой "IPL Decrypt Sample" от SilverSpring-а.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 05.04.2010 в 05:12.
А нельзя просто выдернуть декриптованный IPL полностью?
Кстати, что-то в main.bin не нашёл в прямом виде ключей. Слышал ещё про payload.bin, который находится тоже упакованный в main.bin и в котором эти ключи уж точно содержатся.
Просто я исследовл main.bin от 2.00, и там ключи лежали на поверхности.
ipl сначала раскриптовывыется аппаратной криптовалкой kirk, потом програмной криптовалкой из него вытаскивается main.bin, потом программной криптовалкой из main.bin вытаскивается еще один модуль (наверное это и есть payload.bin), но он закриптован дважды, программно я его декриптовал и теперь нужно декриптовать аппаратным kirk на psp.
как именно - я не очень в курсе, должны быть какие-то готовые тулзы. код должен выглядеть примерно так:
В упоминавшемся чуть выше IPLSDK есть функция
int pspKirkProc(void *dst,u32 dsize,void *src,u32 ssize,u32 cmd);
которая делает приблизительно тоже самое. Может быть просто сделать IPL для мультилоадера, который сделает все необходимые действия.
В упоминавшемся чуть выше IPLSDK есть функция
int pspKirkProc(void *dst,u32 dsize,void *src,u32 ssize,u32 cmd);
которая делает приблизительно тоже самое. Может быть просто сделать IPL для мультилоадера, который сделает все необходимые действия.
если кому не лень встраивать этот декриптовочный код в дампер, то да, это было бы логичнее чем декриптовать несколько раз то на psp то на pc. исходники необходимых sha224 sha256 mt sfmt на сях есть, чуть подправить и вкомпилить
в принципе на psp даже и декриптовать не надо, зная код можно брекпоинты в нужные места вставить и сдампить уже декриптованное из памяти. но только эти нужные места будут от версии к версии меняться
в принципе на psp даже и декриптовать не надо, зная код можно брекпоинты в нужные места вставить и сдампить уже декриптованное из памяти. но только эти нужные места будут от версии к версии меняться
Я конечно не уверен на все 100%, но мне кажется что врядли существуют средства, чтобы отлаживать на PSP в такие моменты как загрузка и выполнение IPL.
Я конечно не уверен на все 100%, но мне кажется что врядли существуют средства, чтобы отлаживать на PSP в такие моменты как загрузка и выполнение IPL.
так в своем собственном ipl это делать, как тот же мультилоадер. запускается твой ipl, копирует себя куда-нибудь, загружает на законное место родной ipl, декриптует его, подменяет инструкци перехода на main.bin на переход на себя, запускает стандартный ipl, ловит момент перехода на main.bin, дампит его декриптованным. подменяет в main.bin переход на второй декриптованный модуль, запускает main.bin, ловит момент когда пытался перейти на второй модуль - к тому времени он декриптован и можно его дампить
Замутить IPL, который возьмет main2_enc.bin с мемористик, скормит KIRK, и результат запишет обратно на карточку, для этого все в IPLSDK есть.
Только я хз как его скармливать KIRK, полностью, кусками по 0x1000 байт, начиная сначала или со смещения 0x90 и т.п.
Замутить IPL, который возьмет main2_enc.bin с мемористик, скормит KIRK, и результат запишет обратно на карточку, для этого все в IPLSDK есть.
Только я хз как его скармливать KIRK, полностью, кусками по 0x1000 байт, начиная сначала или со смещения 0x90 и т.п.
целиком, одним куском. как я выше пример привел, считать из файла, вход выход указать один и тот же, вызвать kirk и сохранить
rustot добавил 17-02-2010 в 22:12
это из обычного приложения можно делать, как psardumper, не в режиме загрузки ipl
Последний раз редактировалось rustot; 17.02.2010 в 22:12.
Причина: добавил, подумав
это процесс чтения ipl из флэша, блок 4 сектора считали, раскриптовали, чексум проверили, читаем следующий. а это уже не ipl, это уже второй модуль грузящийся после ipl. загрузился pre-ipl -> загрузил ipl -> ipl раскриптовл main.bin -> main.bin раскриптовал еще один модуль, который закриптован дважды, первый раз кирком, второй вручную. то что вручную я раскриптовал
kirk это и есть главная тайна psp, аппаратная криптовалка. и если часть команд у нее известно что делает и воспроизводима программно, лишь бы знать ключи, то команда №1 тайна за семью печатью, ключей не требует и работает только в одну сторону - на декриптование. а симметриная функция криптования доступна только сони. вот и получается, что декриптовать и посмотреть код от сони мы можем (при наличии ломаной psp для доступа к кирку) а вот собственный код закриптовать так, чтобы его поняла psp - не можем.
то что я выше в качестве примера привел и есть прямой доступ к кирку, KIRK_HW_REGISTER_ADDR там равен 0xBDE00000
загрузился pre-ipl -> загрузил ipl -> ipl раскриптовл main.bin -> main.bin раскриптовал еще один модуль, который закриптован дважды, первый раз кирком, второй вручную. то что вручную я раскриптовал
Так ты расшифровал последний модуль окончательно? Можно взглянуть на него?
Мне кажется, что без тебя (твой PSP) это невозможно =)
Вобщем код, для расшифровки я попробовал написать еще позавчера, но он как всегда не работает, а отладить/потестить мне нечем. Псплинк заставить работать у меня не получается. На файле который нужно расшифровать, моя psp просто выключается (не виснет как при косячном коде, а просто выключается, мгновенно)
А править код SilverSpring во второй раз мне чот уже как-то =).
Последний раз редактировалось stillllll; 19.02.2010 в 08:35.
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
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 19.02.2010 в 09:36.
Ну так что. Результаты уже есть и на этом остановились =)
IPL декриптуется с помощью "IPL Decrypt Sample" от SilverSpring и получаем на выходе dec_ipl.bin, аналогичный part2_nandipl_0Xg.bin из PSARDumper.
psp_bios.bin универсальный извлекли с помощью "ML_BIOS_DUMPER" от SilverSpring во время загрузки PSP путём подстановки вместо запуска DDCv5.
MAIN.BIN извлекли из dec_ipl.bin с помощью кода под Perl благодаря rustot
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).
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 22.02.2010 в 02:19.
да, иметь полностью декриптованный ipl было бы хорошо.. его можно вручную загружать в нужной последовательности вместо зашифрованного и так загрузить прошивку. а потом уже патчить расшифрованный ipl легко и прочие файлы.