Как выдрать IPL в декриптованном виде? А именно, в этом IPL лежит файлик в GZIP-формате main.bin из которого извлекается payload.bin. Так вот, ключи к ядру прошивки лежат именно в нём.
Говорят, что можно сдампить декриптованный IPL прямо во время загрузки ядра, в тот момент, когда PRE-IPL в кирке декриптует IPL. А как пойдёт загрузка системы, то ипл стирается из памяти моментом.
У меня уже есть полная коллекция всех ключей включая 5.50. Но вот фактически по одному ключу к каждой модели к системным файлам, даже для 5.50 ни у кого нет до сих пор.
Вот здесь, кстати, ребята уже этот вопрос обсуждали, но я что-то никак не въеду, каким макаром они там что-то ковыряют =)
И здесь что-то непонятное написано: http://forums.ps2dev.org/viewtopic.php?t=3573
Кстати, вот СильверСпринг выложил тут рабочий код, как он говорит, для декриптовки IPL 6.00.
void decryptBuffer(void *seed, int seedSize, u8 *secretKey1, u8 *secretKey2, void *buf, int bufSize)
{
Sfmt19937Ctx ctx;
u8 hmac[28];
u8 xorKey[28];
u8 randomNum[64];
int i, j;
// generate hmac of the seed to be used for initial prng state
sha224Hmac(secretKey1, 64, seed, seedSize, &hmac);
// setup seed state of the pseudo random number generator
u32 *seedArray = (u32*)hmac;
int seedArrayLen = sizeof(hmac)/sizeof(hmac[0]);
sfmt19937Init(&ctx, seedArray, seedArrayLen);
// clear hmac after use
memset(&hmac, 0, sizeof(hmac));
// for each 28-bytes of ciphertext
for (i=0; i<bufSize; i+=28)
{
// generate 64-bytes random number
u32 *r = (u32*)randomNum;
for (j=0; j<16; j++)
r[j] = sfmt19937Uint(&ctx);
// generate 28-byte xor key from the random number
sha224Hmac(secretKey2, 64, randomNum, sizeof(randomNum), &xorKey);
// if ciphertext less than 28-bytes left
if ((bufSize > i) && (bufSize < i+28))
{
// xor remaining bytes to get final plaintext
for (j=0; i+j<bufSize; j++)
*(u8*)(buf+i+j) ^= *(u8*)(xorKey+j);
}
else
{
// xor 28-byte block to get final plaintext
for (j=0; j<28; j+=4)
*(u32*)(buf+i+j) ^= *(u32*)(xorKey+j);
}
}
// clear all buffers
memset(&randomNum, 0, sizeof(randomNum));
memset(&xorKey, 0, sizeof(xorKey) );
memset(&ctx, 0, sizeof(ctx) );
}
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 21.02.2010 в 23:46.
Ну так что. Результаты уже есть и на этом остановились =)
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.
PAYLOAD.BIN извлекается из main.bin, но на этом застряли.
так это может сделать только имеющий psp и умеющий программировать kirk, я тут уже ничего сделать не могу. ну потрясу буржуев значит, один модуль они мне на форуме уже раскриптовали
хорошо бы вообще кто-нибудь организовал на базе psp онлайн http сервис, типа принимает файл, засылает его через usb на psp, на которой крутится в цикле программка вычитывающая в цикле файл с определенным именем, отдает его kirk, результат складывает обратно в файл, http отсылает его обратно. живее б дело шло
main2_enc.bin - вот его нужно подсунуть кирку целиком как есть, а не 4к кусками как ipl, это один сплошной криптованный кусок. но код (команды кирку) тот же каким декриптовались 4k куски ipl. на выходе должен получиться gzip, то есть первый байты 1F 8B
main.bin - он уже декриптован, это первая часть запускаемая из ipl, которая в числе прочего декриптует то что лежит в main2_enc.bin. после его декриптовки суммарно получаем декриптованным весь ipl который изначально грузится в память. соответственно в нем заведомо должны быть ключи которыми он декриптует остальное подгружаемое с флэшки в дальнейшем
Последний раз редактировалось ErikPshat; 05.04.2010 в 05:14.
Отличная работа! Написал бы, как ты main2 натравил на кирк.
Вот эти теги с ключами меня вообщем-то и интересовали. То есть, теги видны, а ключи остаётся дизасмить.
Скрин
Правда их ранее успел извлечь bbtgp. Но суть не в этом.
Дело в том, что до сих пор нету ключей от прошивки 5.50 и 5.55, поэтому системные модули пока не декриптуются. А так-же, нету конечно ключей от 03g и 04g модулей, у которых ключи одинаковые.
Вот на всякий я закинул, что есть из ipl (5.50, 5.55, 6.хх), во вложение.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Последний раз редактировалось ErikPshat; 26.02.2010 в 03:55.
А можно проделать то-же самое с main.bin от 5.50 и 5.55, которые я в предыдущем посту выложил. То есть, вытащить main2_enc.bin, т.к. я этот процесс тоже не понял, каким образом его можно вытащить.
Прошу любить и жаловать, Ваш Добро пожаловать в наш Чат в Telegram
Вопрос ко всем и к Rustot в частности (поскольку у него личка не пашет ввиду отсутствия профиля):Если есть криптованный и декриптованный один и тот же файл, возможно даже и ключ, то возможно ли найти алгоритм повторного криптования декриптованного файла так чтобы закриптованный файл стал полность работоспособным ?
да, иметь полностью декриптованный ipl было бы хорошо.. его можно вручную загружать в нужной последовательности вместо зашифрованного и так загрузить прошивку. а потом уже патчить расшифрованный ipl легко и прочие файлы.
Итак, это все части ipl у нас теперь есть? От какой это точно прошивки?
Вечером пройдусь по ним дизассемблером посмотрю какая часть чего инициализирует и по каким адресам грузит следующую. Потом можно будет попробовать записать их в расшифрованном виде вместо зашифрованных частей.
Ключи мне из них не интересны, ну а кто их хотел тоже теперь все есть.
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
дальше я не разбирался, решил дизасм свой сварганить сначала, интеллектуальный
Последний раз редактировалось rustot; 25.02.2010 в 17:29.
Причина: добавил, подумав
rustot добавил 25-02-2010 в 17:29
дальше я не разбирался, решил дизасм свой сварганить сначала, интеллектуальный
а IDA чем плоха?
спасибо вощем. вечером дальше буду смотреть. надо объединить усилия, подумать, чего мы хотим этим достичь в первую очередь. я вот как писал хочу прежде всего загрузиться с расшифрованного ipl, чтобы убедиться, что все правильно сделали. потом патчить что надо.
спасибо вощем. вечером дальше буду смотреть. надо объединить усилия, подумать, чего мы хотим этим достичь в первую очередь. я вот как писал хочу прежде всего загрузиться с расшифрованного ipl, чтобы убедиться, что все правильно сделали. потом патчить что надо.
ну ida чистый асм, а я не люблю ковыряться в risc. я хочу сделать трэйс регистров на непрерывных кусках кода хотя бы и получить на выходе строчки с реальными действиями а не постоянные пересылки из регистров в регистры. типа такого:
пытаюсь загрузить первую часть ipl вручную с карты - не грузится, но и не виснет, ничего не происходит, а 3 часть виснет.. вторую не могу попробовать пока..
не понятно, почему ipl от оригинальной прошивки из прошивки запускается, а с карточки нет...
Последний раз редактировалось pronvit; 20.03.2010 в 21:37.