500 милиарда токена по-късно: Декомпилиране на първоличен шутър в чист C++ чрез автономни AI агенти

Архитектура на мащабната агентна декомпилация на първоличен шутър. Снимка: Maurice Heumann Blog
В софтуерната индустрия възстановяването на оригинален сорс код от компилиран машинен файл без налични дебъг символи се смята за едно от най-изтощителните интелектуални предизвикателства. В детайлно техническо есе, публикувано в неговия блог, софтуерният инженер Морис Хойман демонстрира исторически прецедент: цялостно декомпилиране на популярен комерсиален 3D шутър обратно в чист, четим и компилируем C++ код с помощта на 500 милиарда токена и оркестрация от автономни агенти [1].
Проектът, отнел три месеца непрекъснати изчисления, бележи революция в сферата на обратното инженерство и показва как мащабните изчислителни ресурси могат да заменят десетилетия специализиран човешки труд [1].
От асемблерен хаос към елегантни C++ класове
Традиционните инструменти за декомпилация като Ghidra и IDA Pro се справят с базовото преобразуване на машинните инструкции в псевдокод, но резултатът е кошмар за четене: хиляди анонимни променливи (като v14, sub_401A20), разбити виртуални таблици (vtables) и загубени типове данни [1]. За да разбере логиката на цяла игра, човек трябва ръчно да проследява всеки указател и да отгатва предназначението на десетки хиляди функции.
Хойман изгражда разпределен пайплайн от специализирани агенти. Първият слой агенти анализира графа на контролния поток чрез бинарен анализ и идентифицира границите на функциите [1]. Вторият слой използва големи езикови модели с дълбок прозорец за разсъждения, за да възстанови семантичния смисъл: моделът разпознава математиката за изчисляване на траекторията на куршум, преименува променливите с ясни английски имена и конструира чисти обектно-ориентирани класове.
Автоматизиран цикъл на компилация и самокорекция
Ключът към успеха на проекта е пълното отсъствие на ръчна намеса при поправяне на грешки [1]. Хойман свързва агентите директно с компилатора Clang в затворен контур за обратна връзка. Когато агентът генерира C++ функция, тя се компилира мигновено. Ако компилаторът върне синтактична грешка, липсващ хедър или несъответствие на типовете, съобщението за грешка се връща обратно към агента, който коригира кода си и опитва отново.
За по-сложните модули са използвани фазинг тестове и побитово сравнение на паметта, за да се гарантира, че декомпилираната C++ функция произвежда идентични странични ефекти като оригиналния бинарен код [1]. След изразходването на половин трилион токена Хойман успява да компилира работеща игра, която се изпълнява без грешки на съвременни операционни системи.
Краят на „сигурността чрез неизвестност“
Резултатите от този експеримент имат сеизмични последици за киберсигурността и защитата на интелектуалната собственост. Досега разработчиците на игри, банки и корпорации разчитаха на обфускация и затворен код, за да пазят патенти, криптографски ключове и античийт механизми от любопитни очи.
Когато всеки изследовател с бюджет от няколко хиляди долара за API кредити може да разглоби сложен бинарен файл до чист сорс код за броени седмици, концепцията за защита чрез неяснота умира окончателно. Индустрията трябва да приеме, че всеки компилиран файл е прозрачен за изкуствения интелект, и да пренесе сигурността си изцяло върху криптографски протоколи и верифицируеми доказателства с нулево знание.

Инфографика: Светни.ме
Източници
[1]: 500B Tokens Later: Letting AI Agents Decompile a First-Person Shooter - Maurice Heumann Blog