Comments 64
Собственно вопрос только, что стимулирует такие инженерные подвиги. Любопытство, принцип, деньги?
Большинство подвигов совершается, в первую очередь, из интереса. Запустить линукс, написать свою программу на чужом железе. Понять, как оно работает. Часто ещё стимулом является получение прибыли — команда Team Xecuter неслабо заработала на продаже модчипов и аксессуаров.
Спасибо за эту серию статей, написанных понятным языком. Получился самый настоящий технодетектив. Интересно, найдут ли подход к Winchester с прожжёными фьюзами или фокус тех, кто ищет лазейки в консолях, сместился к исследованию следующего поколения?
Нет в планах написать подобное для прямого конкурента приставки — Playstation 3? Там история будет покороче благодаря получению хакерами ключей LV0, но тем не менее были и интересные моменты. Например, откладывание выпуска Gran Turismo 5 из-за взлома прошивки. И сама архитектура консоли довольно необычна.

Проблема с Winchester в том, что эта ревизия появилась уже на закате Xbox 360, и выпущено было их не так много. Новые уязвимости искать нецелесообразно — кто хочет взломанную, найдет б/у Corona или даже Jasper.
А про PS3 я не настолько много знаю, так что писать не планировал, но всё возможно.

У Вас хорошо получается. Думаю про PS3 получиться не менее увлекательно.
Кстати, какой самый актуальный способ взлома Jasper обновленного на последнюю версию дашбоард на сегодняшний момент?
RGH 1.2 на чипах Matrix или CR3 очень стабильно запускается (замедление PLL + загрузчики RGH2)
Нет в планах написать подобное для прямого конкурента приставки — Playstation 3?

В момент актуальности этих событий, тут в комментариях даже сам kmeaw иногда отписывался, правда про взлом практически ничего не раскрывал. Вот уж кто мог бы многое поведать.
Хотя, про взлом Ps3 по-моему изначально больше информации было доступно, например есть вот такое: www.youtube.com/watch?v=DUGGJpn2_zY
Платка для глитч-хака была моей первой покупкой на Али. Я купил БУ фатку на излёте жизненного цикла консоли как самый дешёвый способ поиграть в GTA V. Если не ошибаюсь, это была ревизия Falcon. У неё был уже прошит привод, но сам привод был стар и нестабилен, да и писать болванки в то время уже казалось муторным. И я решился на авантюру с глитчем, только FreeBoot меня устраивал. Паяльник я держать умел, поэтому было очень интересно провернуть всё самому.

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

С тех пор я перестал быть мамкиным хакером, купил Xbox One S, и даже честно купил GTA V под неё. Так что, надеюсь, моя совесть очищена, зато интересный опыт остался.

Огромное спасибо вам за этот цикл статей, было очень увлекательно. Поражает упорство и уровень мастерства инженеров, которые всё это изобретали.

Я купил "корону" (да, в нынешнее время это уже странно звучит) в 2013-м, в "чёрную пятницу" на Амазоне, за смешные $199.99 (полный комплект, с кинектом). А потом уже возник вопрос, что с ней делать (очевидно — детям). Как раз исходя из того, что xbox 360 на тот момент уже достаточно давно был на рынке, а потому информации об особенностях, хаках и т.д. — полный интернет. Только вот обилие различных версий поиск этой самой информации немного усложнило.
О да, это был реальный челлендж — раскопать нужное, подпаяться к флешке, состыковать это с кардридером на системнике, слить прошивку, слить ключи, пропатчить, купить и прошить платку гличхака (правильную платку — потому что их тоже уже пучок был разных на али). А потом подбирать длину провода, чтобы добиться наиболее стабильного запуска.
Да, как пропатчить SMC я по итогу так и не разобрался, поэтому работает родной. Т.е. 5 попыток запуска, потом красное кольцо. Надо выключать и снова запускать. Но обычно хватает двух попыток.
Получился очень классный лайтовый опыт (лайтовый — потому что я не разбирался в тонкостях сам, использовал готовый опыт). Хоть и пришлось попаять, но ровно столько, чтобы по шагам дойти до финиша и при этом не потерять интерес. Это примерно, как собирать лего-техник со схемой в два-три тома, или икеевскую мебель.

Когда я купил Xbox 360 в 2008, информацию пришлось собирать настолько по крупицам, что забурился в это дело на десяток лет, что вылилось в мою сегодняшнюю профессию. Так что могу смело поблагодарить Xbox 360 за интересное времяпровождение

Огромное спасибо за цикл статей!
Доступно, познавательно, на интересную тематику и, самое главное: с обилием технических деталей и без утаивания самых интересных моментов (на зарубежных форумах хакеры до сих пор бывает жмутся все секреты взлома PS1 раскрывать, которой 30 лет уже, а здесь X360!).

Сперва вот такой вопрос: после появления RGH было много сообщений, что этот взлом (в отличие от старого JTAG) очень быстро выводит из строя процессор: постоянные попытки его сглючить, мол, быстро приводят к деградации и отвалу/сгоранию. Действительно подобное имеет место, или это очередные страшилки из серии «приставка сажает кинескоп»?

Ну и вопрос, который невозможно не задать: а XOne ковырять не пробовали?
И почему, по вашему мнению, там всё совсем глухо? Абсолютно непробиваемая защита, хакеры нынче перевелись и/или их всех скупила/запугала Microsoft, или ломать просто неинтересно благодаря новой лояльной к homebrew политике компании, etc?

Рад стараться :) Это я ещё часть информации не указываю, иначе уж слишком много всего получится.
Процессор действительно мог выйти из строя, но не от самого RGH, а из-за колдовства с PLL — встречал случаи, когда PLL отключался навсегда и процессор так и оставался в улиточном режиме. Случаев, когда процессор со временем ломался сам по себе от RGH2 — не знаю.
В Xbox One я не лазил, но по тому что знаю, в нём учли все описанные ошибки и он действительно очень надёжно защищён. Даже если кто взломает, очередным обновлением с большой вероятностью всё закроют. Отсюда у людей нет особого желания этим заниматься — полгода делаешь эксплоит, а он будет актуален неделю максимум.

Спасибо, ответ ещё интереснее!
Насколько я понял из статьи, с PLL возможно было колдовать только на старых ревизиях, где он позволял замедляться аж в 128 раз. И именно здесь оказалось слабое место?
А починить этот PLL как-то представлялось возможным, пусть перепайкой чипа, или вообще с концами?
И, в итоге получается, что парадоксально, но RGH безопаснее для новых консолей, где в PLL залезть нельзя?

В Xbox One я не лазил, но по тому что знаю, в нём учли все описанные ошибки и он действительно очень надёжно защищён

Ясно, наверное так и есть. Ведь если проанализировать, то X360 по факту получился защищеннее той же PS3 (про нинтедовские консоли, которые, как кажется, не ломает только ленивый, и не говорю). Да, он был взломан раньше, и казалось, что его вот «постоянно ломают», а PS3 неприступная. Но, весь взлом X360 был направлен именно на привод. Уязвимостей, которые позволяли запускать произвольный код, там было кот наплакал (JTAG, ну и RGH потом), и все они требовали сложной процедуры с раскурочиванием консоли и тонкой пайки. Для сравнения, у PS3 оказалась огромная программная дыра, позволяющая взломать ранние ревизии штатной установкой прошивки с флешки (только поначалу были донглы, также используемые без пайки, просто вставлявшиеся в USB).
Да и для любых моделей PS3 недавно был выпущен полный взлом HEN — опять чисто программный, через веб-эксплойт. И Сони не может закрыть его уже несколькими обновлениями прошивок (хотя, на сегодняшний день это для нее наверное уже и не особо актуально, пс3 давно мертва, но всё же) — там просто берут, и заменяют часть модулей в прошивке на старые версии, и всё опять взламывается.
Для X360 же никаких подобных «легких» программных взломов нет и скорее всего не предвидится — только пайка, только хардкор.
Единственное, когда на пс3 надо было что-то паять — это в период до HEN, когда ставили аппаратные эмуляторы BD-привода, по типу Cobra ODE.
Тот PLL, что ломался — он внутри процессора, так что только замена CPU. Получается, для самой приставки замедление с I2C безопаснее, зато с PLL запуск гораздо стабильнее. Старые приставки тоже можно замедлять через I2C (кроме Xenon, но там отдельный случай), это уже на выбор. Да и смертей от PLL всё равно очень мало, оно стоило того.
По поводу уязвимостей — весь взлом системы X360 начался с простого программного бага в гипервизоре, для запуска достаточно было игру одну запустить (см первую часть серии статей). JTAG Hack — тот же самый программный баг, но похитрее завёрнутый.
в свое время ps3 для downgrade на 3,55 надо было чуток попаять, особенно старые NAND версии ~ 40 проводков, в NOR поменьше, для NAND также требовалось склеить дамп и вычитать ключ на всякий случай. Далее уже патчился NAND и шился обратно, с него можно было откатиться на 3,55 а с 3,55 на любую другую прошивку =)
Для всего этого пришлось собрать teensy программатор с рассыпухи, влить в него фирмварь)
Щас как вспомню… проще было заплатить за прошивку мастеру чем так парится. Зато какой челендж, опыт :)
В том и дело, что ключевое слово «downgrade» — если по глупости/незнанию обновили прошивку выше заветной 3.55.
Но даже здесь, изначально прошиваемую приставку (заводская <3.55) всё равно можно было взломать после обновления ПО, пусть и с пайкой.
Для сравнения, X360 если обновить даш — всё, с концами, из-за фьюзов даунгрейд невозможен, и JTAG уже никогда на эту консоль не поставить.
Т.е. MS смог закрыть программную дырку апдейтом ПО даже на уязвимых консолях, на консоли от Sony — это невозможно, дыру закрыли только в новых аппаратных ревизиях приставки.
Потому и говорю, что у Майков на самом деле гораздо лучше вышла защита, привод разве что подвел.

И, кстати, для PS3 сейчас придумали и полностью программный даунгрейд, даже при обновлении на последнюю официальную прошивку — всё откатывается через эксплойт, паять ничего не надо.
Кстати для Xbox 360 тоже придумали, через глич пропускать проверку фьюзов и запускать тот самый JTAG хак (R-JTAG, R-JTAG+), но метод не получил большого распространения.
Друг отдал trinity c 4gb памятью вместо жесткого, после вашей статьи захотелось попробовать повозиться =)
вопрос чем читать\шить нанд?
переделать arduino,
найти комп с LPT,
другой JTAG пограмматор(например stlinkv2).
или есть другие варианты патча нанд?
Там SPI протокол. MTX SPI Flasher стоит 4 бакса, самый недорогой и поддерживаемый вариант. через nandpro читать/писать

SPI/JTAG адаптер на FT232H стоит 5 баксов, более полезная штука, софт от 360Squirt должен подойти

клоны JR Programmer чуть подороже, но и пошустрее будут. работает через JRunner
Я вот сморю и думаю ведь spi же, но у схем что я нашел — pinout для «mtx spi flasher»(tms tdi tdo tck gnd/vcc) т.е JTAG
а для SPI(sck rst mosi miso gnd/vcc), у меня «ведро» разных spi программаторов и покупать еще один не хотелось бы, в любом случае можно попробовать через LPT или купить MTX накрайняк
Вам спасибо за ответ, буду пробовать =)

MTX SPI Flasher народ умудряется для прошивки глич-платки XC2C64A использовать (она как раз по JTAG шьётся) — вы, наверное, эту схему нашли. Сам NAND Xbox 360 читается по SPI через южный мост. Наверняка можно что-то сварганить на Arduino или CH341A, но это возиться надо и кодить :) правда, не искал, может уже и появились готовые проекты для этого

www.youtube.com/watch?v=U7VwtOrwceo

Все очень плохо/хорошо, смотря с какой стороны смотреть. Постарались они там на славу. Пс4 вон смогли нагнуть и все оказалось там не особо наворочено. К xbox one я даже не видел, чтобы кто-то подступился.
где и как они это всё находят? ну с адресными шинами понятно, найти можно, но всё остальное? неужели методом тыка.
Сам RGH — известный тип атак, просто попробовали на новом объекте (Xbox 360) и получилось. Всё остальное — долгое изучение системы и реверс-инжиниринг. При полном понимании как и что работает, становится видно, какие варианты есть и где слабое место
а как они нашли метод со сверлением чипа в приводе двд? я сам несколько ключей так получил. до сих пор 360 коробка работает с эмулятором привода.
Растворили чип кислотой, наметили точку, где проходит проводок Write Protect, написали софт, подающий команду разблокировки. Тут единственное, что сложно вообразить — что это в принципе возможно сделать и не сломать привод.
А насчет ваших ключей — очень странно, ключи читаются полностью программным методом, сверлить для установки эмулятора не требуется.
тогда, когда я сверлил, это был единственный метод получения ключей. сначала прошивку в приводе менял, а потом 360key, который до сих пор прекрасно работает.

Сверление требовалось для записи прошивки, это так. А вот ключ получался перед этим, программно. Более подробно про это описано во второй части.

а. действительно. забылось уже по давности лет. файлики с ключами все еще рассованные переодически попадаются :-)
что интересно. повторная перепрошивка производилась просто намоченной водой ваткой, без сверла уже.

Эх, где мои годы. Моя статьи по прошивкам на xboxland всё еще живы.


Помню как народ ждал возрождение железного взлома и как появился rgh.


Переводил статью автора взлома и сразу платы разводил под xilinx.

прекрасная серия статей, большое спасибо. все понятно и хорошим языком написано.
tl;dr. помню взламывал дома. с иголкой сидел и тыкал в контакт на плате, получилось с первого раза, страшно было жесть )) ибо там (в старых мануалах) говорили что если выключиться питание коробка станет реальной
Кстати, на заглавном фото — самопальный сокет для быстрой замены проца без пайки. Вот так выглядит в собранном состоянии
image
Наилучшее место для атаки нашлось в загрузчике второго этапа, «CB».
Как именно "нашлось"? На первый взгляд для проведения атаки нужно иметь листинг загрузчика, что бы все проанализировать, посчитать такты и пробовать.
Расшифрованные загрузчики получить несложно — нужна консоль с известным ключом (например, ранее полученным через JTAG Hack), обновлённая до последней версии. Дальше — мощный и быстрый микроконтроллер (или FPGA) для банального перебора таймингов. Перебираем все возможные моменты посылки импульса на определённом POST коде и все возможные длины импульса. Сработает — отлично, не сработает — пробуем другую идею. Парень полгода с этим возился.
JTAG Hack позволяет получить ключи и код загрузчика без знания устройства "черного ящика"?

Нет, всё началось с эксплоита для гипервизора. Как был изначально получен код гипервизора не раскрывается. Полагаю, его получили из средств разработчика Xbox 360 (Xbox Development Kit, XDK), в этом наборе было много информации о приставке, даже символьная информация о внутренних функциях.

Тот самый случай, когда Хабр — торт! Спасибо за заметку, на одном дыхании!
Я сразу понял, что подобную статью мог написать только один человек (на твоем форуме у тебя был другой никнейм). До сих пор в моем запылившимся драндулете стоит x360ace с твоей прошивкой.
Спасибо за статьи и за все, что сделал для комьюнити 360.
Спасибо за замечательную статью!
У меня, что-то из отдаленного, вспомнилось — BenqSiemens E71, разблокировка иголкой какой-то ноги проца на массу, ельфы… было время)
«И все таки убийца — это дворецкий!»
Большое спасибо, за заключительную часть этого технотриллера, с кровавыми чудесными расчленёнками подробностями!
А как работал DGX если там навтыкали слипов и убрали POST?

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

Вот это тоже не понятно.
Если вы не знаете ключа, как можно «зашифровать CB_A»?
Я так понял он не меняется? Или его тоже можно подменить?
А как работал DGX если там навтыкали слипов и убрали POST?
Вместо нового «CB_A» записывали старый, уязвимый. + такой же старый CB_B в незашифрованном виде.

как можно «зашифровать CB_A»
Он шифруется фиксированным ключом, одинаковым для всех (1BL Key). Потому и можно его в любую приставку записать было. Проблема была запустить CB_B из этого CB_A, не зная уникального ключа CPU
обратите внимание на «катушку» снизу фото
Да там не только на конденсаторе намотано, а даже и на радиаторе…
А вообще каким образом люди изначально доходили, что вот нужно подать на ресет кратковременный сигнал в определенный момент? Ведь документации же нет?

А документация такое не описывает, это глюк, недокументированное поведение, нарушение нормальной работы процессора. Изначально находили, пытаясь воздействовать на объект разными методами на грани адекватного — например, CLK-глич вносит сбой в частоту работы процессора, нарушается конвейер исполнения, происходит глюк. Просадка по питанию нарушает работу компараторов внутри проца, изменяя логические уровни. Так и с линией RESET — кто-то однажды подумал, а что, если жахнуть на него совсем короткий импульс — перезагрузится или нет? В документации, к примеру, говорится, что для сброса нужно занулить линию на 1мс. В таком случае зануление на 1мкс явно будет граничной ситуацией с неопределенным поведением. Вот и глюки

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

В сообществе возникала мысль, что кто-то в Микрософт постоянно сливает информацию о внутреннем устройстве очередных плат?
И сколько всего разных плат получилось в итоге?

А что именно, по предположениям сообщества, сливалось? На плате и так видно расположение компонентов. Сомневаюсь, что были сливы.
Мажорных ревизий 8:
Xenon, Zephyr, Opus, Falcon, Jasper, Trinity, Corona, Winchester
Но, к примеру, тех же Corona минимум 3 ревизии самой платы и 6 видов вообще.
А ещё для каждой ревизии есть XDK вариант для разработчиков.

Отличный цикл статей, написано хорошо понятным языком, читается как художественное произведение.

Довольно необычно выглядит удаление POST шины с платы — просто удалили дорожки в PCB-редакторе, оставив переходные отверстия.

Году в 2013 ковырял свой Jasper Elite сам. Привод легко поддался iXtreme 3.0 (резистор 22 Ома), а вот FreeBoot не получился — аппаратно все модификации провел, мод-чип напаял и настроил, флешку через LPT-порт древнего компа аж за полтора часа прочитал, а вот прошивка, которую собрал и залил обратно, стартовать упорно отказывалась — по вращению кулеров было слышно, как чип постоянно и бесконечно перезагружает процессор. Убив два выходных, вернул всё в сток и всё снова заработало. Позже отнес в контору, где за 1 день и 3000 рублей всё сделали, ещё сказали, что очень удачная консоль попалась, всё легко получилось. Что я сделал не так — так и осталось загадкой, да и не вспомнить уже за давностью лет. Ну, за то другу в PS2 чип установил вслепую, и оно сразу заработало.

В общем, в итоге консоли перестали взламывать не потому, что это сложно, а потому, что игры стали выходить кривые и с 15FPS, что сделало обязательным подключение к интернету и регулярные обновления. А какие времена интересные были.
Интересно, в «чистый» проц случаем нельзя прошить свои ключи? Или вообще не прошивать или не активировать проверку подписей/шифрование? Чтоб можно было залить полностью свою ОС.

Можно свой ключ CPU зашить, можно самостоятельно фьюзы выставить как захочется, но проверку подписи в ROM отключить нельзя.
Свою ОС — можно и через RGH. Линукс, к примеру, запускается.

Ключ CPU — это который для шифрования? А ключ для проверки подписи тоже можно зашить? RGH — жуткий костыль же.
Нет, ключ проверки подписи намертво зашит в ROM. А насчет костыля, см последний абзац, на нулевом CPU или XDK консоли можно подписать образ и запустить что угодно.
Т.е. в «чистом» проце уже есть какая-то прошивка, совсем не прошитых не бывает? Ключ проверки подписи отличается в релизной и девелоперской версии? Как это достигается — изначально зашито несколько ключей, затем часть блокируется фьюзами?
Под «чистым» процом подразумевается, что его фьюзы ещё не прожжены (см фото в конце). Код первичного загрузчика 1BL находится в масочной памяти ROM. Масочная память вытравливается вместе с остальным чипом и не может быть перезаписана.
Загрузчик второго уровня shadowboot (2BL SB), для которого имеются приватные ключи, при запуске проверяет конфигурацию фьюзов и если выставлен бит «Production», прекращает загрузку. Поэтому его запуск возможен только на XDK и нулевых CPU, где этот бит не стоит. Это если совсем по-простому.

1BL проверяет 2BL через RSA-2048, дальше в релизной цепочке CB->CD->CE->CF->CG просто проверяют друг друга по хеш-суммам, кроме последнего этапа CF-CG, где тоже RSA-2048.
А вот в дебажных SB->SC->SD… уже на ранних этапах RSA-2048, и для этапа SB->SC есть ключ.
Неа, почитайте что означает коллизия с выбранным префиксом
Only those users with full accounts are able to leave comments. Log in, please.