REA (Reverse Engineer Anything) — это MCP-сервер, который позволяет проводить реверс-инжиниринг программных приложений, бинарных файлов и поведения в режиме реального времени. Инструмент покрывает путь от поведения приложения до машинного кода, а в роли агента, который им управляет, удобно использовать OpenCode.
OpenCode — открытый агент для программирования, который живёт в терминале. Он читает файлы проекта, правит код, запускает команды и тесты, а главное — поддерживает MCP из коробки, поэтому REA подключается к нему напрямую.
Что делает REA уникальным
REA выделяется в области реверс-инжиниринга комплексной поддержкой нескольких платформ и типов анализа:
- Нативные бинарные файлы: Hopper, Ghidra, IDA или Kuna для дизассемблирования и декомпиляции
- JavaScript-приложения и Electron: статический анализ модулей, импортов и границ Electron
- Управляемый код: анализ .NET-сборок
- Анализ в режиме реального времени: мониторинг поведения процессов
- Сетевой трафик: захват и анализ HTTP/S-запросов и ответов
- Мобильные приложения: анализ APK и IPA файлов Android и iOS
- Встроенное программное обеспечение: анализ embedded-систем и IoT-устройств
- Файлы моделей: извлечение метаданных GGUF и safetensors
- Объекты GPU-кода: анализ ядер CUDA и HIP
- Сохранение игр: восстановление игровой логики и исполняемых файлов
Основная архитектура и философия
REA следует трёхэтапному процессу исследования, который делает реверс-инжиниринг доступным для разработчиков:
- Инспекция: REA подключается к анализирующим инструментам и изучает цели (бинарные файлы, приложения, веб-сайты)
- Анализ: прослеживает по коду, определяя правила и поведение
- Восстановление: агент использует результаты, чтобы объяснить поведение, построить или протестировать реализацию
Этот процесс позволяет AI-агенту отвечать на сложные вопросы, например: «Пойми, как работает поиск в приложении Notes, покажи мне доказательства и создай аналогичную функцию для моего проекта».
Практические примеры использования
1. Анализ мобильных приложений
REA может анализировать APK-файлы Android для восстановления:
- объявлений и разрешений в манифесте;
- методов и зависимостей классов;
- связей с нативными библиотеками;
- сетевых конечных точек и потоков данных.
Например, анализ Aegis Authenticator показал, как шестизначные коды авторизации меняются каждые 30 секунд: было изучено, как работает генерация кодов по времени (TOTP).
2. Извлечение функций desktop-приложений
Анализ кнопки % в Windows Calculator демонстрирует возможности REA:
- определение разного поведения в зависимости от контекста (после + или ×);
- разбор ассемблерных инструкций, чтобы понять логику;
- извлечение и объяснение математических операций;
- восстановление правил: «После +: 10% от первого числа» и «После ×: преобразовать 10% в 0,1».
3. Восстановление API веб-приложений
REA может записать сеанс браузера и восстановить его в виде RL-среды, где AI-агент отрабатывает задачи вроде работы с папками без запуска исходного приложения.
4. Восстановление игровой логики
Кейс с DX-Ball показал, как REA восстановил расчёт звуковой панорамы из игры 1996 года для Windows, реконструировав C-код, который проходит 3205 тестовых случаев и соответствует исходному скомпилированному коду.
Технические возможности
Нативный анализ
- Работает с Hopper, Ghidra, IDA или Kuna для глубокого анализа бинарных файлов
- Поддерживает ELF, PE, Mach-O и другие форматы исполняемых файлов
- Извлекает псевдокод, ассемблер, символы и вызовы
- Выполняет офлайн-анализ без необходимости запускать исходные инструменты
Анализ JavaScript
- Анализирует приложения Node.js и Electron
- Прослеживает импорты модулей и зависимости
- Захватывает поведение в режиме реального времени через подключение к браузеру
- Извлекает source maps и минифицированный код
Безопасность
- Статический анализ PE-сертификатов (Authenticode)
- Анализ защитных механизмов (PIE, NX, RELRO, CFG)
- Картирование импортов и DLL
- Анализ отчётов о сбоях (Apple IPS)
Что возвращает REA
REA не даёт агенту готовых выводов без основания. Результат каждого запроса — это находки вместе с доказательствами, на которых они построены. В зависимости от цели в ответ попадают:
- Ссылки на код — конкретные файлы и строки, где реализована исследуемая функция.
- Псевдокод и ассемблер — для нативных бинарных файлов: декомпилированные функции, инструкции и связи между вызовами.
- Структура приложения — для JavaScript и Electron: модули, импорты, маршруты, IPC и связи с нативными дополнениями.
- Метаданные и факты — манифесты, сертификаты, сигнатуры, заголовки форматов и прочие статические данные.
- Ограничения — места, которые разобрать не удалось, с пометкой, что именно осталось неизвестным.
Агент использует эти данные, чтобы объяснить поведение, ответить на уточняющие вопросы или собрать и протестировать свою реализацию. Именно наличие доказательств и явных ограничений отличает результат REA от простой догадки модели.
Перед началом
Предполагается, что OpenCode уже установлен и в нём подключена модель. Node.js 22.23.4+, 24.22.1+ или 26.12.1+ нужен самому REA, поэтому проверьте версию:
node -v
Шаг 1: Подключение REA к OpenCode
REA регистрируется в OpenCode как MCP-сервер. Выполните в терминале:
npx rea-agents@latest setup
Чтобы сразу указать OpenCode, используйте его идентификатор opencode:
npx rea-agents@latest setup --client opencode
Что делает setup:
- регистрирует REA как MCP-сервер;
- добавляет инструкции workflow;
- делает резервную копию существующей конфигурации;
- спрашивает подтверждение перед применением изменений.
Важный момент:
Для первого эксперимента можно пропустить опциональную установку Hopper. После завершения setup перезапустите OpenCode: выйдите из сессии и запустите opencode снова.
Проверьте подключение:
npx -y rea-agents@latest doctor --client opencode --json
Успешный результат: "healthy": true.
Затем спросите у агента:
«Check that REA is connected and show me which REA tools you can use.»
Шаг 2: Первое расследование
REA может анализировать приложения без их запуска.
- Скачайте пример:
Download https://rea.tools/examples/notes-example.zipРаспакуйте архив в папку
notes-example. - Дайте агенту задачу:
«Use REA to inspect the app at
/absolute/path/to/notes-example. Find what happens when I click Export notes. Show where notes.csv is written, which fields it contains, and the relevant files and lines.»
Ожидаемый ответ:
«The button sends a
notes:exportmessage. The main process formats the notes as CSV and writesnotes.csvin the user’s Downloads folder. The columns areidandtitle.»
Шаг 3: Установка Ghidra и нативный анализ
Для анализа нативных бинарных файлов (исполняемых файлов и библиотек) REA использует провайдер анализа. Самый доступный бесплатный вариант — Ghidra от NSA. Инструмент ставится один раз на компьютер, где работает REA.
Что понадобится
- 64-битный JDK 21 или новее, включая компилятор Java (
javac). - Архив Ghidra со страницы релизов.
Установка
- Установите 64-битный JDK 21 или новее. Выберите пакет под архитектуру компьютера.
- Скачайте Ghidra из списка Assets на странице релизов и распакуйте архив
ghidra_…_PUBLIC_….zip. Берите архив релиза, а не «Source code». - Найдите распакованную папку, в которой лежит
ghidraRunилиghidraRun.bat. Этот путь понадобится для переменнойGHIDRA_INSTALL_DIR.
Проверьте Java. Первая команда печатает java.home — этот путь нужен для JAVA_HOME. Вторая подтверждает, что компилятор установлен:
java -XshowSettings:properties -version
javac -version
Подключение Ghidra
Windows (PowerShell):
$env:GHIDRA_INSTALL_DIR = "C:/tools/ghidra_12.1.4_PUBLIC"
$env:JAVA_HOME = "C:/tools/jdk-21"
npx -y rea-agents@latest doctor --provider ghidra --json
npx -y rea-agents@latest setup
macOS / Linux:
export GHIDRA_INSTALL_DIR="/absolute/path/to/ghidra_12.1.4_PUBLIC"
export JAVA_HOME="/absolute/path/to/jdk-21"
npx -y rea-agents@latest doctor --provider ghidra --json
npx -y rea-agents@latest setup
Замените пути на свои. Держите команды в одном сеансе терминала: после установки переменных окружения заново запустите setup, подтвердите обновление конфигурации и перезапустите OpenCode.
Проверка провайдера должна вернуть успешный отчёт:
npx -y rea-agents@latest doctor --provider ghidra --json
Пример нативного анализа
Дайте агенту полный путь к исполняемому файлу и укажите провайдера:
«Используй REA с настроенным провайдером, чтобы изучить
/absolute/path/to/program. Перечисли функции и строки, затем объясни часть, которая обрабатывает пользовательский ввод, со ссылками на код.»
Или выполните команду напрямую из терминала:
npx -y rea-agents@latest function "/absolute/path/to/program" main --provider ghidra --json
Замените main на имя функции или адрес из списка функций целевой программы. Результат содержит псевдокод, ассемблер и ссылки между вызовами.
Анализ другого типа программного обеспечения
Выберите категорию целевого программного обеспечения:
- JavaScript / Electron — нужны Node.js и npm. Руководство.
- Веб-сайты — нужен браузер Chrome, Chromium или Edge. Руководство.
- Android APK — нужны JADX и JDK 17+. Руководство.
- Нативные исполняемые файлы — нужен Hopper, Ghidra или IDA. Руководство.
- .NET сборки — нужны Node.js и npm. Руководство.
Использование REA из терминала
Статический анализ JavaScript/Electron приложения
npx -y rea-agents@latest analyze-javascript-application "/absolute/path/to/app" --json
Замените путь на папку с приложением или файлом .asar.
Где найти .asar файл Electron-приложения:
- Windows:
C:\Users\<you>\AppData\Local\Programs\<App>\resources\app.asar - macOS:
/Applications/<App>.app/Contents/Resources/app.asar - Linux:
/opt/<App>/resources/app.asar
Глобальная установка команды rea
npm install --global rea-agents
После этого доступна команда rea --help.
Установка через curl (macOS / Linux)
curl -fsSL https://raw.githubusercontent.com/morluto/rea/main/install.sh | bash
После установки следуйте инструкциям по настройке агента. Если меню настройки не появляется, выполните rea setup.
Обновление и удаление
Обновление REA
npx rea-agents@latest setup
Для глобальной установки: rea update
Удаление REA
npx rea-agents@latest uninstall
Получение помощи
- FAQ: rea.tools/faq/ — быстрые ответы об обновлениях, агентах и анализе
- Гайды: rea.tools/guides/ — примеры для бинарного, Electron и браузерного анализа
- GitHub Issues: github.com/morluto/rea/issues — сообщите о проблеме
- Дискорд: discord.gg/GkcryMnJDM — вопросы, расследования и работа в процессе
Типичные проблемы
OpenCode не видит REA
Перезапустите OpenCode после setup. Используйте команду doctor для проверки соединения:
npx -y rea-agents@latest doctor --client opencode --json
Провайдеру требуется настройка
Для Ghidra выполните:
npx -y rea-agents@latest doctor --provider ghidra --json
Отчёт покажет неудачную проверку и предложенный следующий шаг.
Windows, WSL и пути с пробелами
- Используйте PowerShell для Windows-клиентов
- Если агент работает внутри WSL, установите Node.js и REA внутри этой Linux-системы и используйте Linux-пути
- В терминале заключайте пути с пробелами в кавычки
Настройка Hopper на macOS
Если macOS запрашивает разрешение на автоматизацию, разрешите приложение, запускающее REA, в системных настройках: Системные настройки → Конфиденциальность и безопасность → Автоматизация, затем повторите попытку.
Ссылки
https://github.com/morluto/rea
https://rea.tools/
https://rea.tools/get-started/
https://rea.tools/guides/
https://opencode.ai/
https://opencode.ai/docs/
https://opencode.ai/docs/mcp-servers/
Добавить комментарий