Первый в мире агентный реверс-инженер.
Оркестрация LLM для реверс-инжиниринга бинарных файлов
Большинство задач подчиняются линейной зависимости: чем сложнее задача, тем больше времени она обычно занимает. Реверс-инжиниринг (и бинарный анализ) — это задача, в которой фактическая сложность относительно тривиальна, но время выполнения может составлять часы (и даже дни!), даже для бинарного файла с парой сотен функций.
Kong автоматизирует механический слой, используя среду реверс-инжиниринга уровня АНБ. Kong может взять полностью обфусцированный, «раздетый» бинарный файл и выполнить полный конвейер анализа: триаж функций, построение контекста графа вызовов, восстановление типов и символов через управляемую LLM декомпиляцию и запись результатов обратно в базу программ Ghidra. Результатом является бинарный файл, где некий FUN_00401a30 теперь называется parse_http_header, с восстановленными структурами, именами параметров и соглашениями о вызовах.
Почему это существует
«Раздетые» бинарные файлы теряют весь контекст, который делает код читаемым: имена функций, информацию о типах, имена переменных, макеты структур. Восстановление этого контекста составляет основную часть работы в большинстве задач реверс-инжиниринга, и это во многом сопоставление с образцом: распознавание функций стандартных библиотек, вывод типов из использования, распространение имен по графам вызовов.
LLM отлично справляются именно с таким сопоставлением с образцом. Но нацеливание LLM на сырой вывод декомпилятора с вопросом «что это делает?» даёт посредственные результаты. Модели не хватает контекста вызовов, информации о перекрёстных ссылках и общей картины структуры бинарного файла. Кроме того, большинство обфусцированных бинарных файлов применяют экстремальные методы для предотвращения реверс-инжиниринга.
Kong решает эту проблему, создавая насыщенные контекстные окна на основе программного анализа Ghidra (графы вызовов, перекрёстные ссылки, ссылки на строки, поток данных) ещё до обращения к LLM, а затем организуя анализ в порядке зависимостей, чтобы каждая функция выигрывала от того, что её вызываемые уже именованы. Кроме того, Kong представляет собственный, первый в своём роде, агентный конвейер деобфускации.
Kong работает с большинством бинарных файлов, декомпилируемых Ghidra (на данный момент, в будущем их станет больше).
| C | C++ | Go | Rust | |
|---|---|---|---|---|
| x86 | Высокая | Высокая | Средняя | Средняя |
| x86-64 | Высокая | Высокая | Средняя | Средняя |
| ARM (32-bit) | Высокая | Высокая | Средняя | Низкая |
| AArch64 | Высокая | Высокая | Средняя | Низкая |
| MIPS | Средняя | Средняя | Низкая | Низкая |
| PowerPC | Средняя | Средняя | Низкая | Низкая |
Высокая: Kong надёжно декомпилирует, деобфусцирует и восстанавливает имена, типы и структуру.
Средняя: Декомпиляция пригодна к использованию, но более зашумлена. Ожидайте частичного восстановления и более низких оценок уверенности.
Низкая: Декомпиляция имеет значительные пробелы, и результаты останутся неполными, зашумлёнными или нечитаемыми.
Примечание: Размер бинарного файла положительно коррелирует с количеством функций, затратами на LLM и временем выполнения. Однако размер бинарного файла также отрицательно коррелирует с уверенностью, поэтому учитывайте это при анализе больших бинарных файлов.
Kong использует пятифазный конвейер, координируемый супервизором, который управляет триажем, параллельным анализом и постобработкой: