IDE для агентной обратной разработки с мультиархитектурным дизассемблером на чистом Rust, нативным декомпилятором, отладчиком и LLM-агентом для анализа бинарных файлов и работы с CTF.
Среда агентного реверс-инжиниринга — десктопное приложение класса Ghidra в духе «Cursor для реверс-инжиниринга». Построено на Tauri 2 (фронтенд на React + TypeScript) поверх подключаемого бэкенда анализа. По умолчанию используется чисто-Rust нативный движок — без внешних процессов, без copyleft-зависимостей, мультиархитектурность через Capstone. Также можно запускать анализ через r2 (radare2) или IDA Pro: выберите любой движок, и всё приложение — инструменты агента и UI — будет работать через него. Инструменты агента и UI не зависят от бэкенда — см. docs/backends.md.

Cargo workspace в корне; десктопное приложение — один из пакетов в нём.
tauri/ desktop app (Tauri + React)
src/ React frontend
src-tauri/ Tauri Rust backend (engine sessions, agent wiring)
package.json app scripts (Vite, Vitest, Tauri CLI)
crates/
recurse-agent/ agent framework: LLM loop, tool runtime, SQLite memory
recurse-static/ static analysis: ELF/PE/Mach-O parsing, multi-arch disassembly,
CFG and cross-reference recovery, the engine seam
recurse-vtil/ VTIL-inspired de-obfuscation/de-virtualization IL, lifter, optimizer
recurse-mcp/ standalone headless MCP server (stdio) over the engine — no Tauri, no IDA
recurse-debug/ cross-platform debugger (ptrace/Mach/Win32, breakpoints, stepping)
recurse-eval/ headless eval harness (YAML-configured tiers)
justfile single entry point for both halves
recurse-agent — это только агент; статический анализ находится в recurse-static, а
отладчик — в recurse-debug, поэтому агент не тянет за собой системный код, который не
использует. Ни один крейт не зависит от Tauri, и каждый собирается/тестируется отдельно;
recurse-eval управляет агентом в headless-режиме. Все они являются членами workspace, поэтому один
Cargo.lock и один target/ покрывают весь репозиторий.
Ctrl+L)checksec) и счётчики анализаundefinedN, чтобы задать ей тип. Установленный вами тип возврата отображается в строке
сигнатуры заголовка. Оба сохраняются в SQLite с привязкой к функции, а очистка ячейки возвращает
её к тому, что говорят инструкции/clear и повторное открытие, и закладывают основу для следующей сессииrecurse-agent) с трассировкой отладки по каждому ходу; один и тот же цикл агента работает
в UI и в eval-стендеlift: поднимает функцию в IL деобфускации в стиле VTIL и выполняет
проходы распространения/свёртывания/удаления мёртвого кода/разрешения ветвлений
по всей процедуре — полезно, когда дизассемблирование выглядит как диспетчер VM или
цепочка непрозрачных предикатов (см. docs/vtil-lift.md)decompile генерирует C-подобный псевдокод (структурирование
if/while, полный охват инструкций) из того же конвейера recurse-vtil —
без внешнего инструмента, без необходимости в r2recurse-mcp: тот же Engine через MCP stdio для любого
агента с поддержкой MCP (Claude Code, Cursor, Claude Desktop, …) — без Tauri, без
лицензии IDA, без Python-моста (см. docs/recurse-mcp.md)Анализ идёт через единый трейт Engine (crates/recurse-static/src/engine.rs), поэтому
движок — это выбор, а не жёсткая зависимость:
native (по умолчанию) — чистый Rust-парсинг ELF/PE/Mach-O и мультиархитектурное дизассемблирование
(object + capstone): x86/x86-64, ARM, AArch64, MIPS, PowerPC, RISC-V, SPARC, SystemZ,
M68K, BPF. Без дочерних процессов, без внешних инструментов, без LGPL в сборке. Включает декомпилятор
(конвейер lift → optimize → structure из recurse-vtil — см.
docs/vtil-lift.md) и операцию lift для деобфускации в стиле VTIL.ida) — опциональный headless-анализ и декомпиляция Hex-Rays через idat.Выбирайте через меню настроек, переменную окружения RECURSE_BACKEND или сохранённую
конфигурацию. Агент получает один нейтральный к бэкенду инструмент analyze (functions, disasm, graph,
lift, decompile, xrefs, strings, imports, info, а также raw для консоли движка) —
отфильтрованный до операций, которые фактически поддерживает активный движок, поэтому raw (у нативного движка нет консоли)
предлагается только когда доступен. UI использует канонические типы результатов, а не JSON какого-либо движка.
См. docs/backends.md для описания трейта, выбора крейтов и обоснования
лицензирования. Открытие большого бинарника происходит быстро, потому что анализ ленивый — обнаружение индексирует
функции дёшево, а базовые блоки декодируются только при просмотре функции; см.
docs/lazy-analysis.md.
Прикрутить MCP-сервер к IDA/Ghidra или вставить дизассемблированный код в CLI-агента — это работает для CTF с 5 функциями и разваливается на реальных бинарниках. Recurse — это специализированная среда, а не обёртка над чат-ботом: