
Мы смотрели на папку с 24 файлами. У них были такие названия, как a78-09.12, a78-05-1.52 и 68705.bin. Самая большая — 64 килобайта. Самый маленький — 115 байт. Нет заголовков, нет метаданных, нет README. Просто необработанный бинарный файл, скопированный с печатной платы игрового автомата Taito 1986 года выпуска.
Это были ROM-файлы игры Bubble Bobble — одной из самых любимых аркадных игр всех времён. В частности, это был вариант bub68705 — набор со своей увлекательной историей. И мы попросили Клода, искусственного интеллекта Anthropic, рассказать всё, что содержатся в этих байтах.
То, что пришло в ответ, было не кратким описанием. Это была полная реверс-инжиниринг каждой системы, каждого спрайта, каждого уровня, каждого секрета, скрытого в игре. Такой анализ, который раньше требовал специализированных инструментов, глубоких знаний и месяцев кропотливой работы.
Это заняло целый день.

Аппаратное обеспечение Bubble Bobble оказалось удивительно сложным для аркадной игры 80-х. Набор ROM bub68705 демонстрирует многопроцессорную архитектуру: четыре процессора Z80, отвечающих за игровую логику, подчиненные процессы, управление звуком и дополнительный звук, а также MC68705P5 микроконтроллер, полностью предназначенный для защиты от копирования.
Этот микроконтроллер — самая интересная часть с исторической точки зрения. Первоначальная схема защиты Taito считалась невзламываемой. В MCU использовалось криптографическое рукопожатие при загрузке, и без правильной последовательности ответа игра отказалась запускаться. Вариант bub68705 существует потому, что кто-то десятилетия назад успешно обратно разработал это рукопожатие. Для этого потребовалось физически снять конденсаторы с чипа, проследить его внутреннюю логику и повторно реализовать процедуру защиты на другом микроконтроллере. Это стало знаковым достижением в сообществе любителей сохранения аркадных автоматов.
Мы отправили все 24 бинарных файла Клоду. Никаких специальных инструментов, никаких плагинов, никакой интеграции с декомпилятором. Только необработанные байты и просьба: проанализировать всё.
Анализ проводился поэтапно, каждый последующий слой был глубже предыдущего.
Архитектура системы. Клод составил полную схему расположения памяти всех четырех процессоров Z80, определив общие области ОЗУ, порты ввода-вывода, механизмы переключения банков памяти и протоколы межпроцессорной связи. Он также определил векторы сброса, обработчики прерываний и точки входа в основной цикл для каждого ЦП.
Система защиты. Последовательность загрузки микроконтроллера MC68705, назначение портов и протокол подтверждения связи были полностью задокументированы. Клод проследил точный обмен данными на уровне байтов между основным процессором и микроконтроллером защиты, объяснив, как игра проверяет подлинность при запуске.
Каждый спрайт в игре. Этот нас просто поразил. Графические данные были закодированы в плоском 4-битном формате на пиксель с одной особенностью: каждый байт подвергался операции XOR с 0xFF (конвенция Taito, называемая ROMREGION_INVERT). Клод определил кодировку, выполнил инверсию, декодировал плоский формат и извлек 12 288 тайлов. Из этих тайлов он собрал 2701 отдельный спрайт размером 16x16: Баб и Боб в каждом кадре анимации, все типы врагов, все предметы и бонусы, полный набор шрифтов, элементы фона, компоненты пользовательского интерфейса. Всё.
Аудиосистема. Два чипа FM-синтезатора, Yamaha YM2203 и YM3526, управляемые выделенным звуковым процессором. Клод разработал интерфейс управления звуком, определив, как основная игра запускает музыку и эффекты через общую область памяти.
Полностью проработана игровая механика. Физика пузырьков, модели поведения врагов, условия появления предметов, правила подсчёта очков, условия для двух разных концовок игры. Всё это извлечено из бинарной логики.
Пасхальные яйца и секреты. Скрытые коды усилений. Сообщения разработчиков, встроенные в ПЗУ. Условия для достижения истинной концовки (оба игрока должны присутствовать). Секретные предметы, которые появляются только при неочевидных обстоятельствах.
Но самым впечатляющим достижением стало то, что произошло дальше.

В игре Bubble Bobble 100 уникальных уровней, каждый из которых представляет собой игровое поле на одном экране, состоящее из платформ, стен и открытого пространства, где пузырьки дрейфуют под действием невидимых воздушных потоков. Эти уровни — душа игры, созданные вручную головоломки, сложность и креативность которых возрастают. Извлечение их из двоичного кода оказалось самой сложной задачей за весь анализ.
Первые попытки пошли совершенно не по тому пути. Клод сначала искал данные об уровнях в основной ПЗУ ЦП, пытаясь интерпретировать машинный код Z80 как карты тайлов. Шаблоны не совпадали. Данных там не было.
Затем произошел прорыв: данные об уровнях были разделены на две разные ПЗУ.
Сетка платформы размером 32x24 для каждого уровня была упакована в ПЗУ подчиненного процессора (4.bin), начиная со смещения 0x0CFC, и закодирована всего в 3 бита на ячейку. Каждая ячейка могла принимать одно из пяти значений: 0 для твердого блока, 1 для восходящего потока (где поднимаются пузырьки), 2 для ветра вправо, 3 для ветра влево и 4 для нисходящего потока. Геометрия всего уровня сжималась примерно до 100 байт.
Метаданные уровней, расположение монстров, выбор цветовой палитры, скорость прокрутки, таймеры и параметры сложности находились в совершенно другом ПЗУ (a78-05-1.52) по смещению 0x673A и были упакованы в 43-байтовые побитовые структуры. Каждая структура определяла не только внешний вид уровня, но и его поведение: где появлялись враги, с какой скоростью они двигались, какую цветовую схему использовать.
Клод нашел обе половины, выяснил, как они соединены между собой, расшифровал схемы упаковки битов и отрендерил все 100 уровней в виде изображений с правильными цветами палитры и расположением монстров.

Результаты потрясающие. Классическая трехплатформенная компоновка первого раунда, дизайн, который познакомил миллионы игроков с игрой, мгновенно узнаваема.

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

И вот тут начинается самое интересное. Дизайнеры уровней из Taito использовали свои сетки 32x24 в качестве холста. Многие уровни образуют слова: "BUBBLE", "POPCORN", "JUMP!", "SOS!!", "BONUS", "OUCH!!", "HI-TECH!", "DRUNK!!", "RUN AWAY!!", "SUPER GAMER!!". Другие образуют картинки: сердца, черепа, призраки Pac-Man, инопланетяне Space Invaders, бабочки, снежинки. Каждый из них — крошечный кусочек пиксельной графики, спрятанный внутри головоломки, невидимый для тех, кто только играл и никогда не смотрел на исходные данные.
Сорок лет секретов, закодированных в 3 битах на ячейку, ожидая, когда кто-то или что-то их прочитает.
Давайте отступим назад и рассмотрим, что же на самом деле здесь произошло.
Разговорному ИИ были предоставлены необработанные бинарные файлы без какого-либо контекста, кроме их имен. Путем итеративного анализа и рассуждений он создал полную обратную разработку коммерческого программного продукта: архитектурную документацию, полную дизассемблированную версию, декодированную графику, извлеченные данные об уровнях, игровую механику, сопоставление аудиосистемы и обнаружение скрытого контента.
Никакой IDA Pro. Никакой Ghidra. Никаких специализированных инструментов для обратного проектирования. Даже шестнадцатеричного редактора нет. Просто ИИ, считывающий байты и размышляющий над их смыслом.
Процесс, на который у создателей оригинальной бутлег-системы bub68705 ушли месяцы или даже годы работы, включавшие в себя аппаратное тестирование, анализ логических параметров, показания осциллографа и физическое извлечение конденсаторов из микросхемы, был воспроизведен за один день. Не идеально. Не идентично. Но конечный результат, полностью понятая и задокументированная система, был тем же.
И вот тут каждый специалист по программному обеспечению должен задуматься: это касается не только ретро-аркадных игр.
Каждый скомпилированный бинарный файл. Каждый файл прошивки. Каждый проприетарный протокол. Каждая встроенная система. Все они состоят из одного и того же: байтов, кодирующих логику и данные в соответствии с известными соглашениями. Если ИИ может расшифровать 40-летнюю аркадную игру из необработанных дампов ПЗУ, он с такой же легкостью сможет прочитать и ваше программное обеспечение, поставляемое в продажу. Вероятно, даже легче, поскольку современные бинарные файлы содержат гораздо больше структурных подсказок, чем простое ПЗУ Z80.
Технологии сохранения данных получили масштабное обновление. Тысячи игр, приложений и целых операционных систем существуют только в виде скомпилированных бинарных файлов. Их исходный код утерян, разработчики недоступны, документация отсутствует. Теперь ИИ может расшифровывать эти артефакты, документировать их поведение, извлекать их ресурсы и снова делать их понятными. Цифровая история стала восстанавливаемой в больших масштабах.
Безопасность за счет сокрытия информации официально мертва. Это всегда была плохая идея. Теперь это даже не жизнеспособная плохая идея. Каждый бинарный файл поставляется с секретами, видимыми для ИИ, который может читать машинный код так же, как вы читаете английский. Жестко закодированные ключи шифрования, проприетарные алгоритмы, недокументированные бэкдоры, скрытые обходы аутентификации: ничто из этого не выдерживает контакта с ИИ, способным рассуждать о структуре бинарного файла. Если ваша модель безопасности зависит от того, что никто не понимает ваш скомпилированный код, ваша модель безопасности уже не работает.
Миграция на устаревшие системы становится осуществимой. Существуют банковские мэйнфреймы, работающие на COBOL-бинарных файлах, которые никто из ныне живущих до конца не понимает. Промышленные контроллеры, выполняющие прошивку, написанную инженерами, вышедшими на пенсию десятилетия назад. Медицинские устройства, работающие с кодом, который никогда не был задокументирован. Эти системы — «черные ящики», к которым организации боятся прикасаться. Анализ бинарных файлов с помощью ИИ предлагает путь к их пониманию, документированию и, в конечном итоге, миграции на современные платформы. Проблемы, которые казались неразрешимыми навсегда, теперь просто сложны.
Вопросы интеллектуальной собственности сопряжены со сложными проблемами. Если любой скомпилированный бинарный файл может быть полностью понят и задокументирован ИИ за один день, что тогда означает «коммерческая тайна» для программного обеспечения? Правовая база в отношении интеллектуальной собственности на программное обеспечение была построена на предположении, что компиляция создает существенный барьер для понимания. Это предположение нуждается в пересмотре. Последствия для бизнеса — для лицензирования, для конкурентной разведки, для защиты патентов — значительны и в значительной степени не изучены.
Эпоха бинарной непрозрачности закончилась. Десятилетиями мы рассматривали скомпилированное программное обеспечение как черный ящик. Вы загружаете исходный код, получаете исполняемый файл, и этот исполняемый файл функционально непрозрачен для любого, кто не обладает исключительными навыками и инструментами. Теперь это предположение неверно. Каждый скомпилированный бинарный файл, по сути, читаем. Не в юридическом смысле это открытый исходный код, но в практическом смысле он открыт для понимания. Различие между «доступным исходным кодом» и «только бинарным файлом» становится скорее юридическим, чем техническим.
Например, вы когда-нибудь задумывались, какая логика лежит в основе различных видов кулинарных наград? Вот ответ:

Двадцать четыре файла в папке. Загадочные названия. Никакой документации. Просто необработанные байты, полученные с печатной платы, изготовленной ещё тогда, когда новости о чернобыльской катастрофе были свежими.
В этих байтах хранился целый мир. Сотня уровней, созданных вручную, каждый из которых — маленькое произведение искусства. Множество персонажей, от героических драконов Баба и Боба до злодея Суперпьяницы. Кооперативная история для двух игроков о дружбе, упорстве и снятии проклятий. Пасхальные яйца, спрятанные разработчиками, которые полагали, что никто их никогда не найдет. Сложная система защиты от копирования, которая представляла собой результат многолетней работы: одна сторона — разработка, другая — борьба с ней.
Всё это хранилось там, в двоичном коде. Терпеливо. Завершено. Ждало прочтения.
Теперь у нас есть устройство, способное это прочитать.
Вопрос не в том, изменит ли ИИ наше представление о скомпилированном программном обеспечении. Он уже изменил его. Вопрос в том, что мы будем делать с миром, где ни один бинарный файл больше не является «чёрным ящиком», где каждый фрагмент скомпилированного кода — это диалог, готовый к диалогу.
Эти 24 файла 1986 года были лишь началом.
Источник: https://kotrotsos.medium.com/we-pointed-an-ai-at-raw-binary-files-from-1986-662ba30120f3