REA — реверс-инжиниринг любых приложений через агента

· 2 мин чтения
mcp reverse-engineering ai-agents decompiler cli
📂 Исходный код на GitHub

CLI и MCP-сервер (npm-пакет rea-agents, TypeScript) для реверс-инжиниринга: открывает бинарники, приложения Electron, сборки .NET и веб-страницы, ищет строки и функции, строит граф вызовов и декомпилирует код. Для глубокого анализа подключает Hopper или Ghidra, всё считает локально, лицензия MIT

REA — реверс-инжиниринг любых приложений через агента

Вы нашли в чужой программе функцию, которая вам нужна в своём продукте. Открытых исходников нет, но есть бинарный файл, .app, архив .asar или сборка .NET. REA даёт AI-агенту инструменты, чтобы разобрать чужую программу и объяснить, как в ней устроена нужная функция. Агент показывает доказательства и только потом пишет свою версию.

Главное отличие от обычного дизассемблера в том, что результат возвращается не человеку в интерфейсе, а модели. Всё общение идёт через CLI или MCP, агент сам выбирает инструменты и сам строит план исследования.

Модель исследования

Разработчики REA описывают работу в три шага:

  1. Декомпиляция. Открываем приложение и достаём читаемый код, строки, имена функций и другие подсказки о том, как оно работает.
  2. Понимание. Идём по коду от одной части приложения к другой, пока агент не может уверенно объяснить, как устроена нужная функция.
  3. Воссоздание. Переносим найденное в свой проект, под свой стек и под свои требования.

Отдельно авторы подчёркивают: REA не обещает вернуть исходный код. Ни один дизассемблер этого не умеет. REA отдаёт псевдокод, ассемблерный листинг, символы, строки, метаданные и связи между ними.

Такое название проекта стоит понимать буквально. REA не взламывает приложение и не ищет в нём дыры. Он помогает понять, как реализована функция, чтобы вы написали такую же у себя.

Установка

npx rea-agents setup

Setup показывает план изменений до применения и делает резервную копию конфигурации. Он настраивает доступ к MCP, ставит агенту готовый сценарий работы и подключает Hopper или Ghidra — тот из двух, что уже стоит у вас. Если инструмента анализа нет, setup может поставить Hopper, но только после вашего согласия.

Настраиваются автоматически: Claude Code, Claude Desktop, Codex, Cursor, Gemini CLI и Windsurf. Devin setup обнаруживает, но не меняет его настройки. Любой другой агент с поддержкой локальных MCP-серверов подключается вручную:

{
  "mcpServers": {
    "rea": {
      "command": "npx",
      "args": ["-y", "rea-agents@3.2.1", "mcp"]
    }
  }
}

Для постоянной установки лучше указывать одну точную версию пакета. Команду rea можно поставить отдельно:

npm install --global rea-agents
rea setup
rea upgrade

Что нужно на компьютере

  • macOS 12 или новее, либо Ubuntu 24.04+, Fedora 41+ или 64-битный Arch Linux
  • Node.js 22.19+ или 24.11+ и npm
  • Hopper или Ghidra — только для анализа нативных бинарников

Ghidra REA не устанавливает: нужен Ghidra 12.1.4 и 64-битный JDK 21, пути задаются через GHIDRA_INSTALL_DIR и JAVA_HOME. Через Ghidra доступны 22 операции только для чтения. Hopper даёт полный набор, включая пометки в интерфейсе. Поддержка Ghidra на Windows пока объявлена экспериментальной и не работает.

Если что-то сломалось, диагностика ничего не меняет:

npx -y rea-agents@latest doctor
rea doctor --json

Один промпт — полное исследование

После настройки достаточно перезапустить агента и спросить обычным языком:

Reverse engineer the Notes app. Find how offline search works, explain it,
and build a version for my project using TypeScript and SQLite.

Дальше REA ведёт агента по шагам:

Шаг Что делает агент Инструменты REA
1 Открывает бинарник и определяет, что это open_binary, binary_overview
2 Ищет зацепки: строки и подходящие функции search_strings, search_procedures, list_names
3 Связывает зацепки с исполняемым кодом find_xrefs_to_name, xrefs, procedure_callers
4 Восстанавливает поток управления get_call_graph, procedure_callees, procedure_info
5 Декомпилирует нужные процедуры procedure_pseudo_code, procedure_assembly, batch_decompile
6 Пишет фичу в ваш проект обычные инструменты агента: файлы и тесты

Первые пять шагов делает REA. Шестой — обычная работа агента с файлами и тестами, на основе того, что он узнал о чужом приложении.

Из чего состоит каталог инструментов

Всего в MCP-сервере 122 инструмента. Они собраны в группы:

Группа Сколько Примеры задач
Анализ нативного кода 39 функции, псевдокод, ассемблер, строки, символы, вызовы, ссылки, аннотации, чтение байтов
Сценарии исследования 15 обзор приложения, подробный разбор одной функции, поиск Swift и Objective-C, пакетная декомпиляция
Утилиты macOS 7 метаданные Mach-O, подписи кода, plist, архитектуры, разбор имён Swift
Граф артефактов 5 описи директорий и пакетов, скомпилированные файлы Interface Builder, каталоги ресурсов Apple
Сборки .NET (PE/CLI) 8 метаданные, инструкции CIL, зависимости, сравнение сборок
Наблюдение за браузером 9 структура страницы, метаданные сети, скрипты, скриншоты, сценарии в браузере
Анализ Electron 5 наблюдение за рендерером, статическая карта приложения, сценарии кликов и ожиданий
Среда выполнения JavaScript 2 поиск целей Node/Electron Inspector, события контекста выполнения
Сценарии приложений 10 трассировка фичи через слои, сравнение сборок, сравнение с исходником
Рабочая среда и наблюдение 22 сессии, пакеты доказательств, сравнения, список открытых вопросов

Логика разделения простая. Публичный интерфейс описывает, что агент хочет узнать. Провайдер решает, как это выяснить. Часть macOS-утилит отвечает на типовые вопросы вообще без запуска Hopper. Hopper берёт на себя глубокий анализ нативного кода.

Что REA умеет разбирать

  • Нативные бинарники. Mach-O, ELF, PE и папки .app через Hopper или Ghidra: функции, строки, ассемблер, декомпиляция, вызовы и ссылки. Hopper дополнительно принимает базы .hop и умеет ставить аннотации.
  • Пакеты и ресурсы. Директории, ZIP, APK, IPA, ASAR, plist, скомпилированные файлы Interface Builder и каталоги ресурсов Apple. Обход DMG на macOS требует системной поддержки монтирования.
  • JavaScript и Electron. Карта модулей, импорты, source map, маршруты, каналы IPC, хранилища и нативные дополнения — без запуска приложения. Подробности в гайде по JavaScript-приложениям.
  • Веб-сайты. Наблюдение за уже открытой вкладкой Chrome через CDP на локальном порту. Инструменты не переходят по ссылкам и не выполняют JavaScript страницы. Подробности в гайде по наблюдению за браузером.
  • Сборки .NET. Метаданные и инструкции CIL, сравнение сборок, проверка объявленных нативных зависимостей — без загрузки и запуска сборки. Подробности в гайде по управляемому коду.
  • Поведение процессов. Вы описываете, что запустить и какие действия выполнить, потом сравниваете две записи поведения. Это не защищённая среда: процесс запускается с вашими правами пользователя. Подробности в описании Process Capture.

Подробное описание нативной части — в гайде по нативному анализу. Список инструментов с точными числами генерируется из исходников и лежит в product-catalog.json.

Доказательства вместо догадок

Главная мысль REA проста: рядом с выводом всегда лежат доказательства и ограничения. К каждому заключению прикладывается, что именно инструмент наблюдал и что он не смог определить.

Отсюда две особенности. Первая: анализ Ghidra работает с временной копией цели, а временный проект удаляется при закрытии сессии. Вторая: проверка воссоздания возвращает pass, fail или unknown, а не молчаливый успех. Незакрытые вопросы REA ведёт отдельным списком.

Один и тот же запрос можно сохранить в снимок и переиспользовать, не запуская анализатор заново:

rea analyze /absolute/path/to/app --snapshot /absolute/path/to/analysis/app.json

Снимок переиспользуется только если совпадают байты цели, операция, параметры, инструмент анализа и настройки. Запросы, зависящие от курсора, не кэшируются.

Работа из терминала

npx -y rea-agents@latest analyze /Applications/Notes.app
npx -y rea-agents@latest search /Applications/Notes.app "offline"
npx -y rea-agents@latest function /Applications/Notes.app 0x1000
npx -y rea-agents@latest xrefs /Applications/Notes.app 0x1000
npx -y rea-agents@latest trace /Applications/Notes.app "offline"
npx -y rea-agents@latest capabilities
npx -y rea-agents@latest providers

Команда analyze и inspect делают одно и то же. Если нужен только листинг без декомпиляции, есть rea instructions. Когда доступны Hopper и Ghidra сразу, инструмент надо выбрать явно — через --provider или provider_id в MCP. Молчаливого переключения между инструментами не происходит.

Коды возврата простые: 0 — операция выполнена, даже если в ответе остались предупреждения; 1 — выполнить не удалось; 128 + N — процесс убит сигналом N.

Границы применимости

  • Исходный код не восстанавливается. Декомпиляция даёт псевдокод.
  • Управление интерфейсом Hopper и аннотации через Ghidra недоступны.
  • Статический анализ не показывает, что выполнялось в рантайме. REA это прямо пишет в результатах.
  • Hopper разбирает по одной цели за раз. Пока он занят, вторую цель REA не откроет.
  • Данные никуда не отправляются: у REA нет размещённого сервиса анализа. Общается модель — по её правилам.
  • Удаление rea uninstall --purge-data стирает только то, что завёл REA: регистрации MCP и каталоги ~/.rea/cache и ~/.rea/state. Hopper, Node.js и чужие MCP-серверы остаются на месте.

Итог

REA не заменяет дизассемблер. Он делает дизассемблер удобным входом для агента: 122 инструмента, готовый сценарий исследования, запуск Hopper и Ghidra, проверки окружения и доказательства рядом с каждым выводом. Лицензия MIT, проект на TypeScript, требования к Node.js и Hopper описаны в гайде по установке.

Источник: https://github.com/morluto/rea