Оглавление
PassMe 2
В статье о «FlashMe» я писал, о замкнутом круге, когда для установки этой кастомной прошивки нужно было купить PassMe или специальную плату для WiFiMe, чтобы в итоге избавиться от использования этих двух устройств.
И все было бы нормально, но основная проблема подкралась оттуда, откуда никто не ждал. Nintendo, выпуская более поздние версии Nintendo DS, изменили прошивку. PassMe с WiFiMe просто перестали работать и моментально устарели.
Конечно, это произошло неспроста. PassMe было прикольным устройством, которое использовали все homebrew разработчики и пока это было не очень востребованным, Nintendo не обращали внимание на это. А вот когда к этому делу подключились пираты и стали выпускать готовые комплекты для пиратства в Nintendo засуетились.
Один из первых готовых комплектов для пиратства: картридж SuperPass и SuperCard.
И Passme, и WiFiMe использовали одну и ту же уязвимость – в заголовке картриджа подменялся адрес исполняемого файла игры на адресное пространство, находящееся в GBA флеш-картридже. А потом, когда ARM9 должен был обратиться к исполняемому файлу игры и начать загружать его в оперативную память, происходило исполнение кода из GBA флеш-картриджа. Подробнее об этом читайте в статье: «PassMe».
Давайте остановимся чуть-чуть поподробнее на изменениях.
Изменения в прошивке
Nintendo не могли глубоко изменять консоль, ведь тогда, либо старые игры были бы не совместимы с новыми консолями, либо наоборот, новые игры были не совместимы со старыми консолями. То есть, фактически получается, что можно было менять прошивку консоли в достаточно ограниченном диапазоне, а BIOS процессоров вообще нельзя было трогать. Это, в свою очередь, означает, что остались другие уязвимости, которые можно было использовать, но об этом чуть позже.
Для того, чтобы устранить проблему PassMe достаточно было проверять откуда исполняется код. И после всех изменений, точка входа в игру должна была находится строго в оперативной памяти консоли, по адресу с 2000000h до 227FFFFh.
Проблема в том, что это решение ломало PassMe и WiFiMe, но никак не устраняло другие пробелы в безопасности.
Всё это стало предпосылками для появления устройства PassMe 2.
История PassMe 2
Эта история начинается с постов пользователей, которые купили новые Nintendo DS и обратили внимание, что они теперь не работают с PassMe. На разных форумах стали появляться жалобы, но это никак не помогало найти выход из ситуации.
Для homebrew разработчиков основная проблема заключалась в том, что нужно было купить консоль с новой прошивкой. А, как вы понимаете, на консолях нигде не было написано, новая она или старая. На руках продавцов, еще было полно старых консолей.
Первым купить новую консоль получилось у Loopy (основной разработчик FlashMe). Он где-то смог достать версию iQue DS. А она точно была новой, ведь ее продажи стартовали только 23 июля 2005 года.
Loopy достаточно быстро установил, какие были изменения в новой прошивке. Он нашел способ обхода введённых ограничений через SRAM память GBA флеш-картриджа, точка входа которой и находилась в диапазоне адресов оперативной памяти. Он даже переделал свой PassMe и выложил все необходимые файлы, чтобы другие пользователи могли повторить его путь.
Что же он придумал?
Он нашел интересное решение, связанное с SWI прерыванием.
Итак, вы включаете консоль и начинаются всякие процедуры с проверками картриджа на оригинальность. После них, ARM9 начинает подгружать данные с картриджа в оперативную память. В какой-то момент, читая код с картриджа, процессор доходит до первой ненулевой SWI функции.
И вот тут вступал в работу PassMe2 – он подменял код, который должен был запуститься из SWI функции на нестандартный вызов BIOS ARM7 процессора, который переходил к SRAM памяти и начинал с ней работать. А в последней, находился код, который возвращал команду ARM9, о том что можно продолжить выполнение программы с такого-то кода. И вот именно на этом этапе и происходила главная подмена. ARM9 начинал выполнять не тот код, который должен, а другой, указатель на который ему вернулся из SRAM памяти.
Но тут оставалось две проблемы:
Во-первых, нужен был картридж со SRAM памятью, а они стоили дорого.
Во-вторых, у всех оригинальных картриджей такое прерывание было в разном месте, а кое-где его просто не было.
Наличие флеш-картриджа со SRAM памятью — это проблема пользователей, которая решалась деньгами, тут homebrew разработчики не могли ничего сделать. А вот как узнать в каком месте находится SWI прерывание в каждой конкретной игре - это большой вопрос. Особенно, если учитывать сколько уже было разных игр на руках у пользователей.
Natrium42 написал программу callfinder.ds.gba (несмотря на разрешение .gba – это DS игра), которую можно было запустить на старой Nintendo DS, используя PassMe.
Эта программа тестировала игру и возвращала адреса SWI функций. При этом функции не всегда использовались в каждой игре, поэтому иногда возвращалось значение 00000000. Если во всех четырех местах стояло значение 00000000, то игра не подходила.
А дальше DarkFader вручную правил код, который нужно было прошить на PassMe, под каждую конкретную игру. На его сайте можно было увидеть таблицу с готовыми файлами.
Если справа в графах (PassMe CPLD и PassMe SRAM) нет файлов, то игра не подходит.
Оставалось только перепрошить PassMe под конкретную игру и записать сохранение в SRAM память. После этого у вас все должно было работать.
PassMe и PassMe 2 на 99% похожи. Основная разница только в прошивке. Причем, если PassMe 1 работает с любой игрой, то для PassMe 2 подходит только та игра (картридж), на которую он изначально запрограммирован.
Super Pass 2
У меня есть коммерческий аналог PassMe 2 – Super Pass 2. Он поставлялся в красивой коробочке.
Единственная разница между ними в том, что у Super Pass 2 в комплекте идет адаптер для его перепрошивки (крайне удобная вещь). А значит не нужно паять свой собственный JTAG кабель.
Еще Super Pass 2 хорош тем, что у него была своя собственная программа для перепрошивки чипа. В обычном же случае нужно было качать Xilinx ISE и с ее помощью прошивать чип (но это не так удобно).
Давайте посмотрим, что нам понадобится для запуска homebrew игр на Nintendo DS:
Super Pass 2;
Адаптер для прошивки чипа;
GBA флеш-картридж с картой памяти;
Оригинальный картридж с игрой для Nintendo DS (список подходящих картриджей можно увидеть в программе superpassV10);
Кабель USB;
Программа superpassV10
.
Скачайте архив: superpassV10.rar
Разахивируйте его и установите программу в любое место.
Вставьте Super Pass 2 в специальный адаптер, а последний в LPT порт вашего компьютера. USB кабель одним концом нужно вставить в адаптер, а вторым в ноутбук.
Обратите внимание, на Super Pass 2 есть переключатель защиты прошивки. Перезаписать чип можно только если он стоит в левом положении.
Запустите программу superpassV10, появится такое окошко:
Здесь нужно выбрать игру. У меня есть картридж Fifa 06 (европейская версия), поэтому я выбираю именно ее. Дальше нажимаем кнопку Program. Всё! Буквально через 5 секунд всё будет готово. Но работать вся эта конструкция все еще не будет.
Если зайти в папку куда вы установили программу superpassV10
, то там вы увидите огромное количество файлов:
Каждой игре (картриджу) соответствует 3 файла с разрешениями: xsvf, gba и sav.
xvsf
– файл для перепрошивки чипа Super Pass 2;
sav
– файл сохранения, который нужно поместить в SRAM память;
gba
– файл игры, который помещает файл сохранения в SRAM память.
То есть, после того как вы перепрошили Super Pass 2, вам еще нужно вставить в SRAM память флеш-картриджа конкретный код. Для этого и предназначена gba программа.
Вы скачиваете на флеш-картридж нужный вам .gba и .sav файл (в моем случае AF6P-0.gba и AF6P-0.sav). Дальше нужно включить флеш-картридж в режиме GBA и запустить игру «AF6P-0.gba» она запишет файл AF6P-0.sav в SRAM память. Теперь можно выключить консоль и вставить Super Pass 2 (а в него вставить ваш картридж с игрой) и всё будет работать.
Эпилог
У Nintendo не получилось победить сообщество homebrew разработчиков. Не прошло и трех месяцев с момента появления Nintendo DS с новой прошивкой как появились PassMe 2. Это устройство стало еще менее удобным чем классический PassMe, но все еще выполняло свои функции.
Но нельзя сказать, что всё это было бесполезным: PassMe и PassMe2 стали важными вехами в развитии Nintendo DS флеш-картриджей. Не за горами было появление устройства NoPass о котором мы поговорим в следующей статье.