Как устроен RGH ?
В последнее время меня стали часто спрашивать про принцип действия Reset Glitch Hack. Чем был вызван такой интерес именно сейчас, мне не особо понятно. Но раз хотите, вот вам статья..
Сначала разберемся с процессом загрузки Xbox 360. Он состоит из нескольких загрузчиков, запускающих друг друга по цепочке:
(более подробно можно почитать
Самый первый, 1BL, сидит в самом процессоре и никогда не меняется. Он один и тот же во всех приставках Xbox 360 (за исключением, возможно, Winchester)
Второй загрузчик (CB) привязан к Fuse #02 в процессоре. Таким образом, MS прикрывает уязвимые загрузчики — достаточно повысить значение этого фьюза и старый загрузчик просто не запустится. Так прикрыли JTAG. (подробнее про возможные конфигурации Fuse #02 читайте здесь)
Все они перед запуском следующего по очереди загрузчика, проверяют его на валидность. Если хоть немного изменить код, подпись оказывается нарушена и процесс загрузки оборвётся. Чтобы запустить свой код, необходимо подписать модифицированный загрузчик (что невозможно без секретного ключа) или каким-то способом обойти проверку. Последнюю идею и реализует RGH.
-
Что такое POST BUS?
Это восьмибитная параллельная шина, в которую легко записать некоторое число прямо из кода загрузчика. Используется для отладки, проверки работоспособности процессора после изготовления, ну и для RGH 🙂
Благодаря тому, что в процессе загрузки в определенных участках кода происходит запись в эту шину, мы можем определить, на каком этапе исполнения находится процессор! Например, перед началом проверки подписи CB_B, значение шины меняется на 0xDA
-
Как запускается неподписанный код?
Основная цель — запустить свой неподписанный загрузчик CD. В случае с одиночным загрузчиком CB, достаточно было «пропустить» лишь одну проверку. В двойной версии, поделённой на CB_A и CB_B, проверки были значительно усилены, так что без модификации CB_B не обойтись. Но CB_B зашифрован ключом CPU, который неизвестен! Как же его модифицировать? К счастью, особенности шифрования RSA таковы, что зная дешифрованные данные, можно поменять их даже не зная ключа. Модифицированный CB_B, конечно же, не будет проходить проверку в CB_A, но мы её «обходим» 🙂
-
И как же мы обходим проверки?
Переходим к самым-самым деталям. Почитать подробнее можно
Основная идея в выключении процессора на очень малое время. При этом, сбрасывается регистр, отвечающий за проверку подписи! (там условие «если 0, то продолжить» — вот тот ноль мы и создаем) Но помимо регистра условия, есть и другие регистры — например, регистр, содержащий адрес CD в памяти. Если он тоже очистится, проверка пройдёт, но система не запустится. В этом и заключается основная проблема стабильности RGH — очистить один регистр, не зацепив другие!
-
Ок, как это происходит?
Для выключения процессора, чип посылает сигнал ‘0’ на точку CPU_RST. Подать нужно в определенный момент и на определенное время. Необходима очень высокая точность, поэтому процессор желательно замедлить. В RGH1 для этого использовалась точка PLL, она замедляла процессор в 128 раз, так достигалась превосходная точность и высокая стабильность. На Slim подобной точки найти не смогли, поэтому замедление происходит по шине i2c, всего лишь в 3.1764 раза. Почему так мало? i2c позволяет замедлять и сильнее, но процессор начинает противиться, работая не на той частоте, что задали! При замедлении в 3 раза всё работает более-менее стабильно, так и оставили.
Какртинка в заголовке статьи показывает как примерно должен выглядеть импульс глича моей прошивки под x360ace
-
Хм. Тогда почему бы не использовать PLL в случае с RGH2?
При таком сильном замедлении выполнения кода CB_B, процессор перестает работать. Причина мне неизвестна.
-
А что такое R-JTAG?
Как я уже писал, JTAG был прикрыт путём повышения значения Fuse #02. Старый загрузчик не запускается, потому что проваливается проверка этого самого фьюза. Вот в R-JTAG эта проверка и обходится с помощью чипа.
-
MS ведь пыталась прикрыть RGH?
Да, конечно. Начиная с обновления 14717, в CB_A и CB_B отсутствует запись в POST_BUS, что должно было оставить RGH без точки отсчёта. Обошли эту проблему быстро — проверка Fuse #02 происходила в CB_B, так что хакеры использовали старый CB_A и ещё больше модифицировали CB_B.
Обновление 15572 принесло новый вид шифрования CB_B и невозможность его модификации без ключа CPU. Первое решение было от Team Xecuter — DGX чип. Он позволял запускать незашифрованный CB_B, пропуская сначала процедуру расшифровки, а затем и проверку подписи. Такой двойной обход был очень нестабилен, но всё же работал. Получив ключ CPU, можно было вернуться к старым чипам.
Ну а дальнейшее вам известно — ушлые китайцы добыли сервисный загрузчик MS, который запускал CB_B, зашифрованный нулевым ключом. И больше не было необходимости модифицировать родной CB_B, получился унивесальный образ для любых приставок.
После неудачи с программным отключением POST_BUS, летом 2012 MS просто убрали доступ к шине, убрав дорожки к точкам. Но после нашего релиза и эта проблема была решена. TX выпустили постфикс, китайцы успешно его скопировали, все счастливы.
Наконец, самая последняя ревизия Xbox 360, Winchester на данный момент считается невзламываемой. Обычных сигналов на шине POST нет даже с сервисным загрузчиком. Необходимо искать новую опорную точку. Но кому уже нужна консоль десятилетней давности?
Большое спасибо за статью, даже после штудирования free60 было интересно прочесть! А где можно ознакомиться с хронологией взлома ящика в целом? Еще давно гуглил, но ничего путного не нашел, а хочется иметь в голове полную историю
эмм. не особо помню всё. самые основные даты:
где-то в 2006 — выход прошивки под хитачи, первый взлом привода
конец 2006 — King Kong Exploit, первый взлом системы, без него не было бы ни JTAG, ни RGH
конец 2008 — все ждут прошивку LiteOn от c4eva, я впервые покупаю Xbox 360 чтоб поиграть в GTA 4 ^_^
середина 2009 — выход JTAG взлома, первый фрибут
конец 2011 — выход RGH
Значить Winchester ломать уже не будут? сразу с O NE начнут?
я уж писал, есть сведения что кто-то ломанул. подробнее ничего не знаю)
Пользуясь случаем спрошу — про взлом хуана ничего не слышно?
вроде что-то делают TX. что именно — не сообщают
МЕГА-GODLIKE ЗА СТАТЬЮ!!! \о/
Ричи большое тебе и человеческое спасибо за все что ты делаешь!
консоль 10 летней давности ещё очень хорошо продается в наших колхозах (денди с сегой
Спасибо большое! давно интересовал данный вопрос, всё не мог найти информацию. У самого тринити, а думаю кто хочет Freeboot пойдёт и купит себе б.у Corona. Хотя очень интересно, что уже эра Xbox One, и только сейчас выпускают новую материнскую плату для приставки.
xbox 360E 500Gb 3MN-00005 (Media Markt)(+Kinnect+Adventures+Sport+Forza), 17-09-2014 оказалась плата Corona v6. Cбоку посветили фанариком, без разбора — сразу видно, что проц с крышкой и видно расположение элементов на картинке как с Corona 6, можно сразу в магазине перед покупкой посмотреть — разницу хорошо видно
Здравствуйте! Попалась тема
http://team-xecuter.com/forums/threads/62331-Protecting-eFuses-and-JTAG-From-Updates-(R6T3-U6T1-U6T2-Methods)
где описан способ, как предотвратить изменение фьюз и остаться на 0000F00000000000
Там же указано, что ритейл (12611 и выше) упадет в E80, а фрибут из-за виртуальных фьюз будет чувствовать себя хорошо.
Непонятно, если CB_A оригинальный и CB_B кастомный, то проверка фьюз 02 должна быть в CB_B?
«проверка Fuse #02 происходила в CB_B, так что хакеры использовали старый CB_A и ещё больше модифицировали CB_B.»
Сам спросил, сам ответил. 🙂