Оглавление
История Gateway 3DS
Сейчас уже никого не удивить возможностью прошивать Nintendo 3DS. Однако, еще 10 лет назад, во времена, когда консоли семейства Nintendo 3DS только начинали завоевывать свою популярность, о «Custom Firmware» (CFW - пользовательская прошивка), никто не слышал. Однако, случился парадокс, который называется Gateway 3DS – это был флеш-картридж, который по сути являлся именно CFW.
Картридж Gateway положил начало долгой истории взлома Nintendo 3DS, которая не закончилась до сих пор.
История
Первый упоминания о полноценном взломе Nintendo 3DS (здесь подразумевается, что вы можете сделать с консолью, что-то осмысленное, а не просто вызвать ошибку) датируются декабрем 2012 года. Именно тогда пользователь Twitter OzModChips опубликовал фото консоли Nintendo 3DS, где на нижнем экране было написано WE HACKED IT!
Но, как вы понимаете, между взломом консоли и готовым продуктом, которым может пользоваться обычный человек лежит огромная пропасть.
Однако, «пропасть» оказалась не так велика, как можно было подумать. 30 мая 2013 года на сайте www.gateway-3ds.com появилась заметка о том, что ожидание закончилось и скоро в продажу поступит первое устройство резервного копирования, которое позволит воспроизводить 3DS игры.
То есть речь шла как раз о флеш-картридже Gateway 3DS.
11 июля 2013 года на сайте Gateway появилась новость, что открывается предзаказ флеш-картриджей. Там же разработчик указал кое-какие подробности о продукте:
1. Флеш-картридж запускается с помощью эксплойта, поэтому очень зависим от версии прошивки;
2. Комплект Gateway будет состоять из двух картриджей: красный 3DS картридж (для запуска игр) и синий DS картридж, который предназначен для эксплойта.
3. Идет работа над созданием эксплойта для консолей с прошивками 6.x+.
А 29 июля 2013 года начались первые рассылки картриджей.
Осталось только понять, а как вообще работал Gateway картридж?
Эксплойт
Где-то в 2012 году пользователь ichfly в редакторе профиля Nintendo DS (а в 3DS была полная аппаратная и софтверная поддержка Nintendo DS игр) увидел текстовое поле, в которое можно было ввести сообщение, позднее появляющееся в PictoChat. Длина этого сообщения была ограничена только графикой. То есть было ограниченное количеств символов, которые можно было ввести.
Казалось бы, и что?
Получается, что приложения Nintendo 3DS могут взаимодействовать с данными из режима Nintendo DS. В нашем случае приложение «Системные настройки 3DS» считывает данные из прошивки Nintendo DS, которые находятся где-то на памяти и не имеют никакого отношения к 3DS. И получается, что если изменить эти данные уже из режима Nintendo DS, то приложение «Системные настройки 3DS» считает измененные файлы.
Помните я выше писал, что длина символов ограничена графикой? Разработчик даже не подумал о том, что доступ к этой строке можно получить из другого места. И если пользователь не мог выделить свободное окошко для продолжения ввода символов, поскольку таких окошек не было, то ничего не мешало сделать это с помощью программы, находящейся на NDS флеш-картридже.
Если говорить простым языком, то выглядело это так: в случае если вы вводили вручную сообщение (процесс изображен на фото выше) и нажимали кнопку OK, то это значение просто добавлялось в память без всяких проверок. Но сама по себе память ограничена, а значит если ее переполнить, то может произойти все, что угодно. В том числе можно записать какой-то свой код и заставить консоль его исполнить.
Нам не нужен графический интерфейс, ведь он просто заменяет текстовый режим. Это как с командной строкой, мы можем открыть программу мышкой, кликнув два раза на иконку, а можем открыть командую строку и текстом запустить нужную программу.
Так появился MSET - эксплойт системных настроек 3DS, который вызывал переполнение стека, из-за чего появлялась возможность запускать неподписанный код.
Проблема в том, что этот эксплойт имеет достаточно ограниченное применение. Но зато он позволяет запустить код из другого места.
Оказалось, что в RAM памяти консоли находилась одна строка «SYS:/Launcher.dat». Фактически это был адрес на конфигурационный файл для Nintendo 3DS, который использовался консолью для Home меню. MSET эксплойт подменял этот адрес на «YS:/Launcher.dat», а адрес карты памяти как раз на «YS:». И тогда консоль пыталась считать другой файл, который был расположен на карте памяти консоли.
Код, расположенный в файле Launcher.dat позволил получить дамп оперативной памяти Nintendo 3DS. Потом началась долгая и муторная работа, которая была связана с расшифровкой того, что творилось в памяти консоли Nintendo 3DS и попытками понять, как она реагировала на изменения.
А уже в самом конце разработчикам Gateway открылся достаточно полный доступ к управлению происходящим на консоли. В итоге файл Launcher.dat был переписан так, чтобы запускать игры и лег в основу Gateway картриджей.
Получилась эдакая матрешка, где один эксплойт вызывает ошибку, которая заканчивается вызовом файла, в котором находится еще один (более глубокий) эксплойт и патчи прошивки, позволяющие запускать игры.
То есть, по сути, это не был чистый флеш-картридж. Ведь изменения вносились в прошивку консоли и разработчикам Gateway ничего не мешало сделать запуск игр с карты памяти консоли.
А зачем тогда нужен был красный флеш-картридж? В это сложно поверить, ведь мы говорим о устройстве сделанном для пиратства, но они встроили в красный флеш-картридж систему DRM (техническое средство защиты авторского права), которая предназначена для того, чтобы проверять, что красный Gateway картридж вставлен в консоль. Эдакая защита нужная чтобы картридж все-таки покупали, а не просто прошивали консоль (как сейчас).
И если вам показалось, что это наглость с их стороны, то нет! Вся эта история становится гораздо веселее, если узнать продолжение.
Безумие
В октябре 2013 года хакер Smealum представил способ запуска копии прошивки консоли с карты памяти. Он назвал эту функцию redNAND. То есть представьте себе, что вы запускаете консоль, но операционная система грузится с карты памяти. Вы можете что угодно делать с этой прошивкой, ведь в системной памяти консоли остается ее оригинал. Так появилась возможность оставить системную прошивку на версии 4.5, а ее копию можно было повышать до любой версии, чтобы консоль всегда оставалась актуальной.
А в ноябре 2013 года на рынке начали массово появляться клоны Gateway – R4i Gold 3DS Deluxe.
И вот тут началось.
Разработчики Gateway конечно же сразу украли труд Smealum и в начале декабря 2013 года имплементировали новую функцию в прошивку своего картриджа (назвав emuNAND). А потом, посмотрев, как бесстыдно R4i 3DS team скопировали их труд (а ребята из R4i 3DS team просто брали последнюю прошивку Gateway, хранящуюся в файле Launcher.dat и добавляли чуть-чуть своего), выпустили еще одну прошивку, в которую зашили код, который проверял контрольную сумму файла Launcher.dat и если она не сходилась, то ломал консоль! Да, представьте себе, ломалась именно консоль, а не пиратский флеш-картридж.
Так многие пользователи R4i Gold 3DS Deluxe сделали из своих консолей кирпичи, даже не осознавая, что между компаниями Gateway и R4i 3DS team шла скрытая борьба.
Но самое забавное было в том, что Gateway, пытаясь вырыть яму R4i 3DS team, подставили и своих пользователей. Ведь любое маленькое изменение файла, которое могло быть связано даже с неправильной записью файла на карту памяти, приводило к изменению контрольной суммы файла Launcher.dat и последующему окирпичиванию консоли даже пользователей оригинального Gateway флеш-картриджа.
Если бы вы посмотрели на сайт разработчиков Gateway во времена этих событий, то увидели бы оскорбленную невинность.
В четвертом абзаце они пишут: «Мы продолжаем расследование отдельных инцидентов с кирпичами, о которых сообщают пользователи настоящих Gateway 3DS картриджей. К настоящему моменту отдельные инциденты с кирпичами, в которых обвиняли нас, были так или иначе опровергнуты и оказались связаны с использованием клонов и модифицированных версий наших официальных файлов».
Если их послушать, то кажется, что в их чудо программу влезли криворукие разработчики клонов и что-то напортачили там. Мол, именно из-за этого окирпичивались консоли, а вовсе не потому, что они добавили какой-то код, который намеренно портит консоли.
Но… Это ведь очень легко проверить, что и сделали разные люди. Например, достаточно знаменитый французский хакер/разработчик Матье Хервейс (@Mathieulh) уже в середине января 2014 года написал в Твиттере:
Ок, я только что нашел время посмотреть GW Launcher.dat (да, я немного опоздал), и процедура окирпичивания определенно является намеренной.
То есть это были не криворукие разработчики клонов, которые что-то натворили с файлом, а именно специально написанный код, который портил консоли.
Эпилог
То, что творили эти люди не поддается никакому объяснению.
Конечно, можно сказать, что это их труд, а его украли. Но портить консоли пользователям, которые вообще не в курсе, что кто-то у кого-то что-то там украл – это перебор. Тем более, что изначально весь этот продукт выстроен на чужом авторском праве и попытке его обойти. Это в 90-ых можно было сказать, что мы делаем продукт для разработчиков игр, а в 2013 такая отмазка уже не прокатывала.
Можно до бесконечности спорить правы они или нет, но я считаю, что в борьбе двух компаний не должны страдать обычные пользователи.
Вот такие славные были разработчики у этого картриджа. К счастью, со временем они поняли, что так делать нельзя и перестали портить консоли. Если вы использовали клон Gateway, то просто получали текст, что данный картридж не поддерживается.