Перейти к содержанию

Углубляемся в PSP


2freeman191@mail.ru

Рекомендуемые сообщения

Углубляемся в PSP – Часть 1: Материнские платы

Описание: Данный материал открывает цикл статей, который может быть интересен тем из вас, кого PSP интересует не только как девайс для запуска игрушек и просмотра скачанного видео. Не могу сказать, что полученные сведения принесут вам какую-то особую пользу на практике, но ведь пополнить теоретическую базу своих знаний тоже никогда не повредит.

Далее по тексту вы найдете сведения о всех материнских платах, когда-либо установленных во все PSP, начиная с PSP-1000 и заканчивая PSP-3000.

Небольшие пояснения к терминам, которые могут оказаться для вас незнакомыми:

1) Материнская плата – основной компонент PSP (да и обычного ПК тоже). На ней распаян процессор и NAND память (flash0 и не только), именно к ней подключаются все прочие узлы консоли. Именно она влияет на возможность или невозможность прошивки PSP и программного создания аккумулятора Пандоры.

2) Параметры Tachyon, Baryon, Pommel – нет, это не имена персонажей из Star Trek (хотя и похоже, не спорю). Это особые идентификационные коды, которые зашиты в железо и которые можно прочитать программным способом (именно так и работают программы на подобие PSPident). Само название, например TA-88 v3, нигде в железе не зашито.

3) Даунгрэйд – процесс понижения версии прошивки. Актуально только для PSP-1000. Как правило даунгрэйд производят с целью установки прошивки 1.50 и дальнейшего перехода на модифицированную прошивку.

4) Брик – проще говоря «кирпич». Состояние PSP, при котором она перестает включаться, однако какие-либо физические дефекты отсутствуют. Брик лечится программными способами, той же Пандорой, например.

5) Кастом прошивка – Custom Firmware (CFW). Не знаю, как можно правильно перевести слово Custom на русcкий язык, поэтому предпочитаю называть все неофициальные прошивки «Модифицированными». Когда Dark_Alex прикидывался командой русских хакеров, то свои релизы прошивок команда М33 называла именно модифицированными. С тех пор и закрепилось. Так что просто учтите, что это все – одно и то же.

PSP-1000:

Мат. плата: TA-079 v1

Инфо: обнаружена в первых PSP. Поставлялась с прошивкой версии 1.00

Параметры: Tachyon: 0x00140000, Baryon: 0x00306000, Pommel: 0x00000103

Кастом прошивка: можно установить любую неофициальную или официальную прошивку.

Создание аккумулятора Пандоры: да.

Мат. плата: TA-079 v2

Инфо: обнаружена в первых PSP. Поставлялась с прошивкой версии 1.00 и 1.50

Параметры: Tachyon: 0x00200000, Baryon: 0x00306000, Pommel: 0x00000103

Кастом прошивка: можно установить любую неофициальную или официальную прошивку. Прошивка 1.00 и 1.50 позволяют запускать неподписанные программы, включая запуск установки кастом прошивки.

Создание аккумулятора Пандоры: да.

Мат. плата: TA-079 v3

Инфо: обнаружена в первых PSP. Поставлялась с прошивкой версии 1.00, 1.50, 1.51, 1.52, 2.00

Параметры: Tachyon: 0x00200000, Baryon: 0x00040600, Pommel: 0x00000103

Кастом прошивка: можно установить любую неофициальную или официальную прошивку. Прошивка 1.00 и 1.50 позволяют запускать неподписанные программы, включая запуск установки кастом прошивки.

Создание аккумулятора Пандоры: да.

Мат. плата: TA-081

Инфо: пришла на смену первым платам PSP. Поставлялась с прошивкой версии 2.00 и выше

Параметры: Tachyon: 0x00300000, Baryon: 0x00406000, Pommel: 0x00000103/104

Кастом прошивка: можно установить любую неофициальную или официальную прошивку. Прошивка 1.00 и 1.50 позволяют запускать неподписанные программы, включая запуск установки кастом прошивки.

Создание аккумулятора Пандоры: да.

Мат. плата: TA-082

Инфо: первая плата PSP с измененным процессорным множителем. Поставлялась с прошивкой версии 2.60, 2.71 и 2.80

Параметры: Tachyon: 0x00400000, Baryon: 0x00114000, Pommel: 0x00000112

Кастом прошивка: можно установить любую неофициальную или официальную прошивку. Способна запускать прошивку 1.50 (первые версии даунгрейдеров приводили к брику).

Создание аккумулятора Пандоры: да.

Мат. плата: TA-086

Инфо: аналогична плате PSP TA-082, но поставлялась с новым LCD. Поставлялась с прошивкой версии 2.71, 2.81 и 3.51

Параметры: Tachyon: 0x00400000, Baryon: 0x00121000, Pommel: 0x00000112

Кастом прошивка: можно установить любую неофициальную или официальную прошивку. Способна запускать прошивку 1.50 (первые версии даунгрейдеров приводили к брику, после даунгрейда при появлении белого экрана требовалось нажать кнопку управления яркостью).

Создание аккумулятора Пандоры: да.

PSP-2000:

Мат. плата: TA-085

Инфо: обнаружена в первых PSP Slim&Lite. Поставлялась с прошивкой версии 3.60 и 3.71

Параметры: Tachyon: 0x005000000, Baryon: 0x0022B200, Pommel: 0x00000123

Кастом прошивка: можно установить неофициальную или официальную прошивку не ниже 3.60. Для установки кастом прошивки требуется комплект Пандоры.

Создание аккумулятора Пандоры: да, единственная плата всей серии PSP-2000 способная модифицировать EEPROM аккумулятора.

Мат. плата: TA-085 v2

Инфо: Аналогична плате PSP TA-085, но лишена способности модифицировать EEPROM аккумулятора. Поставлялась с прошивкой версии 3.72, 3.73 и 3.80

Параметры: Tachyon: 0x005000000, Baryon: 0x00234000, Pommel: 0x00000123

Кастом прошивка: можно установить неофициальную или официальную прошивку не ниже 3.71 (прошивка 3.60 не доступна в виде установочного файла). Для установки кастом прошивки требуется комплект Пандоры.

Создание аккумулятора Пандоры: нет.

Мат. плата: TA-088 v1

Инфо: Аналогична плате PSP TA-085 v2, но поставлялась с термокожухом для улучшенного охлаждения. Поставлялась с прошивкой версии 3.71, 3.80, 3.90 и 3.95

Параметры: Tachyon: 0x005000000, Baryon: 0x00243000, Pommel: 0x00000123

Кастом прошивка: можно установить неофициальную или официальную прошивку не ниже 3.71 (прошивка 3.60 не доступна в виде установочного файла). Для установки кастом прошивки требуется комплект Пандоры.

Создание аккумулятора Пандоры: нет.

Мат. плата: TA-088 v2 (ревизии A и :lol:

Инфо: не позволяет запускать комплект Пандоры ниже 6 версии благодаря пропатченным версиям Tachyon. Поставлялась с прошивкой версии 3.90 и 3.95

Параметры: ревизия A: Tachyon: 0x005000000, Baryon: 0x00243000, Pommel: 0x00000123,

ревизия B: Tachyon: 0x00…, Baryon: 0x00…, Pommel: 0x00… - практически не встречается

Кастом прошивка: можно установить неофициальную или официальную прошивку не ниже 3.71 (прошивка 3.60 не доступна в виде установочного файла). Для установки кастом прошивки требуется комплект Пандоры 6 версии и выше (для ревизии B желательно использовать 7 версию).

Создание аккумулятора Пандоры: нет.

Мат. плата: TA-088 v3

Инфо: Аналогична плате PSP TA-088 v2, но поставлялась с новыми процессорами, благодаря чему установка кастом прошивки стала невозможной (как через комплект Пандоры, так и через эксплоиты). Поставлялась с прошивкой версии 4.00, 4.01 и 4.05

Параметры: Tachyon: 0x00600000, Baryon: 0x00243000, Pommel: 0x00000123

Возможно, существует две или более ревизии данной платы, так как при замене процессора одни платы (ревизия A – менее распространенная) позволяют установить кастом прошивку (становясь TA-088 v2 ревизия A), а другие платы перестают работать.

Кастом прошивка: только после перепайки процессора (ревизия А) и только через Пандору. На практике не реализуется или реализуется крайне редко.

Создание аккумулятора Пандоры: нет.

Мат. плата: TA-090 (v1)

Инфо: Аналогична плате PSP TA-088 v2, с некоторыми элементами от TA-088 v3 и TA-090 (v2) от PSP-3000. Устанавливалась в восстановленные PSP (продажа через стоковые магазины) или в сломанные PSP, отданные в СЦ на ремонт. Типичная прошивка - 4.05, для отданных на ремонт - 4.05 и 4.01.

Параметры: Tachyon: 0x00500000, Baryon: 0x00263100, Pommel: 0x00000132

Кастом прошивка: можно установить неофициальную или официальную прошивку не ниже 3.71 (прошивка 3.60 не доступна в виде установочного файла). Для установки кастом прошивки требуется комплект Пандоры 6 версии и выше.

Создание аккумулятора Пандоры: нет.

PSP-3000:

Мат. плата: TA-090 (v2)

Инфо: Аналогична плате PSP TA-088 v3 от PSP-2000, но поставлялась с новыми процессорами, благодаря чему установка кастом прошивки стала невозможной (как через комплект Пандоры, так и через эксплоиты). Поставлялась с прошивкой версии 4.20, 4.21 и выше.

Параметры: Tachyon: 0x00600000, Baryon: 0x00263100, Pommel: 0x00000132

Кастом прошивка: нет.

Создание аккумулятора Пандоры: нет.

Часть 2: Прошивка, HEN, Devhook, pre-IPL и IPL

Описание: Продолжаем погружаться в дебри. В этот раз речь пойдет о таких понятиях, как официальная и кастом прошивка (знаю, что было, но закрепить не помешает), HEN, Devhook, IPL и pre-IPL. Про Devhook вспомнить особенно полезно, потому как многие из вас наверняка и не слышали про эту программу, а, тем временем, её аналоги могут стать основным средством запуска ISO`шек на непрошиваемых PSP.

Официальная прошивка - OFFICIAL FIRMWARE

Официальная прошивка – это прошивка (операционная система), созданная и предустановленная SONY. Крайняя версия официальной прошивки на момент написания статьи - 5.50. Запуск ISO, CSO, сторонних (хоумбрю) программ на ней невозможен.

Кастом прошивка (модифицированная) - Custom Firmware

Кастом прошивка была создана испанцем Dark_Alex. Вдохновение дала программа UMDEmulator, написанная Humma Kavula, позволяющая запускать ISO. Dark_Alex создал Proof of Concept 1.50 (показательный пример на основе прошивки 1.50) со встроенным HEN (запуск хоумбрю). После этого Dark_Alex модифицировал все важные официальные прошивки, добавляя в них новые возможности, такие как:

* 4 различных драйвера запуска ISO и CSO (OE, M33, Sony, UMD)

* HEN-D

* Возможность обновления на новые кастом прошивки по сети

* Рекавери меню – меню, позволяющее сделать множество настроек

* VSH меню – небольшое меню для управления включенной консолью

* Подмена текущей версии прошивки

* Popsloader – продвинутый модуль для запуска PSX игр

* Возможность управлять частотой процессора

* Разблокирована максимальная яркость экрана

* Возможность использования ISO образов UMD-видео

HEN

HEN (HomeBrew Enabler) позволяет запускать программы, неподписанные SONY.

В частности HEN может работать на официальной прошивке при наличии в ней Кернел-эксплоита (программа, использующая ошибку, дающую доступ к ядру). Текущая версия - HEN-D (с возможными модификациями, при изменении кастом прошивок).

HEN в частности позволяет запускать программу ISO loader – загрузчик ISO/CSO образов, а также установщик кастом прошивки. HEN сам по себе не запускает ISO/CSO.

Девхук - Devhook

Devhook это эмулятор, работающий через HEN. Devhook это неподписанная хоумбрю, созданная Booster – некогда главным конкурентом Dark_Alex’a.

Devhook эмулирует официальную прошивку с добавленными в нее возможностями HEN и ISO loader. Последняя версия Devhook - 0.6F, работающая только на 3.10 OE (а следовательно только на PSP-1000) и эмулирующая официальные прошивки 2.71 - 3.11.

Ввиду того, что автор отошел от сцены, а также великолепной серии кастомных прошивок M33 (от Dark_Alex’a), развитие Devhook остановилось.

Эксплоит пользовательского уровня - User Mode Exploit

Эксплоит пользовательского уровня дает частичный доступ к функциям запущенной прошивки. Доступ к аппаратной части PSP заблокирован. При помощи эксплоита пользовательского уровня можно запустить Кернел-эксплоит или специально написанные хоумбрю, с ограниченными возможностями.

Эксплоит, дающий доступ к ядру прошивки - Kernel Mode Exploit

Эксплоит, дающий доступ к ядру прошивки, дает доступ к аппаратной части PSP, а именно внутренней памяти PSP - Flash0, 1, 2, 3. Это дает возможность установить кастом прошивку. Также это означает, что HEN будет работать. Кернел-эксплоит дает полный доступ к ресурсам PSP. Без кернел-эксплоита HEN работать не будет.

Pre-IPL

Pre-IPL запускается сразу при включении PSP (являясь BIOS’ом). Pre-IPL указывает процессору, где находится прошивка PSP, а именно IPL.

Pre-IPL – это аппаратная часть PSP, без возможности программного обновления. В зависимости от версии материнской платы PSP, Pre-IPL расположен в самой материнской плате, либо в процессоре и материнской плате (различные модули).

Благодаря специальной хакерской атаке на Pre-IPL, стало возможным использование сервисного режима PSP. Тем не менее, последние версии Pre-IPL (TA-088 v3 PSP-2000 и TA-090 v2 PSP-3000) не подвержены данной атаке, в связи с чем сервисный режим заблокирован. Данные версии Pre-IPL проверяют целостность IPL (см. ниже), поэтому установка кастом прошивки через Кернел-эксплоит приведет к поломке PSP.

IPL

IPL (Initial Program Loader) – отвечает за загрузку ПСП, настраивая прошивку так, чтобы она могла работать с конкретной версией аппаратной части PSP. Хранится в памяти PSP. IPL обновляется для каждой новой версии прошивки. Существует IPL, записываемый на специально подготовленную карточку Memory Stick для работы в сервисном режиме (комплект Пандоры).

Углубляемся в PSP – Часть 3: Все про NAND

Описание: В данном материале собрана информация о файлах, хранящихся во внутренней памяти PSP – флэш-чипе, использующем ячейки NAND памяти или же попросту NAND. На самом деле это один чип, а не несколько, как думают многие, и помимо flash0, 1, 2 и 3 в нем также хранится IPL и специальное хранилище сервисных ключей – IDStorage. Все подробности ждут вас в полной версии статьи.

01. NAND Dump

NAND дамп – это физическая копия (посекторная) флэш-чипа PSP (NAND), содержащего все файлы, которые требуются для загрузки. NAND дамп содержит: IPL, IDStorage и lflash. При правильном использовании NAND дамп позволит быстро и надежно восстановить PSP из любого нерабочего состояния, если не испортилась аппаратная часть PSP.

02. Из чего состоит NAND дамп

NAND дамп содержит: IPL, IDStorage и lflash.

A. IPL

IPL – «Initial Program Loader» – Первичный загрузчик.

При запуске PSP pre-IPL проверяет NAND на наличие IPL (и его подлинность), после чего загружает его. При установленном аккумуляторе Пандоры (JigKick battery – серийный номер 0xFFFFFFFF) pre-IPL загружает IPL с Memory Stick. IPL расшифровывает и распаковывает себя, а затем начинает загрузку модулей прошивки из lflash.

Существует несколько версий IPL на данный момент, основные:

1.50 (1.00-1.52)

Первоначальная версия IPL. Позволяет запускать на PSP-1000 любые прошивки от 1.00 до 2.60 без модификации. При некоторых исправлениях от 1.50 до 3.52. Для работы на платах TA-082 и TA-086 требует исправить «Ключ 5 – key 5» в IDStorage. Старые кастом прошивки (2.71 SE – 3.52 M33) используют этот IPL с некоторыми исправлениями для своей загрузки. Данный IPL не поддерживается PSP Slim.

1.50 «Simple IPL» – «Упрощенный IPL»

Модифицированный Dark_Alex’ом IPL – проверка «Ключа 5 – key 5» в IDStorage удалена, что позволяет без каких-либо ухищрений работать на всех PSP-1000. Данный IPL не поддерживается PSP Slim.

1.50 Multi-Boot – Мульти-загрузочный

Некогда главный конкурент Dark_Alex’a - Booster выпустил мульти-загрузочный IPL, позволяющий работать в режиме Пандоры – загружаясь как с NAND, так и с Memory Stick. Данный IPL не поддерживается PSP Slim.

3.xx M33 custom IPL

Данная версия создана Dark_Alex’ом и командой M33 (на тот момент это была именно команда). Данная версии позволила создать комплект Пандоры для PSP Slim. Также данная версия используется для запуска прошивок 3.71 M33 и выше.

3.xx+

Ввиду того, что Sony меняет шифрование lflash, приходится обновлять IPL для загрузки новых кастом прошивок.

B. IDStorage

ЕСЛИ ВЫ ВОСПОЛЬЗУЕТЕСЬ IDSTORAGE НЕ ОТ СВОЕЙ PSP, PSP ПОТЕРЯЕТ ЧАСТЬ СВОЕГО ФУНКЦИОНАЛА. ЧУЖОЙ IDSTORAGE МОЖЕТ ПРИВЕСТИ К ПОЛНОЙ НЕРАБОТОСПОСОБНОСТИ СИСТЕМЫ. ИСПРАВИТЬ ЭТО ВОЗМОЖНО БУДЕТ ТОЛЬКО В АВТОРИЗВАННОМ СЕРВИС ЦЕНТРЕ.

В частности у вас перестанут работать:

- Ad-hoc

- UMD и UMD video

- Homebrew

- MagicGate

Что такое IDStorage?

IDStorage содержит сотни ключей – информацию конкретно о вашей PSP. А именно:

- Серийный номер

- Серийный номер UMD привода

- WLAN MAC адрес

- Ключи для расшифровки

- Код видео-зоны

- Код игро-зоны

- WLAN регион, для работы только на разрешенных частотах

- Уникальные ключи и оригинальная версия прошивки

- Настройки аккумулятора

- Настройки дисплея

Поскольку многие ключи уникальны для каждой партии, использование чужого IDStorage приводит к поломке. Наиболее актуальный способ сохранения своих ключей – полный NAND дамп с помощью комплекта Пандоры – Despertar Del Cementerio 8.

C. lFlash

lflash состоит из flash 0, 1, 2, и 3 – логических разделов FAT12 на NAND - чипе. Каждый из них независим. В случае ошибки в разделе PSP перестанет загружаться. В случае ошибки flash2 – PSP перестанет загружаться при наличии скачанных игр из PSN Store. В случае ошибки flash3 – PSP перестанет загружаться при наличии TV модуля (только Япония).

Flash0

Содержит текущую рабочую прошивку. Файлы хранятся в зашифрованном и подписанном виде. Поэтому нельзя использовать чужую копию flash0.

Flash1

Содержит текущие настройки PSP: обои, ник, настройки сети и т.п. Настройки Рекавери меню кастом прошивки также хранится здесь в файле config.se. Если эти файлы удалить, настройки PSP вернутся к заводским.

Flash2

Содержит файлы DRM защиты cert.dat/act.dat для игр, скачанных из PlayStation Network. Создаются при первой загрузке игры. В случае утери скачанные игры не запустятся.

Flash3

В прошивке 3.60 здесь хранился файл настройки TV набора для Японии – «1SEG.PBP». В последующих прошивках этот файл перенесен во flash0. На данный момент flash3 не используется.

Flash 0, 1, 2, и 3 имеют разный размер, который может быть перераспределен с помощью комплекта Пандоры – Despertar Del Cementerio 8.

03. Создание NAND дампа

Наиболее удобный способ сделать NAND дамп – это воспользоваться комплектом Пандоры – DC8. При снятии NAND-дампа могут появиться сообщения о наличии плохих секторов. Это не страшно – запишите на бумажке количество секторов и их номера. Наличие от 1 до 10 плохих секторов вполне допустимо. Сохраните копию NAND дампа на жесткий диск, дайте ему точное описание – дата создания, модель PSP, версия прошивки.

04. Использование NAND дампа

Для восстановление PSP с помощью NAND дампа следует использовать ту версии комплекта Пандоры, которой он был создан. Если дамп был сделан давно, то сначала следует снять новый дамп (даже неработающей PSP). Запишите плохие сектора и сравните их с теми, что были при создании первого дампа. Если новых плохих секторов не появилось, можете смело восстанавливать PSP.

Если же появились новые плохие сектора, то нужно использовать стандартный метод восстановления PSP в DC8.

05. Если вы испортили свой IDStorage

При наличии своего NAND дампа вы легко восстановите свою PSP. При отсутствии своего NAND дампа вам может помочь комплект Пандоры – DC8. Он позволяет создавать новые ключи. Тем не менее, полное восстановление не гарантируется. Если ваша PSP серии 1000/2000, 1001/2001, 1004/2004 шансы на успех выше. В особо тяжелых случаях следует идти в авторизованный сервис центр – возможно, там смогут оживить вашу PSP, путем установки специальных универсальных ключей.

Углубляемся в PSP – Часть 4: Эксплоит и Крах. Отличия и нахождение

Описание: Существует множество сценариев, позволяющих осуществить поиск уязвимости и создание эксплоита. Например: переполнение буфера, переполнение кучи, повреждение стека, повреждение памяти…

В данной статье будет рассказано о Переполнении буфера, как наиболее простом и понятном пути атаки на программу. В частности, популярные эксплоиты, основанные на файлах сохранения игры (GripShift, Lumines, GTA LCS), являются примерами использования Переполнения буфера.

Нижеследующий пример применим к архитектуре x86, но общие принципы и методы для создание эксплоита одинаковы.

В чем особенность эксплоита, работающего на уровне ядра?

Главная особенность такого эксплоита заключаются в том, что он позволяет работать с памятью ядра. В основном, уязвимости обнаруживаются в SceIoOpen, для этого нужно дизассемблировать PRX файлы прошивки PSP. Поиск уязвимости требует много времени и терпения. Это одна из причин, почему такие уязвимости трудно найти.

Что есть Переполнение буфера?

Переполнение буфера (Buffer Overflow или Buffer Overrun) — явление, возникающее, когда компьютерная программа записывает данные за пределами выделенного в памяти буфера.

Переполнение буфера обычно возникает из-за неправильной работы с данными, полученными извне, и памятью, при отсутствии жесткой защиты со стороны подсистемы программирования (компилятор или интерпретатор) и операционной системы. В результате переполнения могут быть испорчены данные, расположенные следом за буфером (или перед ним). Для примера рассмотрим следующий код, написанный на С++:

#include

#include

int copy(char *string){

char buffer[5];

strcpy(buffer, string);

return 1;

}

int main(int argc, char *argv[]) {

cout << "Hello World";

copy(argv[1]);

return 1;

}

Пока ничего необычного. Сначала мы объявили подпрограмму, вызвали main(), инициализировали Строку (string) и Буфер (buffer). После этого компьютер выводит «Hello World» на экран консоли. А вот после этого начинается самое интересное – программа вызывает функцию copy(), которая копирует в буфер данные введенные пользователем с консоли. В программе используется стандартная функция библиотеки С – strcpy(), весьма ненадежная функция, которую следует избегать при программировании. Функция strcpy() копирует данные из string в buffer. Однако размер buffer составляет всего 5 байт. Но что произойдет, если передать больше 5 байт? Например, передадим 30 байт, чтобы быть уверенными, что мы перезаписали все важное в памяти.

Замечательно. Как вы видите, EIP – адрес возврата был перезаписан следующими данными - 0x41414141, что в переводе из 16-ричного вида в ANSI означает «AAAA». Если подобное происходит на платформе архитектуры MIPS (к коей относится и PSP) , то вы увидите: $ra: 0x41414141. $ra – это адрес возврата для MIPS.

Отлично, а теперь вместо краха программы сделаем что-нибудь более полезное, например, заменим адрес возврата так, чтобы он указывал на функцию main(). Ищем адрес функции main() в памяти

ебаггер Nemiver указывает, что функция main() расположена в 0x080488AF. Итак, перезапишем EIP таким образом, чтобы он принял значение 0x080488AF. Если все сделано правильно, то на экран «Hello World» выведется дважды.

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

Как видите, данные действия требуют терпеливости и усидчивости, некоторое количество мозгов и знаний, а также времени для того, чтобы превратить найденную уязвимость в эксплоит. Далеко не все уязвимости так хороши для атаки, как та, что приведена в примере. Уязвимость приобретает ценность, если она способна нести полезную нагрузку – исполняемый код. Потому всякого рода вопли вокруг файлов сохранений различных игр вызывают смех. Зависание PSP не означает наличие эксплоита.

Также в следующей статье будет рассказано более подробно о конкретном примере для PSP, на основе статьи Wololo.

Теперь вы можете сделать незашифрованное сохранение к игре, найти в нем строки, содержащие имя персонажа (то, что вы вводите сами в игре), попробовать его перезаписать длинной строкой. Если игра обращается к данной строке, и не имеет защиты, то она или зависнет, или вылетит. Если это произойдет, переходите к следующему шагу – анализ краха игры с помощью PSPLink. Помните, что далеко не каждая уязвимость имеет ценность, но, возможно, вы найдете что-нибудь полезное. Продолжение следует...

Углубляемся в PSP – Часть 5: Словарь редких терминов

Описание: Весьма познавательный, хотя и сложный для понимания материал, описывающий всевозможные термины, использующиеся во время углубленного изучения Sony PSP. Весьма забавно, что среди инженеров Sony оказалось так много поклонников сериала Star Trek, потому что большая часть терминов либо связана с сериалом напрямую, либо имеет схожую по написанию и произношению форму (хотя справедливости ради стоит отметить, что некоторые термины существовали задолго до Стар Трека и были позаимствованы из Физики).

Allegrex

Кодовое название для основного модифицированного MIPS32 ядра ЦПУ PSP в чипе Tachyon.

BARYON (термин а-ля Star Trek)

Кодовое название интегральной схемы микроконтроллера SYSCON.

GLUON (термин а-ля Star Trek)

Кодовое название интегральной схемы радиочастотного усилителя лазера UMD.

HIBARI

Кодовое название интегральной схемы LCD-контроллера PSP Slim. Означает “Жаворонок” по-японски.

IdStorage

Низкоуровневая область хранения данных, содержащая конфигурационную информацию и индивидуальные ID для PSP. Использует простейший формат разметки, когда каждая Страница NAND используется для хранения одного Листа. Каждому Листу присваивается 16-битный ID и помечается в индексе. Расположен в первом Мегабайте неразмеченной области NAND Flash. 256Кб зарезервировано в NAND для хранения области IdStorage.

IPL (Initial Program Load)

Отвечает за загрузку прошивки PSP в ОЗУ. Расположен в первом Мегабайте неразмеченной области NAND Flash. 256Кб зарезервировано в NAND для хранения IPL.

KIRK (термин а-ля Star Trek)

Аппаратный криптографический модуль, отвечающий практически за все аспекты безопасности PSP. Дешифрование и проверка IPL, дешифрование EBOOT и PRX, сохранений игр, шифрование AdHoc, проверка IdStorage. Назван в честь капитана Кирка из сериала Звездный Путь.

LEPTON (термин а-ля Star Trek)

Кодовое имя для Mechacon UMD Controller IC (UMD контроллер). Созданный специалистами Sony модуль LSI, который содержит оптические DSP & CPU, интерфейс ATAPI, 480KB DRAM буфер для чтения и (как минимум) 384KB Flash ROM для прошивки привода.

Magpie (пер. Сорока)

Кодовое название прошивки модуля WLAN PSP Fat.

NAND или NAND Flash.

Тип постоянной памяти похожей на EEPROM, использующей ячейки памяти типа НЕ-И. В PSP Fat встроен единый чип памяти, содержащий как NAND Flash, так DDR SDRAM, каждая объемом 32МБ. В PSP Slim и PSP Brite объем каждого типа памяти увеличен вдвое до 64МБ, а чип встроен в чип TACHYON). В NAND Flash хранятся прошивка PSP, IPL и IdStorage.

POMMEL (термин а-ля Star Trek)

Кодовое название интегральной схемы контроллера электропитания. DC-DC преобразователь управляется SYSCON.

PBP (PSP Boot Package)

Расширение файла для EBOOT, используемых для запуска программ под VSH. Содержит исполняемый ELF файл, опционально – иконку, фон, музыкальные эффекты для отображения в VSH.

PRX (PSP Relocatable Executable)

Специальный ELF файл обычно служит в качестве модулей прошивки PSP. Аналогичен IRX (IOP Relocatable Executable) или ERX (EE Relocatable Executable) форматам прошивки PS2.

PSAR (Playstation Archive)

Архивный файловый формат для хранения образа прошивки PSP. Используется инсталлятором новой прошивки для обновления прошивки PSP.

Psjs (Playstation javascript)

javascript-подобный язык для управления XMB и его ресурсами.

SPOCK (термин а-ля Star Trek)

Аппаратный криптографический модуль для низкоуровневого дешифрования секторов UMD. Назван в честь капитана Спока из сериала Звездный Путь.

SYSCON (System Control)

Микроконтроллер управления всей приставкой PSP, управляет питанием всех частей PSP(LCD, UMD, MemoryStick, WLAN и CPU), отсчитывает время и дату, управляет спящим режимом, управляет всеми кнопками/переключателями и светодиодами, управляет питанием от сети и аккумулятором, а также доступом к сервисному режиму и автозагрузке (именно чип SYSCON отвечает за распознавание серийного номера аккумулятора как 0xFFFFFFFF или 0x00000000).

TACHYON (термин а-ля Star Trek)

Кодовое название всей интегральной схемы ЦПУ PSP. Sony создала большую интегральную схему в состав которой входят: основной ЦПУ (Allegrex), VFPU компрессор, Media Engine CPU со встроенной памятью, AVC декодер, Virtual Mobile Engine DSP, криптографические модули KIRK и SPOCK, 4Кб встроенной маскируемой ПЗУ, содержащей PreIPL и инструкции для загрузки.

Voyager (термин а-ля Star Trek)

Кодовое название прошивки модуля WLAN PSP Slim. Назван в честь кораблин Звездного флота сериала Звездный путь.

VSH (Visual Shell)

Главный интерфейс PSP, пользовательская оболочка, дающая доступ к ядру. Использует Sony XMB (Cross Media Bar) в качестве графического интерфейса.

XMB (Cross Media Bar)

Графическая компонента VSH. Скриптовый графический интерфейс впервые созданный для Sony Japanese PSX DVR (Digital Video Recorder), также используется в продуктах Sony WEGA & Bravia TV’s и Sony PS3.

Криптографический модуль KIRK

Всего известно 18 операций KIRK:

1. 0x01: Супер-пупер дешифрование (обратно - нет)

2. 0x02: Операция шифрования (обратно - 0x03)

3. 0x03: Операция дешифрования (обратно - 0x02)

4. 0x04: Операция шифрования (обратно - 0x07) (IV=0)

5. 0x05: Операция шифрования (обратно - 0x08) (IV=FuseID)

6. 0x06: Операция шифрования (обратно - 0x09) (IV=UserDefined)

7. 0x07: Операция дешифрования (обратно - 0x04)

8. 0x08: Операция дешифрования (обратно - 0x05)

9. 0x09: Операция дешифрования (обратно - 0x06)

10. 0x0A: Проверка секретной подписи(проверка секретных подписей SCE)

11. 0x0B: SHA1 Hash

12. 0x0C: Mul1

13. 0x0D: Mul2

14. 0x0E: Генерирование случайного числа

15. 0x0F: xнеизвестноx

16. 0x10: Генерирование подписи

17. 0x11: Проверка подписи(проверка сгенерированных подписей)

18. 0x12: Проверка сертификатов(подписи из idstorage)

Ошибки KIRK:

1. 0x00: Нет ошибок, все прошло успешно

2. 0x01: KIRK не включен

3. 0x02: Неверный режим

4. 0x03: Ошибка проверки заголовка

5. 0x04: Ошибка проверки данных

6. 0x05: Ошибка проверки подписи

7. 0x06:

8. 0x07:

9. 0x08:

10. 0x09:

11. 0x0A:

12. 0x0B:

13. 0x0C: KIRK не инициализирован

14. 0x0D: Неверная операция

15. 0x0E: Неверный код (операции шифрования)

16. 0x0F: неверный размер(?) (операции шифрования)

17. 0x10: Размер данных равен 0 (операции шифрования/подписи)

Криптографический модуль SPOCK

SPOCK операции:

1. 0x01: Инициализация1

2. 0x02: Инициализация2

3. 0x03: Шаг1

4. 0x04: Шаг2

5. 0x05: Шаг3

6. 0x06:

7. 0x07:

8. 0x08: Дешифрование мастер ключа UMD

9. 0x09: Дешифрование Idstorage UMD ключей

10. 0x0A: Дешифрование сектора UMD

11. 0x0B: Перезагрузка SPOCK

12. 0x0C:

Что такое NID?

Поиск новых функций в прошивках PSP

Это идентификаторы имен функций прошивки PSP (терминология SCE). В разговорной речи NID обретает смысл идентификатора или имени функции. NID – это число, генерируется как первые 32 бита SHA1 хеша имени функции, записывается в формате Intel (остроконечный). Пример: пусть есть функция HelloWorld(), имя функции - “HelloWorld”,

- хеш SHA1 для этой строки:

db 8a c1 c2 59 eb 89 d4 a1 31 b2 53 ba cf ca 5f 31 9d 54 f2

- первые 32 бита:

db 8a c1 c2

- в формате Intel:

0xc2c18adb

Число 0xc2c18adb – есть Идентификатор имени (NID) для имени функции “HelloWorld”.

Благодаря тому, что NID известен, с помощью атаки по словарю становится возможным восстановить имя функции. Тем не менее это весьма сложная задача, нужно правильно подобрать префикс имени; нужно отсеивать огромное количество ложных срабатываний (возникают из-за того, что используются только первые 32 бита хеша SHA1); и последнее, нужен хороший словарь. Кроме того, полезно знать что делает какая-либо функция, это облегчить подбор верного имени.

Для затруднения поиска имен, начиная с прошивки 3.70, при генерировании NID к имени функции добавляется 128 битный ключ рандомизации. Благодаря этому атака по словарю на SHA1 хеши стала бесполезной, поскольку предсказать 128 ключ невозможно. Через каждые несколько прошивок ключ рандомизации меняется, так что выявить новые функции практически невозможно.

Углубляемся в PSP – Часть 6: Принцип атаки на IPL и PreIPL

Описание: Данный материал содержит информацию о том, как и с помощью чего в свое время удалось обойти старую защиту PreIPL, что помогло созданию модифицированного IPL и комплекта Пандоры.

Кроме того, в статье наглядно демонстрируются причины, по которым новый механизм защиты PreIPL до сих пор остается неприступным для хакеров.

Эксплоит Пандоры

Защита IPL была взломана методом подбора (bruteforce, далее брутфорс), Однако взломать удалось не весь загрузчик, а лишь первый его блок. Это удалось сделать только благодаря его очень маленькому размеру. Собственно, нельзя подделать подпись для каждого блока установочного файла EBOOT ввиду его слишком большого размера. При этом алгоритм шифрования до сих пор неизвестен, а секретный ключ не взломан.

Принцип установки IPL

IPL поставляется в зашифрованном виде с цифровой подписью Sony. Когда IPL передается в криптографический модуль (KIRK), сначала проверяется подпись, и если она верна, то модуль дешифрует сами данные IPL. При этом алгоритмы шифрования и подписи, опять же, неизвестны.

Подложные данные первого блока IPL и их подпись были подобраны брутфорсом (огромная работа) для того, чтобы криптографический модуль признал этот блок 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) 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, скорее всего это можно сделать только аппаратным путем.

Углубляемся в PSP – Часть 7: Почему ChickHen на основе «eggsploit» срабатывает случайно?

Описание: Практически все пользователи ChickHen хотя бы раз жаловались на нестабильность TIFF эксплоита и как следствие запуска HEN. Дело в том, что успешное срабатывание эксплоита основано на жесткой адресации памяти, но в современных прошивках PSP сделано так, что адреса ячеек памяти меняются случайным образом. После запуска модуля vshbridge.prx создаются два фиксированных пула памяти, предназначенных лишь для рандомизации смещений.

Размер данных пулов случаен и зависит от системного времени PSP. При неудачном размере данных пулов, они могут повлиять на адреса модулей, загруженных в ОЗУ PSP, и тем самым привести к ошибке в коде TIFF эксплоита.

Код рандомизации смещений модуля vshbridge.prx:

Изображение

Этот код был добавлен в прошивку 2.50 и выше. Поскольку HEN использует TIFF эксплоит, повысить частоту успешных срабатываний путем изменения кода нельзя. Конечно это не единственная причина, влияющая на стабильность ChickHen.

This is the hidden content, please

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Guest
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.