REA и OpenCode: установка и первое расследование

Написано

в

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 следует трёхэтапному процессу исследования, который делает реверс-инжиниринг доступным для разработчиков:

  1. Инспекция: REA подключается к анализирующим инструментам и изучает цели (бинарные файлы, приложения, веб-сайты)
  2. Анализ: прослеживает по коду, определяя правила и поведение
  3. Восстановление: агент использует результаты, чтобы объяснить поведение, построить или протестировать реализацию

Этот процесс позволяет 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 может анализировать приложения без их запуска.

  1. Скачайте пример:
    Download https://rea.tools/examples/notes-example.zip
    

    Распакуйте архив в папку notes-example.

  2. Дайте агенту задачу:

    «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:export message. The main process formats the notes as CSV and writes notes.csv in the user’s Downloads folder. The columns are id and title.»

Шаг 3: Установка Ghidra и нативный анализ

Для анализа нативных бинарных файлов (исполняемых файлов и библиотек) REA использует провайдер анализа. Самый доступный бесплатный вариант — Ghidra от NSA. Инструмент ставится один раз на компьютер, где работает REA.

Что понадобится

  • 64-битный JDK 21 или новее, включая компилятор Java (javac).
  • Архив Ghidra со страницы релизов.

Установка

  1. Установите 64-битный JDK 21 или новее. Выберите пакет под архитектуру компьютера.
  2. Скачайте Ghidra из списка Assets на странице релизов и распакуйте архив ghidra_…_PUBLIC_….zip. Берите архив релиза, а не «Source code».
  3. Найдите распакованную папку, в которой лежит 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 на имя функции или адрес из списка функций целевой программы. Результат содержит псевдокод, ассемблер и ссылки между вызовами.

Анализ другого типа программного обеспечения

Выберите категорию целевого программного обеспечения:

Использование 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/

Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

DemensDeum
Обзор конфиденциальности

На этом сайте используются файлы cookie, что позволяет нам обеспечить наилучшее качество обслуживания пользователей. Информация о файлах cookie хранится в вашем браузере и выполняет такие функции, как распознавание вас при возвращении на наш сайт и помощь нашей команде в понимании того, какие разделы сайта вы считаете наиболее интересными и полезными.