Любитель старинных видеоигр по имени Сет Блинг совершил невозможное. Он сумел внедрить в игру 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.

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    4 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии