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

Введение в эпоху инференса масштаба 500 миллиардов токенов

Современная разработка программного обеспечения и сфера искусственного интеллекта стоят на пороге фундаментальной трансформации. Если еще пару лет назад языковые модели (LLM) воспринимались как продвинутые текстовые ассистенты или инструменты для автодополнения кода вроде Copilot (которые иногда предлагают назвать переменную fooBarBaz123 и искренне гордятся этим), то сегодня парадигма смещается в сторону автономных ИИ-агентов. Эти агенты способны решать задачи высшего порядка, требующие многоступенчатого планирования, глубокого анализа контекста, итеративного тестирования и исправления ошибок.

Одной из самых сложных и захватывающих задач для таких систем традиционно считался реверс-инжиниринг (обратная разработка) сложных бинарных файлов. А что может быть сложнее и комплекснее с точки зрения архитектуры, чем коммерческий шутер от первого лица (FPS)? Такой софт сочетает в себе критичные к производительности алгоритмы рендеринга графики, сложную физику реального времени, сетевой стек для мультиплеера с низкими задержками и оптимизированное управление памятью на низком уровне.

В этом материале мы подробно разберем эксперимент по скармливанию ИИ-агентам объема данных, превышающего отметку в 500 миллиардов токенов (с учетом претрейна, контекста и итеративных прогонов), с целью декомпиляции и анализа бинарного кода классического шутера (включая наработки энтузиастов по разбору бинарников вроде MW2). Мы посмотрим на то, как машинный разум справляется с ассемблером, почему традиционные инструменты анализа уступают агентному подходу и какие выводы из этого могут сделать практикующие разработчики и инженеры по безопасности.

Но как именно сырые машинные инструкции превращаются в понятную объектно-ориентированную логику? Давайте заглянем под капот этой титанической работы.

Анатомия задачи: почему реверс-инжиниринг FPS — это ультимативный тест для ИИ

Декомпиляция коммерческого шутера от первого лица — это не просто перевод машинного кода в псевдокод на Си. Это процесс восстановления утраченной семантики, архитектурных паттернов и структур данных. Когда компилятор (например, MSVC или GCC) собирает исходный код C++ в оптимизированный бинарник под x86-64, происходит колоссальная потеря информации:

  • Исчезают осмысленные имена переменных и функций (символы отладки удаляются при релизной сборке).
  • Высокоуровневые объектно-ориентированные концепции (наследование, виртуальные таблицы, полиморфизм) превращаются в ручные манипуляции с указателями и смещениями в памяти.
  • Оптимизаторы компилятора (O2, O3) разворачивают циклы, инлайнят функции и переупорядочивают инструкции так, что исходная логика становится неочевидной даже для опытного человека-реверсера (тут-то фраза «работает на моей машине» приобретает совсем мрачный киберпанк-оттенок).

Именно поэтому стандартные инструменты статического анализа, такие как IDA Pro или Ghidra, предоставляют лишь сырой фундамент. Они могут построить граф потока управления (CFG) и показать декомпилированный псевдокод, но понять, что конкретно этот массив байтов отвечает за интерполяцию позиции игрока в мультиплеере, а вон тот фрагмент — за расчет траектории полета пули с учетом баллистики, должен человек. Или теперь — специализированный ИИ-агент.

Понимание этой боли компиляторов подводит нас к самому интересному: как заставить языковую модель не просто смотреть на граф, а методично пересобирать проект? Переходим к архитектуре эксперимента.

Архитектура эксперимента: 3 месяца, модели Claude/Codex и GitHub Issues

Чтобы заставить ИИ не просто сгенерировать десяток строк кода, а пересобрать рабочий, чит