PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Горячая линия по PSP (https://www.pspx.ru/forum/forumdisplay.php?f=87)
-   -   Обсуждение взлома Pre-ipl (https://www.pspx.ru/forum/showthread.php?t=90709)

R122 10.03.2011 12:05

Обсуждение взлома Pre-ipl
 
Как я понял из текстов про pre-ipl
Тока не надо орать (ты что иди*т или что-то в этом роде если вам не нравится тема админы можете закрывать)

Примерный принцип работы PreIPL эксплоита

Структура дешифрованного IPL блока:
0x00: загрузочный адрес
0x04: размер данных
0x08: адреса входа
0x0C: контроль сумма предыдущего блока
0x10: данные
Пример:
0x040F1EA0
0x00000F50
0x00000000
0xB71C6EBA
…data…
Что означает: загрузить 0xF50 байт данных по адресу 0x040F1EA0, контрольная сумма предыдущего блока - 0xB71C6EBA. Адрес входа равен 0, так как это непоследний блок. Как только последний блок будет загружен, в нем будет указан адрес входа – то, куда был загружен IPL (обычно 0x040F0000). После чего будет совершен переход по этому адресу.

Псевдокод PreIPL для загрузки и дешифрования IPL:
int iplBlockNumber = 0;
u32 checksum = 0;

// загрузка/дешифрование всех блоков IPL
while(1)
{
// копирования зашифрованных блоков IPL в 0xBFD00000-0xBFD01000 (4Кб встроенной ОЗУ ЦПУ)
if (LoadIplBlock(iplBlockNumber, block) <0)
while(1);

// дешифрование блоков IPL «на месте» (ой-ой)
if (DecryptIplBlock(block, block))
while(1);

// Первый блок будет содержать в себе нули в качестве контрольной суммы,
// так как нет предыдущего блока (еще один ой-ой)

if (block->checksum != checksum)
while(1);

// загрузка секции с данными блока IPL по определенному адресу (0x040Fxxxx диапазон)
if (block->loadaddr)
checksum = memcpy(block->loadaddr, block->data, block->blocksize);

// при достижении конца IPL – переход по адресу входа (0x040F0000)
if (block->entry)
{
// очистка кеша
Dcache();
Icache();

// переход к ipl – больше не возвращается
block->entry();
}
iplBlockNumber++;
}
Когда PreIPL загружает первый блок IPL (подложный), то происходит дешифрование «на месте», то есть дешифрованный блок записывается прямо поверх этого же зашифрованного блока. Поскольку подложный блок хитро сформирован, то будут стерты нулями только первые четыре байта подложного блока, сохранив полезную нагрузку.

Подложный подписанный блок IPL:
00000000: 00 00 00 00 00 00 00 00 00 01 D0 BF 00 00 00 00
00000010: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000020: 52 A1 05 CD 3A 52 59 28 0A D1 31 F1 BD 87 2E CC
00000030: 14 DA 02 2F 77 88 C7 66 F3 32 07 BD 1A 08 9E 4C

00000040: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000060: 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

00000070: 04 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00
00000080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00000090: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

000000A0: 00 00 00 00 00 00 00 00 00 00 00 01 C6 5F 74 12
Важные моменты:
0x20-0x3F – подобранная хеш-подпись
0xA0-0xAF – подобранная зашифрованная информация
0x70-0x73 – размер данных для дешифрования (только 4 байта)
Эта ошибка в криптографическом модуле позволила упростить брутфорс во много-много раз.

После дешифрования PreIPL считает, что данный блок IPL уже дешифрован.

Обратите внимание на первые 0x10 байт:
0x00000000 (загрузочный адрес подложен на нули после дешифрования)
0x00000000 (размер блока для загрузки - нет)
0xBFD00100 (адрес входа, где и расположен неподписанный код)
0x00000000 (контрольная сумма)
Проверка контрольной суммы проходится благодаря 0x00000000, затем никакая информация уже не загружается, так как адрес загрузки подменен на 0x00000000, затем обнаруживается адрес входа 0xBFD00100, так что PreIPL считает, что IPL закончился, после чего происходит переход по адресу (где и расположен неподписанный код).

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

Так что же Sony изменила в новых PreIPL?

При загрузке PSP PreIPL загружает IPL из NAND Flash или карты памяти. IPL разбит на блоки по 0x1000 байт. Первые 0xA0 байт каждого блока - это заголовки для KIRK-аппаратных комманд. Содержит ключи, размер зашифрованной информации и два хеша: один хеш заголовка, второй - для тела блока. Остальные 0xF60 байт - зашифрованное тело, которые расшифровываются в 0xF60 обычных байт... если хэши, которые проверяются kirk-аппаратом, пройдут проверку. (Зашифрованное тело может быть меньше, чем 0xF60, в этом случае, оставшиеся байты игнорировались в старых платах до выхода ТА88v3).

Защита старой PreIPL была нарушена временной атакой, описанной выше.

Что же сделали в Sony для защиты?

Ответ лежит в 4.00+ «слимовских» IPL. Они уменьшили размер шифрованного тела до 0xF40 для того, чтобы оставить 0x20 байт в конце каждого блока (начиная с 0xFE0).
Раньше эти байты игнорировались, их значение могло быть случайными, но IPL успешно загружала прошивку PSP. Но для новых PreIPL эти байты имеют значение.

Первые 0x10 байт - это неизвестный хеш, вычисляемый по некоторому алгоритму из расшифрованного блока. Выяснено, что хеш высчитывается из расшифрованного блока, а не зашифрованного, так как прошивки 4.01 и 4.05 имеют много общего в IPL блоках, когда они расшифрованны, но совершенно различны зашифрованными. В этих двух IPL, этот хеш одинаков, как показано на рисунке:


Вторые 0x10 байт скорее всего тоже зависят от расшифрованного блока (и может еще от первых 0x10 байт). На рисунке видно, что они разные. Они могут быть взаимозаменяемы, но случайными эти байты быть не могут.

Эта защита также исключает любую возможность даунгрейда ниже 4.00, так как новые CPU не запустят старые IPL.

Итого: защита новых PSP основана на тайне вычисления этих 0x20 байт. Основная проблема – неизвестно как сделать дамп PreIPL, скорее всего это можно сделать только аппаратным путем.

Вопрос если снять снять Dump с NAND"а то все получится но есть такая идея если спаять спец плату плату чтобы снять нанд дамп же не получится? Кому psp не жалко? :blush:
А если кирка переписать?

DIIGMO 10.03.2011 12:48

А источник у нас не принято называть?
http://pspfaqs.ru/faqs/534-uglublyae..._i_preipl.html

Цитата:

Сообщение от R122 (Сообщение 947917)
Вопрос если снять снять Dump с NAND"а то все получится но есть такая идея если спаять спец плату плату чтобы снять нанд дамп же не получится? Кому psp не жалко?
А если кирка переписать?

А вот что добавил автор темы

Единственный вывод
Цитата:

Сообщение от R122 (Сообщение 947917)
что иди*т или что-то в этом роде

Обсуждатель блин.

frostegater 10.03.2011 12:55

R122, как я понимаю, что не понимающий человек (нуб, уж извини меня) создал тему в которой сам ничего не понял, да еще и скопипастил её отсюда (ух... как за это в лоб бы дал)

Цитата:

Вопрос если снять снять Dump с NAND"а то все получится но есть такая идея если спаять спец плату плату чтобы снять нанд дамп же не получится?
Нельзя никак и это 99%, 100% я никогда не беру, т.к. мне не позволяет это сделать теория вероятности или как её там (мы ещё не проходили).
И вообще pre-IPL - это не NAND. Поучил бы мат часть для начала. pre-IPL - это чип встроеный в CPU, который контролирует все сигналы, подаваемые из flash0 по MD5 (хеш), а хеш подделать нереально вот теперь 101% (с) SilverSpring. Его буквально даже топором вырубать, не поможет.

А программатором - это надо вытаскивать проц. и подключать к супер программатору. У нас тут есть один человек - Boryan, он бы занялся этим, но ему на это пофиг, т.к. он занят взломом батарейки пандоры для 3000

Frostegater добавил 10.03.2011 в 12:55
А да и ещё
Цитата:

Pre-IPL – это аппаратная часть PSP, без возможности программного обновления.
(с) pspfaqs.ru



Цитата:

Пандора на 3008PSP
(в подписи)
И после этого ты чтото говоришь о взломе. У Yoti скопировал прикол. Да ты мастер копипасты :D

DIIGMO 10.03.2011 12:59

Цитата:

Сообщение от Frostegater (Сообщение 947923)
(в подписи)
И после этого ты чтото говоришь о взломе. У Yoti скопировал прикол. Да ты мастер копипасты

Вначале у него вообще был мегаприкол "кастом прошивка на 3008", и те, кто считают, что это существует - идиоты xDxD
И, почему именно 3008, а для остальных моделей 300х она есть?
Хотя
Цитата:

Сообщение от R122 (Сообщение 947917)
Прошивка: 5.03DT-II

этим, как по мне всё сказано xDxD

R122 10.03.2011 15:20

Цитата:

Сообщение от Ditemzy (Сообщение 947926)
Вначале у него вообще был мегаприкол "кастом прошивка на 3008", и те, кто считают, что это существует - идиоты xDxD
И, почему именно 3008, а для остальных моделей 300х она есть?
Хотя

этим, как по мне всё сказано xDxD

Ну ступил бывает) я думал про полноценную :blush:

R122 добавил 10.03.2011 в 15:16
Цитата:

Сообщение от Ditemzy (Сообщение 947926)
Сообщение от R122 https://www.pspx.ru/forum/cleardoc/buttons/viewpost.gif
Прошивка: 5.03DT-II

Я поменял понял что это (fake) Фейк:bigofftopic:

R122 добавил 10.03.2011 в 15:20
Цитата:

Сообщение от Ditemzy (Сообщение 947926)
А программатором - это надо вытаскивать проц. и подключать к супер программатору. У нас тут есть один человек - Boryan, он бы занялся этим, но ему на это пофиг, т.к. он занят взломом батарейки пандоры для 3000

Ну как Борян закончит с Пандорой для 3000 и только тогда можно будет его просить...(а случится это не скоро я так думаю:fool:)

Yoti 10.03.2011 15:30

Когда будет что написать СВОЁ - пишите в личку, открою. А материалы и на pspfaqs читать неплохо. Закрыто.


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

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