![Хакеры узнали, как перепрограммировать NES Tetris прямо из игры](https://cdn.arstechnica.net/wp-content/uploads/2024/05/tetris-crash-reprogram.jpg)
Earlier this year, we shared the story of how a classic NES Tetris player hit the game’s «kill screen» for the first time, activating a crash after an incredible 40-minute, 1,511-line performance. Now, some players are using that kill screen—and some complicated memory manipulation it enables—to code new behaviors into versions of Tetris running on unmodified hardware and cartridges.
We’ve covered similar «arbitrary code execution» glitches in games like Super Mario World, Paper Mario, and The Legend of Zelda: Ocarina of Time in the past. And the basic method for introducing outside code into NES Tetris has been publicly theorized since at least 2021 when players were investigating the game’s decompiled code (HydrantDude, who has gone deep on Tetris crashes in the past, also says the community has long had a privately known method for how to take full control of Tetris‘ RAM).
Как технический энтузиаст, который годами следил за миром видеоигр, глюков и эксплойтов, я нахожу недавние разработки в NES Tetris абсолютно захватывающими. Возможность манипулировать последовательностью сбоев игры для введения собственного кода — впечатляющий подвиг, который расширяет границы того, что мы считали возможным в ретро-играх.
Как аналитик, я наткнулся на увлекательное видео от Displaced Gamers, где они демонстрируют уникальный хак для доступа к таблицам рекордов NES Tetris с использованием инструкций машинного кода вместо обычного метода постоянной памяти. Этот инновационный подход переносит теорию из частной сферы в практическое применение. Проще говоря, они показывают нам, как манипулировать кодом игры на низком уровне для достижения такого результата.
Развлечение с портами контроллера
Проще говоря, при игре в NES Tetris после 155-го уровня в игре может возникнуть сбой из-за задержки подсчета очков ее обработчиком. Эта задержка нарушает работу управляющего кода, заставляя его вместо этого искать инструкции в случайных областях памяти игры.
Как аналитик кода, я столкнулся с необычным сценарием, когда неожиданное прерывание заставляет программу перейти к началу оперативной памяти (ОЗУ), что приводит к чтению мусорных данных как кода и в конечном итоге приводит к сбою в Тетрисе. Однако в японской версии консоли Famicom существует своеобразная особенность. При обработке потенциальных входных данных Тетрис демонстрирует такое поведение, позволяя игрокам манипулировать прыжком и потенциально использовать его в своих интересах.
Как аналитик, я бы сказал так: японская консоль Famicom имела два встроенных контроллера, в отличие от американской Nintendo Entertainment System. Желающие использовать контроллеры сторонних производителей могут подключить их через порт расширения на передней панели системы. Примечательно, что код игры «Тетрис», в который мы играли на этой консоли, считывает входные данные с этого дополнительного порта контроллера. Это означает, что два дополнительных стандартных контроллера NES можно было подключить через адаптер, хотя на Famicom была отдельная версия тетриса от Bullet-Proof Software.
Оказывается, часть оперативной памяти (ОЗУ), используемая Тетрисом для обработки дополнительных входных данных контроллера, по совпадению служит адресом памяти для процедуры перехода, о которой мы говорили ранее. Следовательно, когда эта процедура перехода сталкивается с сбоем и прерывается, в ОЗУ сохраняются данные, обозначающие кнопки, нажатые на контроллерах в этот момент. Это дает игрокам интригующую возможность влиять на ход выполнения игрового кода после сбоя.
Кодирование в таблице рекордов
Чтобы выполнить технику прыжка в Displaced Gamers с использованием альтернативной настройки контроллера, игрокам необходимо нажать кнопки «вверх» на третьем контроллере одновременно с кнопками «вправо», «влево» и «вниз» на четвертом контроллере. Обратите внимание, что последняя комбинация может потребовать некоторой ловкости, поскольку требует одновременного ввода данных в противоположных направлениях. Это действие направляет команду прыжка в назначенную область оперативной памяти, которая отвечает за хранение имен и очков лучших бомбардиров в игре. Таким образом, этот метод предоставляет игрокам расширенный контроль над более обширной частью памяти, позволяя им напрямую манипулировать ею.
Как технический энтузиаст, я бы описал это так: вставляя «(G)» в определенный раздел таблицы рекордов B-типа, мы манипулируем поведением игры, перепрыгивая на альтернативную часть. На этой новой территории игра обрабатывает имена и баллы элементарным образом, подобно программированию «на голом железе» для процессора NES. Буквы и цифры служат кодами операций, напрямую инструктируя процессор.
Как технический энтузиаст, я бы сказал это так: я был разочарован, обнаружив, что в области ввода имени NES можно использовать только 43 различных символа и 10 цифр для получения высоких результатов. Это существенно ограничивает возможные комбинации, затрудняя представление большого количества доступных инструкций кода операции в таблице рекордов с использованием ограниченной поверхности атаки.
Несмотря на ограничения, Displaced Gamers успешно создала краткую демонстрацию кода, который преобразуется в информацию таблицы рекордов с такими метками, как «(Имя «_)-P)»
» и вторым местом. счет 8575 в игре A-Type. Эта несложная функция добавляет нули в начало счета игры, значительно сокращая время обработки и предотвращая потенциальный сбой (хотя в конечном итоге счет может достичь критического уровня для сбоя, когда начнется новый игровой процесс).
Другими словами, без системы сохранения в оригинальной версии тетриса для NES хакерам приходится вручную набирать очки и вводить замысловатые имена каждый раз, когда они играют. Ограниченная таблица рекордов ограничивает обширное кодирование базового кода Тетриса. Тем не менее, есть обходные пути; HydrantDude обсуждает особую последовательность входных данных с высокими оценками, которая запускает процесс самозагрузки, в конечном итоге предоставляя полный контроль над оперативной памятью NES.
Высококвалифицированный игрок, получивший полный контроль, потенциально мог бы переписать код NES Tetris, чтобы полностью исключить сбои. Это будет полезно для игроков, которым трудно пройти уровень 255, поскольку затем игра возвращается к началу (уровень 0). В качестве альтернативного подхода можно рассмотреть возможность подражания опыту спидраннеров Super Mario World, превратив тетрис в игру, более похожую на Flappy Bird.
Смотрите также
- Есть ли в Google Pixel 8a разъем для наушников?
- Android 15 получает «Частное пространство», обнаружение кражи и поддержку AV1
- Клоун Арт создает кровавых ангелов в тизере «Ужасающего 3», а также на новом ужасном постере
- 7 тревожных тайских фильмов ужасов, которые поразят вас
- Лучшие ремешки Samsung Galaxy Watch Ultra в 2024 году
- Mini Settlers — это градостроительный симулятор, которым можно как наслаждаться, так и просто подавлять его.
- Королева крика Кейт Сигел сыграет главную роль в новой мрачной комедии «Будь проклят, если сделаешь»
- Lenovo Yoga Slim 7i Aura Edition
- Intel наконец-то обнаружила проблему, приводящую к сбою процессоров 13-го и 14-го поколения.
- Дилан О’Брайен и Элиза Сканлен исследуют затопленный кипарисовый лес в загадочном тизере озера Каддо
2024-05-07 02:25