Защита и взлом Xbox 360 (Часть 3)

Защита и взлом Xbox 360 (Часть 3)

В 2011 году, через 6 лет после выпуска игровой приставки Xbox 360, исследователями был обнаружен занимательный факт — если на вывод RESET центрального процессора на очень короткое время подать сигнал «0», процессор не сбросит своё состояние (как должно быть), но вместо этого изменит своё поведение! На основе этой «особенности» был разработан Reset Glitch Hack (RGH), с помощью которого удалось полностью скомпрометировать защиту Xbox 360, запустить неподписанный код, тем самым открыв путь к взлому самой системы и победе над «невзламываемыми» приводами DG-16D5S.

Давайте же рассмотрим в деталях, как работал RGH, как разработчики пытались залатать дыру и как эти заплатки смогли обойти!

Что вообще за глич атака?

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

Действительно, компилируя код
вы полагаетесь на то, что значение переменной i увеличится ровно на 2, даже не представляя себе, как может быть иначе.

Глич-атаки нарушают эту уверенность — их цель направлена на то, чтобы процессор «сглючил» и повёл себя не так, как надо. Способов «глюкнуть» процессор несколько, например:

В случае же с Xbox 360, «глюк» происходит в результате воздействия на линию RESET. Процессор начинает процедуру сброса, но из-за очень краткой длительности сигнала, не успевает её завершить и продолжает работать как ни в чём ни бывало. Но именно на этот краткий миг, пока сигнал RESET активен, его поведение изменяется!

Глючим процессор

Защита Xbox 360 держится на том, что загрузчики проверяют друг друга по цепочке. В конечном итоге, проверка на каждом этапе сводится к вызову функции сравнения хеш-суммы с «образцом». Тут-то и применили глич-атаку, заставив процессор проигнорировать несовпадение. Импульс на линию RESET сразу после вызова процедуры memcmp заставляет процессор «пойти» по другой ветке и продолжить загрузку, даже если хеш-сумма неверна:

Наилучшее место для атаки нашлось в загрузчике второго этапа, «CB». Более поздние этапы атаковать сложнее (да и легко пофиксят), а на первом этапе загрузки («1BL», ROM) из-за несколько иного построения программного кода атака не удалась.

Звучит просто, но на деле при попытке осуществить атаку, обнаружилось множество нюансов.

Для начала, чтобы успешно провести глич-атаку, необходимо очень точно определить момент времени, когда следует подавать RESET импульс. Если ошибиться хотя бы на микросекунду, послать слишком короткий или длинный импульс, атака не срабатывает.

К счастью, в Xbox 360 каждый этап загрузки сопровождается изменением значения на отладочной шине POST_OUT. Более того, отладочный вывод настолько часто расставлен, что новое значение POST задаётся сразу перед сравнением хеш-суммы:

Настолько близкое расположение отладочного вывода от места атаки оказалось крайне удобным триггером. POST_OUT является параллельной шиной и выводится на 8 тестовых площадок на печатной плате, каждая из которых отвечает за один из битов значения. Удалось даже упростить схему подключения, используя только один бит и считая количество изменений его состояния с момента загрузки системы:

Также выяснилось, что из-за высокой частоты работы процессора, почти невозможно попасть в нужный момент по точности и длительности. Время воздействия должно быть очень мало, порядка времени исполнения одной инструкции процессором. Но чем медленнее работает процессор, тем больший временной промежуток нас устраивает. Поэтому берём и замедляем процессор!

На обычном ПК частота CPU определяется как произведение внешней, «опорной» частоты и множителя:

Так и в Xbox 360, к процессору подходят внешние линии опорной частоты, а внутри эта частота умножается с помощью PLL. И на старых, «толстых» ревизиях приставки механизм PLL можно было отключить, замедлив процессор аж в 128 раз:

На «Slim» версиях трюк с PLL провернуть нельзя (линия не разведена на плате), и раз на множитель в «Slim» мы повлиять не можем, то уменьшим «опорную» частоту!

Она генерируется чипом HANA, и его можно конфигурировать по шине I2C:

К сожалению, сильно снизить не получилось, «на малых оборотах» итоговая частота процессора начинала сильно «плавать», что снижало шансы на успех. Самым стабильным вариантом оказалось замедление в 3.17 раз. Не 128 раз, но хоть что-то.

Всё? Нет, не всё. Далеко не факт, что атака сработает с первого раза (особенно на Slim). А при неудачном запуске, приставка перезагружается и пробует запуститься снова. На запуск даётся всего 5 попыток, после чего приставка останавливается и начинает моргать «красным кольцом смерти». Поэтому патчим ещё и прошивку южного моста (SMC), чтобы не страдала фигнёй и перезагружала приставку до посинения:

Итак, получаем алгоритм:

И получаем вот такую конструкцию на базе недорогого CPLD Xilinx XC2C64A:

Не забудем пошаманить с длиной и расположением проводка на RESET (обратите внимание на «катушку» снизу фото) и вперёд, надеяться, что запуск получится в течение минуты.

Но это только с аппаратной стороны. Как же нам пропатчить загрузчик и запихнуть свой код?

Патчим загрузчики

Как я уже упоминал, атакуется загрузчик второго уровня, «CB». Этот загрузчик шифруется фиксированным ключом, одинаковым для всех приставок, но как раз «CB» модифицировать нельзя, его мы только атакуем. А вот следующий за ним уже зашифрован ключом CPU, уникальным для каждой приставки. И чтобы его модифицировать, нужно знать этот ключ…
Или нет?

В старых «толстых» ревизиях Xbox 360 в загрузчике «CB» поддерживался так называемый «Zero-Pairing» режим, использующийся на этапе производства приставки. В заголовке каждого загрузчика по смещению 0x10 находится случайный набор данных «Pairing Data», используемый как часть ключа при расшифровывании. И если этот набор данных состоял целиком из нулей («Zero-Pairing»), то ключ процессора игнорировался и вместо него использовался фиксированный, нулевой ключ!

С помощью этого трюка можно было собрать образ с оригинальным «CB», зашифровать нулевым ключом следующий загрузчик, «CD» (уже со своим кодом) и запустить его с помощью RGH!

В приставках «Slim» и этот трюк завернули, убрав «Zero-Pairing» режим и поделив «CB» на две части. Здесь «CB» делился на очень простой и небольшой «CB_A» и шифрованный ключом процессора «CB_B»:

Но шифрование алгоритмом RC4 (а именно этим алгоритмом зашифрован «CB_B»), имеет одну особенность. В процессе шифрования на основе ключа генерируется псевдослучайный поток данных, который бинарно «складывается» (операция ‘исключающее или’, ‘xor’) с исходными данными. При расшифровывании, соответственно, происходит то же самое, сложение с этим же псевдослучайным потоком возвращает данные в исходное значение:

Но операция бинарного сложения коммутативна и ассоциативна, что означает, что мы можем модифицировать зашифрованные данные, не зная ключа, просто заxor‘ив зашифрованный код с нужным нам патчем!

В итоге, мы можем зашифровать «CB_A», пропатчить зашифрованный «CB_B» (чтобы он не выполнял расшифровку вообще) и положить в открытом виде «CD» со своим кодом!

Короче, если собрать воедино, то запуск выглядит как-то так:
(XeLL — загрузчик хоумбрю, линукса, а ещё он ключи CPU показывает)

Microsoft наносит ответный удар

Конечно, Microsoft постарались всё залатать.

В новом системном обновлении все старые приставки перевели на «раздельную» загрузку с «CB_A» и «CB_B», тем самым окончательно закрыв «Zero-Paired» режим. На «Slim» загрузчики тоже подверглись обновлению. Новые загрузчики серьёзно доработали для защиты от RGH, наибольший упор при этом был сделан на защиту «CB_A»:

Список нововведений не оставляет ни одного шанса для RGH. Но обратим внимание на последний пункт списка — до этого в «CB_A» не было проверки фьюзов! Фатальный недостаток. Более того, как мы помним, в расшифровке «CB_A» ключ процессора не участвует. А это значит, что уязвимый к RGH загрузчик «CB_A» можно запустить на любой приставке, и запретить это нельзя.

А вот чтобы что-то запустить с помощью этого уязвимого «CB_A», нужно несколько извернуться. Если мы не знаем ключа CPU, всё, что нам остаётся — патчить существующий «CB_B». Но что, если вместо модификации единичных участков, мы заXOR’им весь загрузчик целиком? И за счёт этого «запишем» старый загрузчик, который мы уже умеем патчить, на место нового? Так и поступили:

Всё, мы снова, не зная ключа, успешно подменили шифрованное содержимое, ещё и уязвимый загрузчик засунули. Приставки взламываются, Microsoft удивляются.

Разработчики напряглись, и в очередном системном обновлении … чуть изменили метод шифрования «CB_B», теперь ключ шифрования стал зависеть ещё и от версии «CB_A»:

Теперь при попытке заxor’ить и подсунуть данные уязвимому «CB_A» старой версии, загрузчик расшифровывал мусор из-за различий в ключах. А новый загрузчик взломать нельзя, он хорошо защищён от глич атак. Пока что победа за Microsoft!

Проблем подкинула Corona

Тем временем, на рынок вышла новая ревизия Xbox 360 — Corona, и принесла она моддерам проблем:

Маловато чипов на плате, не находите? Всё верно, чип HANA «спрятали» в южный мост. Больше неоткуда брать частоту 48 MHz для мод-чипа, прежние команды замедления по I2C не срабатывают. Да что уж там, NAND-флеш на 16 MB, все эти годы служившую в качестве системного хранилища Xbox 360, вероломно заменили на 4 GB чип с интерфейсом eMMC! (правда, только в более дешёвой версии приставки, но всё же):

Но ничего, со всем справились. Придумали как читать/писать флеш-память через картридер:

Нашли новые I2C команды замедления, внешний 48 MHz кварцевый генератор заменил HANA:

Доделали скрипты для сборки, добавили поддержку 4 GB NAND…

Но Microsoft продолжали вставлять палки в колёса. Например, на новых платах пропали некоторые резисторы, без которых мод-чип переставал работать:

Правда, исправлялось это установкой перемычек паяльником:

Серьёзнее дела пошли, когда с платы пропали дорожки POST_OUT:

Но и здесь Microsoft не повезло, нужные для RGH «шары» CPU находились на крайнем ряду:

И, естественно, к ним смогли подключиться. Сначала самые рукастые, чуть подсверлив край процессора и подпаявшись проводком прямо к шарику:

А затем китайцы выпустили рамки с подпружиненной иглой, точно упирающейся в шарик, и проблема решилась для всех остальных:

Последний рубеж

После того, как одолели «корону», осталась одна проблема — новые версии системы так и не поддавались взлому. Чтобы запустить RGH, нужно знать ключ CPU, а чтобы узнать ключ CPU, нужно хотя бы раз запустить RGH. Проблема курицы и яйца, в общем.

И тут возникла мысль — а давайте не только проверку подлинности «глюкнем», но и расшифровку пропустим! Если получится, то нам не нужно знать ключа, положим «CB_B» в открытом виде, да и всё. Именно эта идея легла в основу Double Glitch Hack (DGX):

Этот чип «глючил» проц дважды, первым импульсом пропускался этап расшифровки загрузчика, а уже второй импульс пропускал проверку подлинности. Работало куда менее стабильно, благо требовался хотя бы один успешный запуск — дальше получаем ключ CPU и действуем по-старинке.

Актуален DGX был недолго, спустя 3 месяца китайцы вбросили релиз «DGX R. I.P» с образами, которые запускались на любых приставках, работали со стандартным RGH и, естественно, запускались куда стабильнее:

Эти образы содержали специальную версию загрузчика «CB_A», используемую на производстве Xbox 360 и, по сути, являющуюся полным аналогом старого доброго «Zero-Pairing» режима. Вместо ключа процессора, этот «CB_A_mfg» расшифровывал «CB_B» фиксированным нулевым ключом:

И вот здесь Microsoft всё. В этом «сервисном» варианте «CB_A» тоже не было проверки фьюз и забанить его было невозможно. Достаточно было записать образ согласно ревизии Xbox 360, припаять чип — и всё работало.

Winchester!

Полностью пофиксили RGH только в новой ревизии приставки под кодовым именем Winchester. Впервые процессоры CPU и GPU совместили в одном кристалле, плату максимально упростили:

Дорожки POST_OUT не просто убрали. Даже если подпаяться на площадки под процессором:

И даже, если запаять процессор на специальную версию платы для разработчиков, XDK, где эти дорожки всё ещё есть:

На POST_OUT виден только один импульс при запуске приставки. Шина заблокирована:

Более того, она блокируется только на этапе производства. Если взять «чистый» процессор с фабрики, где ещё не успели прожечь фьюзы — на нём POST_OUT работает!

Но вот RGH на нём уже не срабатывает. Как бы вы ни пытались подать RESET импульс, процессор корректно выполняет сброс, или же игнорирует ваш сигнал из-за слишком малой длительности. По-видимому, в процессор добавили специальный логический модуль, фильтрующий линию RESET и тем самым окончательно исправили аппаратную ошибку.

Post Scriptum

Выходит, последнюю ревизию Xbox 360 взломать невозможно?

И да, и нет. На данный момент известен только один способ запустить модифицированную систему на ревизии Winchester.

В наборе ПО для разработчиков (XDK) есть различные приватные ключи для подписи скомпилированного кода. И так вышло, что среди них затесался ключ подписи «shadowboot», загрузчика третьего уровня для XDK систем. И с его помощью можно собрать легитимный подписанный образ с модифицированной прошивкой. Вот только работать на обычных, «магазинных» приставках он не будет. Нужен процессор с XDK версии приставки, либо «чистый» CPU с непрожжёными фьюзами (можно было встретить на Aliexpress):

И только тогда у вас будет возможность лицезреть в «сведениях о системе» кастомной оболочки такую вот надпись:

А на этом всё! Как обычно, готов ответить на ваши вопросы в комментариях :)

Если Xbox 360 не подключается к Xbox Live

Если Xbox 360 не подключается к Xbox Live

Xbox Live – сетевая служба, которая позволяет всем моделям консолей Xbox 360 использовать качественный игровой контент «из первых рук». Это настоящий клондайк для геймеров, в котором найдутся игры любой сложности и тематики. Нужно лишь зарегистрироваться, войти, выбрать свою стихию и начать играть.

К сожалению, не всегда получается всё так просто и легко. Нередки случаи, когда Xbox 360 не подключается к Xbox Live, выдавая непонятные, на первый взгляд, ошибки. Из этой статьи вы узнаете о типичных проблемах доступа на игровой ресурс, возникающих у пользователей.

Xbox 360 не подключается к Xbox Live: виды ошибок

Xbox Live – один из сервисов системы Microsoft, поэтому доступ к нему осуществляется через аккаунт в MS. Достаточно иметь подключение к Internet, чтобы, следуя инструкции по подключению, без проблем попасть в эту кладовую игр.

Однако иногда Xbox 360 не входит в Xbox Live, и на экране появляется уведомление об ошибке:

В наших мастерских производится ремонт Xbox 360 . Вы можете смело довериться многолетнему опыту наших специалистов. Звоните и записывайтесь!

Подключение к игровой службе Xbox Live может сопровождать довольно широким перечнем ошибок.

Для удобства пользователей система Microsoft предлагает отслеживать состояние службы в режиме онлайн через страницу «Состояние службы Xbox Live«.

Ещё одна причина, по которой геймеры не могут попасть на ресурс – принудительное ограничение доступа к конкретной учётной записи со стороны администрации.

Что будет если забанят Xbox 360?

Блокировке подвергаются консоли и профили пользователей. Баны применяются, если игрок нарушает правила пользования игровым сервисом:

Многие владельцы Xbox 360 предпочитают перепрошивать свои приставки для возможности неограниченно пользоваться игровым контентом бесплатно. Решаясь на перепрошивку, стоит понимать, каков риск получить бан в Xbox Live в таких случаях. Устаревшие версии прошивок – повод для введения ограниченного доступа к учётным записям и блокировки Xbox 360 по ID. На данный момент система Microsoft редко применяет такие меры к завзятым геймерам, но стоит позаботиться об обеспечении своей консоли последней версией прошивки. Это гарантирует беспрепятственный доступ к игровому сервису и позволит полноценно наслаждаться сетевыми играми.

Что делать если Xbox 360 забанили?

Если администрация Xbox Live произвела только блокировку профиля, то продолжить игровую активность можно, создав новый аккаунт. В случае, когда забанен Xbox 360, вновь созданный Gamertag не сможет решить проблему. К сожалению, заблокированную по ID приставку не сможет разблокировать даже мастер сервисного центра, это не в его полномочиях.

Комменарии (1)

Анастасия

Добрый вечер. При регистрации в Xbox Live возникает ошибка: » Введенный адрес электронной почты или пароль не работает. Повторить попытку с другими данными или используйте свой пароль приложения, если вы настроили двухшаговую проверку». Причем с теми же данными на компьютере учетная запись работает. Поясните, что делать в этой ситуации?

Ошибка 8015000a на Xbox 360 — как исправить? Поможем

Ошибка 8015000a на XBOX 360 — неисправность, свидетельствующая об отсутствии, повреждении или завершении лицензии. Возможна и другая ситуация, когда загрузка профилей на данный момент невозможна и необходимо сделать попытку позже. Для решения проблемы устраните проблемы с загружаемым контентом или очистите системный кэш. Ниже рассмотрим причины и основные действия, которые помогают справиться с ситуацией своими силами.

Причины ошибки 8015000a

Для начала разберемся, почему появляется ошибка 8015000a на XBOX 360. Этому может быть несколько объяснений:

Во всех этих случаях возникает ошибка 8015000a, которую можно посмотреть на xbox com errorhelp.

Что делать

Теперь подробнее рассмотрим, как действовать для восстановления работоспособности ИКС Бокс 360.

Устраните проблемы с загруженным контентом

Для начала убедитесь в отсутствии проблем со скачанной информации. Сделайте следующие шаги:

В большинстве случаев рассмотренные выше шаги дают результат. В случае неуспеха в каком-то из пунктов переходите к описанным ниже шагам.

Почистите системный кэш

Рассматривая, что делать в XBOX 360 при ошибке 8015000a, напрашивается вариант с очисткой кэша. В нем хранятся сведения по обновлению игр, пакеты установки новых версий, картинки друзей и многие другое. При удалении кэша остается тег игрока, файлы игр, загруженный контент и обновление ПО.

Для очистки системного cache сделайте следующее:


После завершения работы система перебрасывает на запоминающие устройств. Далее жмите на Guide для возврата в главное меню. Аналогично почистить кэш можно на Xbox One.

Теперь вы знаете, что такое на икс бокс 360 ошибка 8015000а, и как ее исправить. В комментариях поделитесь своим опытом в решении подобных проблем.

Источники:

https://m. habr. com/ru/post/500246/

https://proshivka. pro/esli-xbox-360-ne-podklyuchaetsya-k-xbox-live/

https://xboxsx. ru/oshibka-8015000a/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: