Spiiin's blog

Система паролей Goal! Two [NES]

Особенности игры:

Goal! Two приурочена к чемпионату мира по футболу 1992 года, как и Tecmo World Cup. В обеих разработчики вместо реально участвующих команд напихали тех, кого им хотелось. Вероятно, среди авторов был парень из Венесуэлы, так как в игре присутствует эта славная страна, причем даже с формой правильного цвета, хотя в реале до финальных стадий ЧМ Венесуэла вообще ни разу не доходила.

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

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

Изометрическое поле открывает широкие просторы для тактики, но целиться по воротам просто нереально неудобно.

Игра сохраняет прогресс игрока в виде пароля из 24 символов. Ага! Ее можно разобрать!

Особенности системы генерации пароля:

  • Основная рабочая функция генерации принимает 3 параметра - по какому смещению в пароле, сколько бит и какое число скопировать в пароль.

Группы логических значений записываются в соседние биты, так что понять принцип действия можно и без дизассемблирования, просто получая пароли для похожих значений. Для защиты используется контрольная сумма из 7 бит в конце пароля.

  • Функций генерации не одна, а две - первая сохраняет прогресс в групповом турнире, вторая - в плей-офф.

  • Функция проверки довольно большая (от $B77D до BA8E = 785 байт + вспомогательные процедуры).

Она помимо расшифровки проверяет содержит размазанную логику с проверкой корректности возможных значений и имеет несколько “плохих” выходов (номер команды игрока должен совпасть с номером группы, в которой играет эта команда, запихнуть ее в другую не получится).

  • Для сохранения количества забитых и пропущенных мячей игра отводит 7 бит.

Если забить больше 128 голов, пароль сгенерируется неправильно.

  • Генератор для выдачи паролей группового турнира сохраняет результаты матчей (победа, поражение, ничья) и суммарное количество забитых-пропущенных голов и очки команд раздельно.

В итоге существуют пароли, в которых команда побеждает во всех матчах, но не забивает не одного мяча.

  • Генератор плей-офф паролей сохраняет номера 16 участвующих команд и все 15 результатов матчей между ними.

Можно подобрать код, например, 'XXXXXX XXXXXX XXXXXV BBJ7LB', который выведет в 1/8 финала все 16 сборных Голландии:

А вот и виртуальный Марко Ван Бастен, уже радуется победе и представляет, что несет в руках Кубок Мира, потому как других сборных с таким паролем просто не осталось:

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

Хорошо структурированный код легче читать, это правило верно даже для машинного кода.

Генератор паролей онлайн:
http://spin-de.narod.ru/passgen/goal_two.html