
Open-source агент реверс-инжиниринга на основе ИИ, использующий Ghidra и LLM для восстановления и проверки C/C++ функций из бинарных файлов.
Автономный агент для реверс-инжиниринга — цикл реверс/проверка с учётом исходного кода, верификатор целей, механизм паритета и бэкенд на Ghidra.
Демо: YouTube
re-agent автоматизирует рабочий процесс реверс-инжиниринга, объединяя цикл реверс/проверка с декомпиляцией Ghidra через ghidra-ai-bridge. Текущий конвейер также извлекает контекст исходного кода из соседних файлов проекта во время генерации и запускает консервативный структурный верификатор перед принятием результатов проверки.
re-agent reverse --class CTrain
│
├── Config (re-agent.yaml + env + CLI)
│ └── project_profile (stub_markers, hook_patterns, source_layout)
│
├── Orchestrator (single / class runner)
│ ├── Function Picker (ranks by caller count, filters completed)
│ ├── Context Gatherer (decompile + xrefs + structs + source retrieval)
│ │
│ ├── Agent Loop (reverser → checker → fix, max N rounds)
│ │ ├── LLM Providers: Claude | OpenAI-compatible APIs | Codex CLI
│ │ └── Prompt Templates (customizable .md files)
│ │
│ ├── Objective Verifier (call-count + control-flow sanity checks)
│ │
│ ├── Parity Engine (GREEN/YELLOW/RED verification gate)
│ │ ├── Source Indexer (C++ body parser)
│ │ ├── 11 Heuristic Signals (all configurable/toggleable)
│ │ └── Semantic Rules + Manual Approvals
│ │
│ └── Session State (JSON progress file)
│
└── RE Backend: ghidra-ai-bridge
└── Capability flags → graceful degradation
re-agent reverse.ANTHROPIC_API_KEY для ClaudeOPENAI_API_KEY для API, совместимых с OpenAIcodex CLI для провайдера Codexpip install auto-re-agent
# 1. Инициализация конфигурации проекта
re-agent init
# 2. Отредактируйте re-agent.yaml в соответствии с настройками проекта
# 3. Реверсинг одной функции
re-agent reverse --address 0x6F86A0
# 4. Реверсинг всех функций класса
re-agent reverse --class CTrain --max-functions 10
# 5. Запуск проверок паритета
re-agent parity --address 0x6F86A0
# 6. Проверка прогресса
re-agent status
re-agent использует многоуровневую систему конфигурации (приоритет по убыванию): флаги CLI > переменные окружения (RE_AGENT_*) > re-agent.yaml > значения по умолчанию.
llm:
provider: claude # claude | openai | openai-compat | codex
model: claude-sonnet-4-5-20250929
# api_key: set via RE_AGENT_LLM_API_KEY env var
timeout_s: 1800
backend:
type: ghidra-bridge
cli_path: ~/ghidra-tools/ghidra
orchestrator:
max_review_rounds: 4
max_functions_per_class: 10
objective_verifier_enabled: true
project_profile:
source_root: ./source/game_sa
hook_patterns:
- 'RH_ScopedInstall\s*\(\s*(\w+)\s*,\s*(0x[0-9A-Fa-f]+)'
stub_markers: ["NOTSA_UNREACHABLE"]
stub_call_prefix: "plugin::Call"
Полный список опций см. в docs/configuration.md.
ANTHROPIC_API_KEYOPENAI_API_KEY, при необходимости укажите base_urlcodex exec с учётными данными ChatGPT; ключ API не требуетсяМеханизм паритета запускает 11 настраиваемых эвристических сигналов для проверки соответствия реверсированного кода исходному бинарнику:
Цикл реверсинга также запускает консервативный структурный верификатор после прохождения проверки LLM. Он блокирует принятие только при сильных несоответствиях, таких как:
Это намеренно более узкая проверка, чем полное доказательство эквивалентности, но она перехватывает очевидные ложные срабатывания до того, как они будут зафиксированы как успешные реверсинги.
Это важно на практике, потому что проверяющий LLM может дать ложное срабатывание на коде, который выглядит правдоподобно, но упускает реальную структуру ветвлений или вызовов из бинарника.
git clone https://github.com/dryxio/auto-re-agent.git
cd auto-re-agent
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
pytest tests/
ruff check src/
mypy src/re_agent/
MIT
| Команда | Описание |
|---|
re-agent init | Создать файл конфигурации re-agent.yaml |
re-agent reverse --address ADDR | Реверсинг одной функции |
re-agent reverse --class CLASS | Реверсинг всех функций класса |
re-agent reverse --dry-run | Показать, что будет реверсировано |
re-agent parity --address ADDR | Запуск проверок паритета для функции |
re-agent parity --filter REGEX | Запуск проверок паритета по шаблону |
re-agent status | Показать прогресс реверсинга |
re-agent status --class CLASS | Показать прогресс для конкретного класса |
| Сигнал | Уровень | Описание |
|---|
| Missing source | RED | Не найден исходный код для хукнутой функции |
| Stub markers | RED | Исходный код содержит маркеры заглушек (например, NOTSA_UNREACHABLE) |
| Trivial stub | RED | Много плагин-вызовов, крошечное тело и отсутствие управления потоком |
| Large ASM tiny source | RED | ASM содержит >= 80 инструкций, но исходный код <= 12 строк |
| Plugin-call heavy | YELLOW | Плагин-вызовы доминируют в теле функции |
| Short body | YELLOW | Тело функции содержит менее 6 строк |
| Low call count | YELLOW | Декомпиляция показывает много вызываемых функций, но в исходнике их мало |
| FP sensitivity | YELLOW | ASM содержит операции с плавающей точкой, а исходник — нет |
| Call count mismatch | YELLOW | Количество вызовов в исходнике существенно отличается от ASM |
| NaN logic | YELLOW | Декомпиляция содержит обработку NaN, а исходник — нет |
| Inline wrapper | INFO | Функция является тонкой обёрткой-инлайн |