Любитель старинных видеоигр по имени Сет Блинг совершил невозможное. Он сумел внедрить в игру Super Mario World машинный код клона Flappy Bird, используя лишь геймпад, хорошее знание уязвимостей консоли и триста прыжков с переворотом.

Экзотический метод модификации Super Mario World, изобретённый энтузиастом, больше всего похож на очень длинный чит-код. Однако при ближайшем рассмотрении становится ясно, что его ближайшие родственники — это современные атаки, которые эксплуатируют переполнение буфера.

Super Mario World — это классический платформер 1990 года, разработанный для игровой приставки Super Nintendo. Главного героя игры зовут Марио. Он бегает, прыгает и топчет враждебных черепах.

tumblr_nw0m469M5T1sd3xkpo1_250

Когда Марио подбирает бонус, игра запускает подпрограмму, которая соответствует номеру бонуса. Адреса подпрограмм хранятся в специальной таблице. Поскольку бонусы бывают четырёх типов, таблица содержит четыре адреса.

Любители игры давно знают, что в ней есть ошибка, из-за которой определенные действия персонажа приводят к накрутке счетчика бонусов. Если значение счетчика превысит количество разновидностей бонусов, игра станет искать адрес подпрограммы за пределами таблицы. Туда можно поместить нужный адрес, и она его вызовет.

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

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

Загрузчик хранит указатель на неиспользуемый блок системной памяти. Когда Марио совершает прыжок с переворотом, его координата Х оказывается записана по этому адресу. Затем загрузчик переводит указатель на следующий байт.

Чтобы внедрить в Super Mario World код клона игры Flappy Bird, потребовалось совершить 331 прыжок с переворотом. Последний прыжок передал управление введённой программе. Весь процесс занял около часа.

Полное описание последовательности действий, которая требуется для внедрения Flappy Bird в игру, а также код загрузчика и самого клона Flappy Bird, Сет Блинг выложил в Google Docs.



4 комментария

  1. John Cramer

    30.03.2016 at 09:00

    «родстенники» — а это, простите, кто? 🙂

  2. Int

    30.03.2016 at 13:02

    > сумел добавил

  3. Nick

    30.03.2016 at 16:23

  4. Evang

    31.03.2016 at 17:39

Оставить мнение