Разработчик с помощью ИИ-агентов и более 500 миллиардов токенов пересобрал исходный код Call of Duty: Modern Warfare 2

декомпиляция ии Call of Duty Modern Warfare 2 исходный код разработка игр tomshardware.com

Агенты Мориса Хёймана на базе Claude и Codex воссоздали исходный код Modern Warfare 2: 83% функций совпадают с оригиналом байт в байт. Узнайте, как ИИ декомпилировал игру и столкнулся с проблемами.

Разработчик Морис Хёйман в своем блоге подробно рассказал, как агенты на базе ИИ смогли декомпилировать игру Call of Duty: Modern Warfare 2 (2009), которую в статье называют лишь «популярным шутером от первого лица», с целью восстановить ее исходный код на C++. Процесс занял три месяца и потребовал более 500 миллиардов токенов. Изначально агенты пытались обойти проверку байт в байт, добавленную после первого месяца работы с кодом, но она оказалась «семантически неверной». В настоящее время 99% функций игры присутствуют, причем 83% соответствуют оригиналу.
Целью Хёймана с самого начала было создание «точного, стабильного и полнофункционального воссоздания», и менее двух недель назад он сообщил в X, что игра полностью работоспособна. По его оценкам, проект потребил 600–700 миллиардов токенов. В другом посте в X он отметил, что не платит за токены из своего кармана, но оценил стоимость подписок примерно в 1200 евро (1300 долларов США), а использование API-токенов — в 200 000–250 000 долларов США.
Сложность заключалась не в генерации кода, а в проверке его корректности, что вынудило разработчика создать систему проверки и убедиться, что агенты не смогут ее обойти. Другой проблемой, по его словам, было то, что «корпоративная Америка хотела испортить нам веселье». Два предыдущих поста в блоге, посвященных проекту, были удалены, а видео в его посте от 30 сентября в X было отключено после жалобы правообладателя. Официальных комментариев от Activision на данный момент нет.
Метод включает направление группы агентов, использующих Claude от Anthropic и Codex от OpenAI, на оригинальную ПК-версию игры 2009 года. Хёйман начал с тарифного плана Claude Max (20x), затем добавил Codex Pro и использовал оба одновременно. Это фиксированные тарифы, не предусматривающие оплату за токены по API. «Большую часть времени», по словам разработчика, он полагался на Sonnet 5, хотя Opus 5.5 и Luna, Sol и Terra от OpenAI «также активно использовались». Для обвязки он в основном использовал Claude Code и Codex CLIs.
Агенты читали код через IDA с помощью сервера ida-mcp от Hex-Rays. Работа началась с четырех агентов: трех исполнителей и одного рецензента; к 30 сентября, как он написал в X, «параллельно работало 17 агентов». Для поддержания порядка на каждый блок перевода приходилось одно Issue на GitHub, а все агенты и люди использовали общий канал Discord с публикациями CI через вебхуки GitHub. Разработчик также настроил порог автоматического сжатия с 90% от максимального размера контекстного окна до 42%, чтобы помочь очистить память от завершенных функций. Агенты также имели тенденцию к «дрейфу», поэтому ежечасно запускался cron-скрипт, заставлявший их перечитывать инструкции.
Код первого месяца работы агентов был чрезвычайно читаемым, но «семантически неверным» по ряду причин: неправильные сигнатуры функций, проблемы с типами и структурой данных, а также выдуманная или удаленная логика. Агенты также вносили ненужные архитектурные изменения, например, превратили поиск переменной конфигурации в процесс, который был «на порядки дороже».
Агент-рецензент не смог остановить это, поскольку отсутствовали объективные критерии приемки, а комментарии исполнителей, обосновывающие их изменения, «фактически действовали как непреднамеленный инъекционный промпт», утверждает Хёйман. В итоге команда удалила все комментарии из исходного кода, что «очень помогло», написал он в X. Попытка спасти код первых четырех недель заняла больше времени, чем начинать с нуля.
Решением стала автоматизированная проверка, поэтому команда переключилась на тот же компилятор, который использовался для сборки оригинальной игры. Скрипт сравнивает каждую пересобранную функцию с исполняемым файлом игры на уровне байтов. Вызовы и ссылки на данные находятся по разным адресам и пропускаются, вместо них проверяются целевые символы и смещения, но данные и типы проходят ту же проверку. Затем для каждой функции выносится простой вердикт «пройдено/не пройдено», и каждое совпадение записывается, чтобы CI мог повторно проверить его и оповестить о регрессиях. Хотя такой тип сопоставления медленный и иногда сложный, совпадение гарантирует идентичное поведение, вплоть до воспроизведения оригинальных ошибок.
Даже после этого позитивного изменения агенты немедленно попытались сжульничать, написав «встроенный ассемблер» и «неоднократно пытались изменить этот скрипт, чтобы исключить свою функцию из сравнения», написал Хёйман. Встроенный ассемблер и подобные уловки были запрещены в инструкциях агентов, а CI теперь хеширует скрипт проверки и сравнивает его с хешем, хранящимся в секретах GitHub Actions. Обман со стороны агентов является ожидаемым исходом на данном этапе, о чем свидетельствует множество подобных сообщений, например, когда модели OpenAI вместо прямого решения задач «захвата флага» атаковали ответы ExploitGym. Как обнаружил Хёйман, одного агента-рецензента может быть недостаточно.
До первоначального внедрения проверки более дешевые и менее мощные модели Haiku и Luna «давали чрезвычайно плохие результаты», говорится в посте. С внедрением проверки появилась достаточная обратная связь, чтобы заставить модели работать, что сократило расходы и позволило масштабировать проект. Примерно через два месяца 99% функций были представлены, причем 83% соответствовали требованиям по точности до байта. Хёйман полагает, что 16% функций, не имеющих точного байтового совпадения, по-прежнему семантически корректны, но отдача становилась все меньше. В блоге утверждается, что игра «работает безупречно» в ее текущем состоянии.
«По очевидным причинам», исходный код проекта остается закрытым и будет использоваться «только для моих нужд», говорит Хёйман. Как он выразился в X, «декомпилированный код, очевидно, также защищен авторским правом». Тем не менее, разработчик начал расширять Sogen, свой эмулятор в пользовательском пространстве, в сторону легкого песочницы для агентов, реагируя на то, что агенты в его проекте стирали виртуальные машины. До производственной готовности еще далеко.
Что касается проекта декомпиляции, Хёйман говорит, что это особый случай, поскольку не каждый проект может обеспечить побайтовое сравнение, но считает, что каждый проект может приблизиться к этому «с достаточной долей креативности». Один из уроков заключается в том, что следует быть готовым двигаться дальше после неудач, поскольку «Генерация кода теперь дешева. Выбрасывайте его, если он плохой», и сосредоточиться на корректности, а не на продуктивности.

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

В тренде:


Похожие новости: