
Безопасный MCP-сервер, который предоставляет AI-агентам возможность выполнять автоматизированную обратную разработку, анализ вредоносного ПО, криминалистику, исследования уязвимостей и SAST — на базе Radare2, YARA, LIEF, Capstone и других.
Реверс-инжиниринг и анализ безопасности на основе ИИ через Model Context Protocol
MCP-сервер, который даёт ИИ-ассистентам, таким как Claude и Cursor, возможность выполнять реверс-инжиниринг, анализ вредоносных программ, исследование уязвимостей, цифровую криминалистику и аудит исходного кода с помощью естественного языка.
Reversecore MCP — это сервер Model Context Protocol, который объединяет 120 аналитических инструментов в единый интерфейс, к которому ИИ-ассистенты могут обращаться через естественный язык.
Вместо изучения синтаксиса командной строки для десятка разных инструментов вы просто описываете, что вам нужно:``` "Decompile the main function of this malware sample, extract all network IOCs, map the behavior to MITRE ATT&CK, and generate a triage report."
ИИ-ассистент разбивает это на вызовы инструментов:```
r2_decompile("sample.exe", "main")
→ extract_iocs("sample.exe")
→ add_mitre_technique(technique_id="T1071.001", ...)
→ create_analysis_report(template_type="quick_triage")
Each tool returns a structured ToolResult (either ToolSuccess or ToolError) with typed data that the AI can reason about, chain into follow-up queries, or render for the user.
AI Client (Claude / Cursor / any MCP-compatible client) │ MCP Protocol (stdio or HTTP/SSE) ▼ ┌──────────────────────────────────────────────────────┐ │ FastMCP 3.4.4 Server │ │ 120 registered tools · Fully async │ │ Python 3.10–3.12 │ ├────────────────────┬─────────────────────────────────┤ │ Guided Prompts │ Dynamic Resources │ │ (22 analysis │ (11 URI-based: per-binary │ │ modes) │ strings, IOCs, ASM, CFG, …) │ ├────────────────────┴─────────────────────────────────┤ │ Core Infrastructure │ │ Config · Security · Validators · Exceptions (17) │ │ R2 Pool · Metrics · Memory (SQLite) · Task Queue │ │ MITRE Mapper · Evidence Engine · Resilience Layer │ │ Arch Registry (x86/ARM/MIPS/RISC-V/PPC) │ │ Result Cache (SHA256) · Analysis Cache (Redis+SQL) │ │ SAST (Python AST + C/C++ Regex) · Plugin System │ ├──────────────────────────────────────────────────────┤ │ Analysis Engines │ │ Radare2 6.0.4 │ YARA 4.3.1 · LIEF · Capstone │ │ r2ghidra │ CAPA · angr · Qiling │ │ Volatility3 · Scapy│ DIE · Binwalk · Sleuth Kit │ │ pwntools · ROPgadget│ Keystone (assembler) │ └──────────────────────────────────────────────────────┘
### Core Infrastructure (37 модулей)
Каталог `reversecore_mcp/core/` содержит общую инфраструктуру, на которой построены все инструменты:
| Модуль | Назначение |
|---|---|
| `config.py` | Pydantic BaseSettings с 34+ переменными окружения |
| `security.py` | Санитизация входных данных, проверка аргументов команд |
| `validators.py` | Проверка путей к файлам и бинарным файлам с защитой от TOCTOU, разрешение символических ссылок |
| `r2_pool.py` | Потокобезопасный пул соединений Radare2 с настраиваемым размером |
| `r2_helpers.py` | Структурированный разбор вывода Radare2 |
| `metrics.py` | Время выполнения по каждому инструменту, счётчики вызовов, частота ошибок, статистика кэша |
| `memory.py` | Асинхронное хранилище AI-памяти на базе SQLite для сохранения результатов анализа между сеансами |
| `mitre_mapper.py` | Движок сопоставления идентификаторов техник MITRE ATT&CK |
| `evidence.py` | Система классификации доказательств: `OBSERVED`, `INFERRED`, `POSSIBLE` |
| `resilience.py` | Паттерны декораторов: повторные попытки, circuit-breaker и тайм-ауты |
| `task_queue.py` | Фоновая очередь задач через Redis + arq |
| `extension_registry.py` | Регистрация плагинов и управление жизненным циклом |
| `arch_registry.py` | Мультиархитектурное сопоставление (x86, x86_64, ARM32, ARM64, MIPS, RISC-V, PPC → r2 arch/bits/registers) |
| `result_cache.py` | Декоратор кэширования результатов инструментов на основе SHA256 (`@cache_tool_result`) |
| `analysis_cache.py` | Многоуровневый кэш декомпиляции (L1: Redis, L2: SQLite) |
| `result.py` | Pydantic-модели `ToolSuccess` / `ToolError` |
| `exceptions.py` | 17 классов исключений с кодами ошибок `RCMCP-E*` |
| `decorators.py` | `@log_execution`, `@track_metrics` |
| `error_handling.py` | Декоратор `@handle_tool_errors` |
| `error_formatting.py` | Форматирование структурированных ответов об ошибках |
| `execution.py` | Безопасное выполнение подпроцессов с тайм-аутом и ограничениями вывода |
| `command_spec.py` | Спецификация команд для вызовов подпроцессов |
| `loader.py` | Динамический загрузчик модулей инструментов |
| `plugin.py` | Базовый класс плагина |
| `extension.py` | Базовый класс расширения |
| `container.py` | Поддержка выполнения в контейнере/песочнице |
| `audit.py` | Аудит-логирование |
| `binary_cache.py` | Кэширование бинарных файлов |
| `json_utils.py` | Сериализация JSON через orjson (в 3–5 раз быстрее стандартного json) |
| `logging_config.py` | Структурированное логирование на основе Loguru |
| `report_generator.py` | Движок рендеринга отчётов (Markdown, PDF через xhtml2pdf) |
| `resource_manager.py` | Управление жизненным циклом ресурсов MCP |
| `sast/python_ast_scanner.py` | Сканер уязвимостей на основе AST Python |
| `sast/regex_scanner.py` | Сканер уязвимостей C/C++ на основе регулярных выражений |
| `sast/rule_manager.py` | Загрузка и управление правилами SAST |
---
## Каталог инструментов (120 инструментов)
Каждый инструмент возвращает структурированный `ToolResult` — либо `ToolSuccess` с типизированным `data`, либо `ToolError` с кодом ошибки `RCMCP-E*`. Инструменты сгруппированы в 8 плагинов.
---
### 🔍 Плагин статического анализа (24 инструмента)
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 1 | `run_strings` | CLI `strings` | Извлечение ASCII/Unicode-строк с настраиваемой минимальной длиной |
| 2 | `run_binwalk` | Binwalk | Глубокое сканирование прошивок на наличие встроенных сигнатур и файловых систем |
| 3 | `run_binwalk_extract` | Binwalk | Извлечение встроенных файлов, обнаруженных binwalk |
| 4 | `parse_binary_with_lief` | LIEF | Полный разбор PE/ELF/Mach-O: заголовки, секции, импорт/экспорт, TLS |
| 5 | `detect_packer` | DIE | Быстрое определение упаковщика/компилятора |
| 6 | `detect_packer_deep` | DIE (`diec`) | Глубокий анализ упаковщика/протектора через Detect It Easy |
| 7 | `run_capa` | CAPA (Mandiant FLARE) | Определение возможностей — «шифрует данные», «создаёт персистентность» и т. д. |
| 8 | `run_capa_quick` | CAPA | Быстрое сканирование возможностей с подмножеством правил |
| 9 | `generate_signature` | Radare2 | Генерация сигнатур бинарных файлов для идентификации |
| 10 | `generate_yara_rule` | Radare2 + YARA | Генерация YARA-правил обнаружения по бинарным паттернам |
| 11 | `generate_advanced_yara_rule` | Radare2 + YARA | Продвинутые YARA-правила с поведенческими индикаторами |
| 12 | `scan_for_versions` | LIEF + strings | Поиск встроенных строк версий в бинарном файле |
| 13 | `extract_rtti_info` | Radare2 | Извлечение C++ RTTI (информации о типах во время выполнения) |
| 14 | `diff_binaries` | Radare2 | Семантическое сравнение двух версий бинарных файлов |
| 15 | `analyze_variant_changes` | Radare2 | Анализ изменений между вариантами бинарных файлов |
| 16 | `match_libraries` | Radare2 | Идентификация статически слинкованных библиотек по отпечаткам функций |
| 17 | `patch_diff_1day` | Radare2 + эвристики | Автоматический анализ patch diff для исследования 1-day уязвимостей |
| 18 | `analyze_patch_diff_auto` | Radare2 + логический вывод | Автоматический вывод уязвимостей из patch diff |
| 19 | `emulate_binary` | Radare2 ESIL | Эмуляция кода с трассировкой регистров и памяти |
| 20 | `generate_fuzzing_harness` | Qiling + AFL++ | Генерация фаззинг-харнеса, нацеленного на конкретную функцию |
| 21 | `run_fuzzing_campaign` | AFL++ | Запуск полной фаззинг-кампании со сбором крашей |
| 22 | `triage_crash` | GDB | Разбор крашей и оценка эксплуатируемости |
| 23 | `verify_path_and_get_args` | angr | Символьное выполнение — доказательство достижимости пути и вычисление конкретных входных данных |
| 24 | `taint_trace` | Radare2 + angr | Анализ потока данных от источников к стокам (taint analysis) |
---
### 🔐 Плагин аудита исходного кода (1 инструмент)
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 25 | `audit_source_code` | AST + Regex | Сканирование AST Python + сканирование C/C++ по регулярным выражениям для поиска опасных паттернов |
---
### 🛠️ Плагин общих утилит (20 инструментов)
**Файловые операции (5 инструментов)**
| # | Инструмент | Описание |
|---|---|---|
| 26 | `run_file` | Определение типа файла, архитектуры и компилятора |
| 27 | `copy_to_workspace` | Копирование файла в рабочее пространство анализа |
| 28 | `create_directory` | Создание каталога в рабочем пространстве |
| 29 | `list_workspace` | Список всех файлов в рабочем пространстве |
| 30 | `scan_workspace` | Полное сканирование рабочего пространства с метаданными файлов |
**Объяснение патчей (1 инструмент)**
| # | Инструмент | Описание |
|---|---|---|
| 31 | `explain_patch` | Объяснение бинарного патча на естественном языке |
**Ассемблер (1 инструмент)**
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 32 | `assemble_instructions` | Keystone | Ассемблирование инструкций в машинный код (x86, ARM, MIPS и др.) |
**Управление AI-памятью (11 инструментов)**
Эти инструменты позволяют AI сохранять и извлекать результаты анализа между сеансами с помощью асинхронной базы данных SQLite:
| # | Инструмент | Описание |
|---|---|---|
| 33 | `create_memory_session` | Начать новый сеанс памяти для анализа |
| 34 | `store_analysis_finding` | Сохранить результат анализа с тегами |
| 35 | `query_analysis_memories` | Поиск прошлых результатов по запросу |
| 36 | `get_binary_analysis_context` | Получить весь контекст для конкретного бинарного файла |
| 37 | `tag_analysis_session` | Добавить теги к сеансу для организации |
| 38 | `search_memories_by_tag` | Найти сеансы/результаты по тегу |
| 39 | `delete_analysis_session` | Удалить сеанс и его результаты |
| 40 | `cleanup_expired_sessions` | Удалить сеансы старше заданного порога |
| 41 | `list_analysis_sessions` | Список всех активных сеансов |
| 42 | `export_memory_store` | Экспорт всех воспоминаний в переносимый формат |
| 43 | `import_memory_store` | Импорт воспоминаний из файла экспорта |
**Мониторинг сервера (2 инструмента)**
| # | Инструмент | Описание |
|---|---|---|
| 44 | `get_server_health` | Время работы, использование памяти, загруженные инструменты, версия Python |
| 45 | `get_tool_metrics` | Счётчики вызовов по каждому инструменту, среднее время выполнения, частота ошибок, попадания/промахи кэша |
---
### ⚙️ Плагин Radare2 и r2ghidra (30 инструментов)
Все инструменты Radare2 используют потокобезопасный пул соединений (`r2_pool.py`), который автоматически управляет сеансами r2pipe.
| # | Инструмент | Описание |
|---|---|---|
| 46 | `Radare2_open_file` | Открыть бинарный файл в Radare2 |
| 47 | `Radare2_close_file` | Закрыть сеанс Radare2 |
| 48 | `Radare2_list_open_files` | Список текущих открытых файлов |
| 49 | `Radare2_analyze_binary` | Запустить полный автоматический анализ (`aaa`) |
| 50 | `Radare2_list_functions` | Список всех обнаруженных функций |
| 51 | `Radare2_disassemble_function` | Дизассемблировать конкретную функцию |
| 52 | `Radare2_disassemble_address` | Дизассемблировать по конкретному адресу |
| 53 | `Radare2_decompile_function` | Декомпиляция через r2ghidra (движок Ghidra, встроенный в r2, без JVM) |
| 54 | `Radare2_list_exports` | Список экспортируемых символов |
| 55 | `Radare2_list_imports` | Список импортируемых функций |
| 56 | `Radare2_list_sections` | Список секций бинарного файла с энтропией |
| 57 | `Radare2_list_strings` | Список строк, найденных в бинарном файле |
| 58 | `Radare2_find_cross_references` | Отслеживание вызовов функций и ссылок на данные |
| 59 | `Radare2_search_bytes` | Поиск байтовых паттернов в бинарном файле |
| 60 | `Radare2_get_binary_info` | Получить метаданные бинарного файла (архитектура, формат, порядок байтов) |
| 61 | `Radare2_execute_command` | Выполнить сырую команду Radare2 |
| 62 | `Radare2_esil_emulate` | Эмуляция ESIL по конкретному адресу |
| 63 | `Radare2_get_hexdump` | Шестнадцатеричный дамп по виртуальному адресу |
| 64 | `Radare2_get_cfg_data` | Извлечение данных графа потока управления |
| 65 | `Radare2_generate_cfg_png` | Генерация CFG в виде PNG-изображения |
| 66 | `Radare2_generate_callgraph` | Генерация графа вызовов функций |
| 67 | `Radare2_recover_structures` | Автоматическое восстановление C-структур и сохранение в базу данных аннотаций |
| 68 | `Radare2_decompile_with_r2ghidra` | Высококачественная декомпиляция на C с кэшированием |
| 69 | `Radare2_annotate_binary` | Добавить аннотации к бинарному файлу |
| 70 | `Radare2_get_annotations` | Получить аннотации |
| 71 | `Radare2_export_annotations` | Экспорт аннотаций в файл |
| 72 | `Radare2_import_annotations` | Импорт аннотаций из файла |
| 73 | `Radare2_detect_crypto_constants` | Обнаружение криптографических констант (AES S-box и т. д.) |
| 74 | `Radare2_find_gadgets` | Поиск ROP/JOP-гаджетов |
| 75 | `Radare2_calculate_entropy` | Расчёт энтропии по каждой секции |
---
### 🦠 Плагин анализа вредоносного ПО (9 инструментов)
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 76 | `dormant_detector` | Radare2 + эвристики | Поиск скрытых бэкдоров, функций-сирот, таймеров и логических бомб |
| 77 | `adaptive_vaccine` | YARA + Radare2 | Генерация YARA-правил обнаружения + бинарных патчей для нейтрализации угроз |
| 78 | `vulnerability_hunter` | Radare2 + анализ | Обнаружение опасных API-паттернов (strcpy, sprintf) и цепочек ROP-гаджетов |
| 79 | `extract_iocs` | Regex + LIEF | Извлечение IP-адресов, URL, доменов, хэшей, ключей реестра, криптоадресов |
| 80 | `run_yara` | YARA | Сканирование с пользовательскими файлами правил и встроенными наборами правил |
| 81 | `generate_poc_exploit` | pwntools | Генерация кода PoC-эксплойта |
| 82 | `build_rop_chain` | ROPgadget + pwntools | Автоматическое построение ROP-цепочек |
| 83 | `autonomous_vuln_hunt` | Radare2 + angr | Автономный конвейер поиска уязвимостей |
| 84 | `analyze_heap_exploit` | Radare2 + эвристики | Анализ эксплойтов кучи (UAF, double-free, переполнение) |
---
### 🕵️ Плагин цифровой криминалистики (22 инструмента)
**Криминалистика памяти (6 инструментов)**
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 85 | `memory_analyze` | Volatility3 | Полный анализ дампа памяти |
| 86 | `memory_list_processes` | Volatility3 | Список запущенных процессов из дампа памяти |
| 87 | `memory_detect_injections` | Volatility3 | Обнаружение инъекций кода в память процессов |
| 88 | `memory_extract_strings` | Volatility3 | Извлечение строк из памяти процессов |
| 89 | `memory_dump_module` | Volatility3 | Дамп загруженного модуля из памяти |
| 90 | `memory_list_symbols` | Volatility3 | Список символов из памяти |
**Криминалистика дисков (6 инструментов)**
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 91 | `disk_list_partition` | Sleuth Kit | Список разделов диска |
| 92 | `disk_list_files` | Sleuth Kit | Список файлов в образе диска |
| 93 | `disk_recover_deleted` | Sleuth Kit | Восстановление удалённых файлов |
| 94 | `disk_analyze_mft` | Sleuth Kit | Анализ NTFS Master File Table |
| 95 | `disk_extract_file` | Sleuth Kit | Извлечение файла из образа диска |
| 96 | `disk_hash_verify` | Sleuth Kit | Проверка целостности файла по хэшу |
**Сетевая криминалистика (5 инструментов)**
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 97 | `pcap_analyze` | Scapy | Анализ PCAP: разбивка по протоколам, аномалии |
| 98 | `pcap_list_connections` | Scapy | Список всех сетевых соединений |
| 99 | `pcap_extract_dns` | Scapy | Извлечение DNS-запросов и ответов |
| 100 | `pcap_extract_c2` | Scapy | Выявление потенциальной C2-коммуникации |
| 101 | `pcap_reconstruct_stream` | Scapy | Реконструкция TCP-потоков |
**Анализ артефактов (5 инструментов)**
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 102 | `artifact_collect` | Пользовательские парсеры | Сбор истории браузера, кустов реестра, журналов событий, prefetch |
| 103 | `artifact_correlate_ioc` | Пользовательские парсеры | Сопоставление артефактов с известными IOC |
| 104 | `artifact_generate_yara` | YARA | Генерация YARA-правил по паттернам артефактов |
| 105 | `artifact_timeline` | Пользовательские парсеры | Построение таймлайна из нескольких источников артефактов |
| 106 | `artifact_report` | Пользовательские парсеры | Генерация отчёта по анализу артефактов |
---
### 📝 Плагин формирования отчётов (14 инструментов)
| # | Инструмент | Описание |
|---|---|---|
| 107 | `get_system_time` | Получить временную метку сервера (предотвращает выдумывание дат AI) |
| 108 | `set_timezone` | Установить часовой пояс для отчётов |
| 109 | `get_timezone_info` | Получить информацию о текущем часовом поясе |
| 110 | `start_report_session` | Начать сеанс анализа с замером времени и уникальным ID |
| 111 | `end_report_session` | Завершить сеанс: вычислить длительность, зафиксировать списки IOC/ATT&CK |
| 112 | `get_report_session_status` | Проверить статус сеанса |
| 113 | `list_report_sessions` | Список всех активных/завершённых сеансов |
| 114 | `add_ioc` | Сбор и тегирование IOC в ходе активного сеанса |
| 115 | `add_analysis_note` | Добавление категоризированных заметок (finding, warning, behavior) |
| 116 | `add_mitre_technique` | Фиксация идентификаторов техник MITRE ATT&CK |
| 117 | `set_severity` | Установка уровня серьёзности сеанса (low/medium/high/critical) |
| 118 | `create_analysis_report` | Рендеринг отчёта в 4 режимах: `full_analysis`, `quick_triage`, `ioc_summary`, `executive_brief` |
| 119 | `generate_vex_report` | Генерация отчёта VEX (Vulnerability Exploitability eXchange) |
| 120 | `generate_sigma_rule` | Генерация правил обнаружения SIGMA |
---
## Управляемые промпты для анализа (22 режима)
Промпты — это готовые рабочие процессы анализа, которые задают AI структурированную роль, пошаговые последовательности использования инструментов и правила классификации доказательств. Вы активируете их, указав имя промпта в вашем AI-клиенте.
### Анализ вредоносного ПО (9 промптов)
| Промпт | Вариант использования |
|---|---|
| `full_analysis_mode` | Полный 6-фазный анализ: триаж → дизассемблирование → поведение → сеть → персистентность → отчёт |
| `malware_analysis_mode` | Целенаправленный анализ вредоносного ПО с классификацией угроз |
| `basic_analysis_mode` | Быстрый триаж для первичной оценки и быстрых вердиктов |
| `apt_hunting_mode` | Поиск APT-специфичных активностей: горизонтальное перемещение, персистентность, эксфильтрация данных |
| `malware_defense_mode` | Ориентация на защиту: генерация правил обнаружения и мер противодействия |
| `unpacking_mode` | Анализ и обход упаковки/обфускации (Themida, VMProtect, UPX) |
| `c2_extraction_mode` | Извлечение и анализ инфраструктуры C2-коммуникации |
| `ransomware_triage_mode` | Триаж программ-вымогателей: анализ шифрования, оценка возможности восстановления ключей |
| `code_similarity_mode` | Сравнение бинарных файлов на предмет схожести кода и общего происхождения |
### Security Research (6 промптов)
| Промпт | Вариант использования |
|---|---|
| `vulnerability_research_mode` | Поиск ошибок: переполнения буфера, UAF, инъекции команд |
| `crypto_analysis_mode` | Анализ криптографических реализаций и выявление слабостей |
| `firmware_analysis_mode` | IoT/встраиваемые прошивки: извлечение binwalk, UART-строки, жёстко заданные учётные данные |
| `patch_analysis_mode` | Анализ исправлений безопасности и регрессионное тестирование |
| `source_code_audit_mode` | Аудит безопасности исходного кода (Python, C, C++) |
| `autonomous_vuln_hunt_mode` | Автономный конвейер поиска уязвимостей |
### CVE Research и разработка эксплойтов (5 промптов)
| Промпт | Вариант использования |
|---|---|
| `taint_analysis_mode` | Анализ потока данных: автоматическое обнаружение путей источник→сток |
| `heap_exploit_mode` | Анализ эксплойтов кучи и генерация PoC |
| `fuzzing_mode` | Настройка фаззинг-кампании и триаж крашей |
| `patch_diff_auto_mode` | Автоматический patch diff для исследования 1-day уязвимостей |
| `cve_discovery_pipeline_mode` | Полный конвейер обнаружения CVE: от patch diff до рабочего эксплойта |
### Прочие (2 промпта)
| Промпт | Вариант использования |
|---|---|
| `game_analysis_mode` | Анализ игровых клиентов: обнаружение анти-чита, реверс протоколов, инспекция памяти |
| `report_generation_mode` | Структурированный сеанс работы с сопоставлением техник MITRE ATT&CK |
> **Как работают промпты:** Каждый промпт задаёт AI структурированную роль аналитика. Он включает контрольные точки рассуждений по цепочке мыслей (chain-of-thought), где AI должен остановиться и оценить ситуацию перед продолжением, а также правила классификации доказательств, которые не позволяют AI выдавать догадки за факты. Каждый вывод должен быть помечен как `OBSERVED` (непосредственно проверено), `INFERRED` (логически выведено из статического анализа) или `POSSIBLE` (требует дальнейшей проверки).
---
## Ресурсы MCP (11 URI)
Ресурсы — это конечные точки только для чтения, к которым AI-клиенты могут обращаться через шаблоны URI. Они дополняют инструменты, предоставляя структурированные данные без необходимости явных вызовов инструментов.
### Статические ресурсы
| URI | Описание |
|---|---|
| `reversecore://guide` | Руководство по использованию инструментов с правилами путей к файлам и лучшими практиками |
| `reversecore://guide/structures` | Техническое руководство по восстановлению структур и анализу перекрёстных ссылок |
| `reversecore://tools` | Полная документация по всем 120 зарегистрированным инструментам |
| `reversecore://logs` | Журналы приложения (последние 100 строк) |
### Динамические ресурсы (виртуальная файловая система для каждого бинарного файла)
Эти URI разрешаются для каждого бинарного файла и по запросу вызывают соответствующие инструменты анализа:
| Шаблон URI | Описание |
|---|---|
| `reversecore://{filename}/strings` | Извлечь все строки из бинарного файла |
| `reversecore://{filename}/iocs` | Извлечь IOC (IP-адреса, URL, email, хэши) |
| `reversecore://{filename}/func/{address}/code` | Декомпилированный псевдо-C код функции |
| `reversecore://{filename}/func/{address}/asm` | Дизассемблированный код функции |
| `reversecore://{filename}/func/{address}/cfg` | Граф потока управления в формате Mermaid |
| `reversecore://{filename}/functions` | Список всех функций в бинарном файле |
| `reversecore://{filename}/dormant_detector` | Результаты анализа dormant detector |
---
## Быстрый старт
### Вариант 1 — PyPI (самый простой)```bash
pip install reversecore-mcp
reversecore-mcp
Предварительные требования: Radare2 должен быть установлен в вашей системе (
r2 --version). YARA устанавливается автоматически черезyara-python.
Все аналитические движки (Radare2, r2ghidra, YARA, Binwalk, Sleuth Kit, GDB и т. д.) предустановлены:```bash
docker run -i --rm
-v /path/to/your/samples:/app/workspace
-e REVERSECORE_WORKSPACE=/app/workspace
-e MCP_TRANSPORT=stdio
ghcr.io/sjkim1127/reversecore_mcp:latest
### Вариант 3 — Сборка из исходного кода (Docker Compose)```bash
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
./scripts/run-docker.sh # auto-detects Intel / Apple Silicon
Или вручную:```bash docker compose --profile x86 up -d # Intel/AMD docker compose --profile arm64 up -d # Apple Silicon (M1/M2/M3)
### Вариант 4 — Python (локальная разработка)```bash
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
python -m venv venv && source venv/bin/activate
pip install -r requirements.txt
python -m reversecore_mcp.server
Предварительные требования для локального режима: Radare2 должен быть установлен в вашей системе (
r2 --version). Отдельные программные модули инструментов (YARA, LIEF, Capstone и т.д.) устанавливаются через pip. Для полной поддержки криминалистики вам также понадобятся Volatility3, Scapy и Sleuth Kit.
Добавьте конфигурацию сервера в настройки вашего IDE-клиента (например, ~/.cursor/mcp.json или claude_desktop_config.json).
Если у вас запущен контейнер через Docker Compose, этот режим направляет stdio напрямую в работающий контейнер. Нулевая задержка запуска, постоянная память и полная доступность инструментов.```json { "mcpServers": { "Reversecore_MCP": { "command": "docker", "args": [ "exec", "-i", "-e", "MCP_TRANSPORT=stdio", "reversecore-mcp-arm64", "python", "-m", "reversecore_mcp.server" ] } } }
> Замените `reversecore-mcp-arm64` на `reversecore-mcp`, если вы на Intel/AMD.
---
### 🌐 Вариант 2: режим SSE HTTP
Для сетевой потоковой передачи (Server-Sent Events):```json
{
"mcpServers": {
"Reversecore_MCP": {
"url": "http://localhost:8000/mcp/sse"
}
}
}
Запускает новый изолированный контейнер для каждого сеанса:
⚠️ Важно — пути к файлам внутри Docker
Ваша локальная папка монтируется в
/app/workspaceвнутри контейнера. Всегда ссылайтесь на файлы только по имени файла, а не по вашему локальному полному пути.
❌ Неправильно ✅ Правильно r2_decompile("/Users/john/samples/mal.exe")r2_decompile("mal.exe")
Все настройки можно задать через переменные окружения или файл .env (см. .env.example). Настройки управляются через Pydantic BaseSettings с префиксом REVERSECORE_.
| Variable | Default | Description |
|---|---|---|
REVERSECORE_PLUGIN_DIRS | "" | Список каталогов для поиска плагинов расширений через запятую |
REVERSECORE_SAST_RULES_PATH | "" | Путь к пользовательскому файлу правил SAST в формате YAML |
Безопасность реализована по принципу эшелонированной защиты (defense-in-depth) с защитой на нескольких уровнях:
| Контроль | Реализация |
|---|---|
| Выполнение без root-прав | Запускается от имени appuser (UID 1000) с минимальными возможностями |
| Лимиты ресурсов | Docker Compose применяет лимиты CPU (2.0) и памяти (4 ГБ) |
| Изоляция песочницы |
Все 17 классов исключений содержат коды ошибок RCMCP-E* для программной обработки. Полную иерархию см. в разделе Error Handling.
git clone https://github.com/sjkim1127/Reversecore_MCP.git cd Reversecore_MCP python -m venv venv && source venv/bin/activate pip install -r requirements.txt pip install -r requirements-dev.txt pre-commit install # installs Ruff, Bandit, Gitleaks hooks
### Тестирование```bash
# Full test suite with coverage report
pytest tests/ -v
# Unit tests only (fast, no external dependencies)
pytest tests/unit/ -v
# Integration tests (requires Docker)
pytest tests/integration/ -v
# Run with coverage threshold enforcement
pytest tests/unit/ --cov=reversecore_mcp --cov-fail-under=80
# Run a specific test
pytest tests/unit/test_cli_tools.py::TestRunFile::test_success -v
# Security boundary tests
pytest tests/ -m security -v
# Benchmarks
pytest tests/ -m benchmark -v
Статус тестов:
pytest-asyncioМаркеры тестов:
ruff check reversecore_mcp/ # Lint (E, W, F, I, B, C4, UP rules) ruff format reversecore_mcp/ # Format mypy reversecore_mcp/ # Type check (0 errors across 108 files) bandit -r reversecore_mcp/ # Security scan (all severities) pip-audit # Dependency CVE scan
### Хуки Pre-commit
Следующие хуки запускаются автоматически при каждом коммите:
1. **Ruff** — линтинг с авто-исправлением + проверка форматирования
2. **trailing-whitespace** — удаляет завершающие пробелы
3. **end-of-file-fixer** — гарантирует, что файлы заканчиваются новой строкой
4. **check-yaml / check-json** — проверяет синтаксис YAML/JSON
5. **check-added-large-files** — блокирует файлы размером > 1 МБ
6. **check-merge-conflict** — обнаруживает неразрешённые маркеры слияния
7. **detect-private-key** — предотвращает случайную фиксацию ключей
8. **Bandit** — сканирование безопасности Python
---
## Конвейер CI/CD
Каждый пуш в `main` запускает 11 задач конвейера. Все они должны быть успешно пройдены перед развёртыванием.```
Lint & Security Gate Unit Tests (Python Matrix)
├─ Gitleaks (secret scan) ├─ pytest 3.10 --cov-fail-under=80
├─ Hadolint (Dockerfile lint) ├─ pytest 3.11 --cov-fail-under=80
├─ Ruff check + format └─ pytest 3.12 --cov-fail-under=80
├─ Mypy type check (108 files)
├─ Bandit (all severities) Wheel Smoke Test
├─ pip-audit (no CVEs) └─ Build wheel → install in /tmp
└─ Security boundary tests → verify plugin discovery
→ assert __file__ under sys.prefix
CodeQL Analysis
└─ Python SAST Docker Verification
├─ Build reversecore-mcp:ci
Exploit Safety Gate ├─ Trivy container scan
├─ Bandit on POC templates ├─ Image size check (< 5 GB)
├─ Hypothesis DAST fuzzing ├─ CLI tool verification
├─ Performance benchmarks ├─ Integration tests in container
└─ Container isolation test └─ E2E tool invocation
In-Container Smoke Test Build Base Image (amd64 + arm64)
├─ Copy test ELF into container ├─ Compile YARA 4.3.1
└─ Run scripts/smoke_test.py ├─ Compile Radare2 6.0.4
├─ Compile r2ghidra
Deploy (amd64 + arm64) └─ Push to GHCR
├─ Build app image
├─ Push to GHCR Merge Manifests
└─ Trivy rescan on published └─ Multi-arch manifest → :latest
Политика нулевого обхода: сбои CI/CD никогда не устраняются изменением конфигурации пайплайна. Первопричины всегда исправляются непосредственно в исходном коде или зависимостях.
Docker-сборка использует двухуровневый подход, чтобы поддерживать приемлемое время сборки:
Dockerfile.base)Многоступенчатая сборка, которая компилирует из исходников все медленно собираемые и редко изменяемые зависимости:``` compiler-toolchain (python:3.12-slim-bookworm + build tools) ├── compiler-yara (YARA 4.3.1 from source) [parallel] ├── compiler-r2 (Radare2 6.0.4 from source) [parallel] │ └── compiler-r2ghidra (r2ghidra plugin) [sequential] └── compiler-pip (pip install into /opt/venv) [parallel]
base (final runtime: python:3.12-slim-bookworm) ├── Runtime packages: file, binutils, gdb, binwalk, graphviz, nasm, sleuthkit ├── /opt/yara (compiled YARA) ├── /opt/radare2 (compiled r2 + r2ghidra) ├── /opt/venv (Python packages) └── Non-root user: appuser (UID 1000)
Этот образ пересобирается только при изменении версий инструментов. Время сборки: ~12 минут.
### Слой 2: Образ приложения (`Dockerfile`)
Наследуется от базового образа и копирует код приложения:```
FROM base image
├── COPY reversecore_mcp/ (application code)
├── COPY scripts/ (smoke test, benchmarks)
├── pip install any new requirements
├── Security package upgrades
└── CMD ["python", "-m", "reversecore_mcp.server"]
Время сборки: ~60 секунд.
Три сервиса с профилями, зависящими от архитектуры:
Ограничения ресурсов: 2,0 ядра ЦП, 4 ГБ памяти на контейнер.
reversecore_mcp/ ├── core/ # Infrastructure layer (37 modules) │ ├── config.py # Pydantic BaseSettings (34+ env vars) │ ├── exceptions.py # Exception hierarchy (17 classes, RCMCP-E* codes) │ ├── security.py # Input sanitization & command arg validation │ ├── validators.py # Path validators (TOCTOU-hardened, symlink-safe) │ ├── r2_pool.py # Thread-safe Radare2 connection pool │ ├── r2_helpers.py # Structured Radare2 output parsing │ ├── metrics.py # Per-tool timing, counts, error rates, cache stats │ ├── decorators.py # @log_execution, @track_metrics │ ├── error_handling.py # @handle_tool_errors decorator │ ├── error_formatting.py # Structured error formatting │ ├── execution.py # Safe subprocess with timeout/output limits │ ├── command_spec.py # Command specifications │ ├── memory.py # Async SQLite AI memory store │ ├── mitre_mapper.py # MITRE ATT&CK mapping engine │ ├── evidence.py # Evidence classification (OBSERVED/INFERRED/POSSIBLE) │ ├── resilience.py # Retry, circuit-breaker, timeout patterns │ ├── task_queue.py # Background task queue (Redis + arq) │ ├── extension_registry.py # Plugin registration system │ ├── arch_registry.py # Multi-arch mapping (x86/ARM/MIPS/RISC-V/PPC) │ ├── result_cache.py # SHA256-based tool result caching │ ├── analysis_cache.py # Multi-level decompilation cache (Redis + SQLite) │ ├── result.py # ToolSuccess / ToolError Pydantic models │ ├── loader.py # Dynamic tool module loader │ ├── plugin.py # Plugin base class │ ├── extension.py # Extension base class │ ├── container.py # Container/sandbox execution │ ├── audit.py # Audit logging │ ├── binary_cache.py # Binary file caching │ ├── json_utils.py # orjson-backed JSON (3-5x faster) │ ├── logging_config.py # Loguru logging configuration │ ├── report_generator.py # Report rendering (Markdown, PDF) │ ├── resource_manager.py # MCP resource lifecycle │ └── sast/ # Source code scanners │ ├── python_ast_scanner.py # Python AST vulnerability scanner │ ├── regex_scanner.py # C/C++ regex vulnerability scanner │ ├── rule_manager.py # SAST rule loader │ └── default_rules.yaml # Default scanning rules │ ├── tools/ # MCP tool implementations (120 tools) │ ├── analysis/ # Static analysis (24 tools) │ │ ├── static_analysis.py # file, strings, binwalk │ │ ├── lief_tools.py # LIEF binary parser │ │ ├── capa_tools.py # CAPA capability detection │ │ ├── die_tools.py # Detect It Easy packer detection │ │ ├── diff_tools.py # Binary diffing │ │ ├── emulation_tools.py # ESIL emulation │ │ ├── fuzz_tools.py # Fuzzing harness generator │ │ ├── fuzzing_campaign.py # Full fuzzing campaign runner │ │ ├── symbolic_analysis.py # angr symbolic execution │ │ ├── signature_tools.py # Library signature matching │ │ ├── source_auditor.py # SAST (Python + C/C++) │ │ ├── crash_triage.py # GDB crash triage │ │ ├── taint_analysis.py # Source→sink taint tracing │ │ ├── advanced_yara.py # Advanced YARA generation │ │ ├── patch_vuln_inference.py # Patch vulnerability inference │ │ └── cache_tools.py # Analysis cache management │ │ │ ├── radare2/ # Disassembly & decompilation (30 tools) │ │ ├── radare2_mcp_tools.py # Core Radare2 tool set │ │ ├── r2ghidra_tools.py # r2ghidra decompiler (cached) │ │ ├── r2_analysis.py # Deep function analysis │ │ ├── r2_db.py # SQLite annotation + cache DB │ │ ├── r2_esil_simulator.py # Multi-arch ESIL simulator │ │ └── r2_session.py # Stateful analysis sessions │ │ │ ├── malware/ # Threat detection (9 tools) │ │ ├── dormant_detector.py # Backdoor/logic bomb detection │ │ ├── ioc_tools.py # IOC extraction │ │ ├── yara_tools.py # YARA scanning │ │ ├── adaptive_vaccine.py # YARA rule + patch generation │ │ ├── vulnerability_hunter.py # Dangerous API detection │ │ ├── autonomous_hunter.py # Autonomous vuln hunting pipeline │ │ ├── heap_exploit.py # Heap exploitation analysis │ │ ├── poc_generator.py # PoC exploit generation │ │ └── rop_builder.py # ROP chain construction │ │ │ ├── forensics/ # Digital forensics (22 tools) │ │ ├── memory.py # Volatility3 memory forensics │ │ ├── network.py # Scapy PCAP analysis │ │ ├── disk.py # Sleuth Kit disk forensics │ │ └── artifact.py # Browser/registry/event log analysis │ │ │ ├── report/ # Report generation (14 tools) │ │ ├── report_mcp_tools.py # MCP-registered report tools │ │ ├── report_tools.py # Report rendering logic │ │ ├── session.py # Session state management │ │ ├── converter.py # Format conversion (Markdown → PDF/HTML) │ │ ├── email.py # SMTP report delivery │ │ ├── sigma_generator.py # SIGMA rule generation │ │ └── vex_generator.py # VEX report generation │ │ │ └── common/ # Shared utilities (20 tools) │ ├── file_operations.py # File ops, workspace management │ ├── server_tools.py # Server health, tool metrics │ ├── memory_tools.py # AI memory management (11 tools) │ ├── patch_explainer.py # Binary patch explanation │ └── assembler.py # Keystone assembler │ ├── prompts/ # AI reasoning prompts (22 modes) │ ├── malware.py # 9 malware analysis prompts │ ├── security.py # 6 security research prompts │ ├── cve_research.py # 5 CVE/exploit research prompts │ ├── game.py # Game client analysis prompt │ ├── report.py # Report generation prompt │ ├── server_health.py # Server inspection prompts │ └── common.py # Shared constants (DOCKER_PATH_RULE, LANGUAGE_RULE) │ ├── dashboard/ # Web dashboard (FastAPI + HTMX) │ ├── templates/ # Jinja2 templates with HTMX fragments │ └── static/ # htmx.min.js (local, CSP-compliant) │ ├── web/ # HTTP transport layer │ ├── auth.py # API key authentication middleware │ ├── middleware.py # Security headers, loopback restriction │ └── endpoints.py # /health, file upload, dashboard routes │ ├── resources.py # 11 MCP resources (static + dynamic per-binary) └── server.py # FastMCP server entry point
**Другие каталоги:**```
tests/
├── unit/ # 1,957 unit tests
├── integration/ # Docker-based integration tests
├── fixtures/ # Test binaries, YARA rules, sample data
└── conftest.py # Shared pytest fixtures
scripts/
├── smoke_test.py # Multi-layer in-container smoke test
├── check_release_metadata.py # Version consistency validation
├── fetch_test_binaries.py # Download test fixtures
├── run-docker.sh # Auto-detect architecture and start
└── ... # Benchmarks, analysis scripts
docs/
├── getting-started/ # Installation guide
├── development/ # Architecture, contributing, testing guides
├── api/ # Tool and module reference
└── user-guide/ # Analysis workflows
Все пользовательские исключения наследуются от ReversecoreError и содержат структурированные коды ошибок:
AI-клиенты могут использовать поле error_code для программной обработки сбоев и принятия решения о повторе, использовании альтернативного инструмента или сообщении об ошибке пользователю.
Следуйте этому шаблону, чтобы добавить новый MCP-инструмент:```python
from reversecore_mcp.core.decorators import log_execution from reversecore_mcp.core.result import ToolResult, success, failure from reversecore_mcp.core.security import validate_file_path
@log_execution() async def my_analysis_tool( file_path: str, option: str | None = None, ) -> ToolResult: """Analyze a binary for X.
Args:
file_path: Path to the binary file (relative to workspace).
option: Optional analysis option.
Returns:
ToolResult with status='success' and structured content.
"""
try:
safe_path = validate_file_path(file_path)
result = await perform_analysis(safe_path)
return success({"result": result})
except Exception as e:
return failure(
error_code="RCMCP-E100",
message=str(e),
hint="Check that the file exists and is a valid binary.",
)
Затем зарегистрируйте его в `__init__.py` соответствующего плагина и добавьте тесты в `tests/unit/`.
---
## Участие в разработке
1. Сделайте форк репозитория
2. Создайте ветку для функциональности: `git checkout -b feat/my-feature`
3. Пишите тесты вместе с кодом — покрытие не должно опускаться ниже 80%
4. Убедитесь, что все проверки проходят: `pytest`, `ruff check`, `mypy`, `bandit`
5. Откройте pull request с понятным описанием
Пожалуйста, ознакомьтесь с [Руководством по участию в разработке](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/development/contributing.md) для получения информации о стандартах кода, соглашениях по docstring (в стиле Google) и чек-листе pull request.
---
## Документация
| Документ | Описание |
|---|---|
| [Руководство по установке](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/getting-started/installation.md) | Подробная настройка для всех окружений |
| [Руководство по архитектуре](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/development/architecture.md) | Архитектура системы и детали компонентов |
| [Руководство по участию в разработке](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/development/contributing.md) | Стандарты кода, docstring, процесс pull request |
| [Руководство по тестированию](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/development/testing.md) | Паттерны тестирования, фикстуры и покрытие |
| [Справочник по API](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/api/) | Справочник по инструментам и модулям |
| [Руководство пользователя](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/docs/user-guide/) | Рабочие процессы анализа |
---
## Примеры использования
### Пример 1: базовый анализ вредоносного ПО```
User: "Analyze this suspicious file sample.exe"
AI calls:
1. run_file("sample.exe") → PE32 executable, x86, MSVC
2. detect_packer("sample.exe") → Not packed
3. extract_iocs("sample.exe") → 3 IPs, 2 URLs, 1 mutex
4. run_capa("sample.exe") → "creates persistence", "encrypts data"
5. dormant_detector("sample.exe") → 2 orphan functions with network calls
6. generate_yara_rule("sample.exe") → Detection rule generated
AI response: "This PE32 binary shows ransomware-like behavior. CAPA detected
encryption and persistence capabilities. I found 2 hidden network functions
that may serve as a backup C2 channel. Here's a YARA rule for detection..."
User: "Find exploitable bugs in this network daemon"
AI activates: taint_analysis_mode
AI calls:
taint_trace("daemon", verify_with_angr=True) → Found 3 source→sink paths: recv() → strcpy() [CWE-120, CONFIRMED by angr] read() → sprintf() [CWE-134, LIKELY] getenv() → system() [CWE-78, POSSIBLE]
vulnerability_hunter("daemon") → 12 dangerous API calls, 4 exploitable patterns
generate_poc_exploit(target="daemon", vuln_type="bof", offset=128) → Python exploit script generated
AI response: "I found a confirmed stack buffer overflow where recv() data flows directly into strcpy() at 0x40123C. angr proved the path is reachable. Here's a working PoC..."
### Пример 3: Цифровое криминалистическое расследование```
User: "Analyze this memory dump from a compromised server"
AI calls:
1. memory_list_processes("memdump.raw")
→ 47 processes, 2 with suspicious names
2. memory_detect_injections("memdump.raw")
→ Code injection detected in PID 1842 (svchost.exe)
3. memory_extract_strings("memdump.raw", pid=1842)
→ C2 domain strings extracted
4. artifact_correlate_ioc(artifacts={"domains": ["evil-c2.com"]})
→ Matches known APT group IOCs
5. create_analysis_report(template_type="full_analysis")
→ PDF report with timeline and MITRE ATT&CK mapping
User: "Compare the patched and unpatched versions to find what was fixed"
AI activates: patch_diff_auto_mode
AI calls:
diff_binaries("libfoo-1.0.so", "libfoo-1.1.so") → 3 functions changed, 1 new function
patch_diff_1day("libfoo-1.0.so", "libfoo-1.1.so") → Automated analysis: bounds check added at parse_header()
r2_decompile("libfoo-1.0.so", "parse_header") → Decompiled vulnerable version (no bounds check)
r2_decompile("libfoo-1.1.so", "parse_header") → Decompiled patched version (memcpy size limited)
AI response: "The patch adds a bounds check in parse_header() at 0x12340. The old version copies user-controlled length bytes via memcpy without validation, creating a heap buffer overflow (CWE-122)."
---
## Поддержка нескольких архитектур
Модуль `arch_registry.py` сопоставляет имена архитектур с параметрами конфигурации Radare2, что позволяет инструментам работать с разными архитектурами процессоров без ручной настройки:
| Архитектура | Ключ | Архитектура r2 | Разрядность | Регистр PC | Регистр SP |
|---|---|---|---|---|---|
| Intel 32-bit | `x86` | `x86` | 32 | `eip` | `esp` |
| Intel/AMD 64-bit | `x86_64` | `x86` | 64 | `rip` | `rsp` |
| ARM 32-bit / Thumb | `arm32` | `arm` | 16, 32 | `r15` | `r13` |
| ARM 64-bit (AArch64) | `arm64` | `arm` | 64 | `pc` | `sp` |
| MIPS | `mips` | `mips` | 32, 64 | `pc` | `sp` |
| RISC-V | `riscv` | `riscv` | 32, 64 | `pc` | `sp` |
| PowerPC | `ppc` | `ppc` | 32, 64 | `pc` | `r1` |
**Разрешение псевдонимов** обрабатывается автоматически:
- `amd64` → `x86_64`
- `aarch64` → `arm64`
- `arm` с `bits=64` → `arm64`
- `arm` с `bits=16` или `bits=32` → `arm32`
Такие инструменты, как `Radare2_esil_emulate`, `assemble_instructions` и `r2_simulate_patch`, используют этот реестр для корректной настройки среды анализа для любого целевого двоичного файла.
---
## Система кэширования результатов
Два уровня кэширования минимизируют избыточные вычисления:
### Кэш результатов инструмента (`result_cache.py`)
Декоратор `@cache_tool_result` кэширует вывод любого инструмента на основе SHA256-хеша двоичного файла и именованных аргументов инструмента:```
Cache key = SHA256( "<tool_name>::{sorted_json_kwargs}" )
Бэкенд хранилища: база данных SQLite через r2_db.py, доступная через инструменты get_cached_result() и set_cached_result().
Метрики: попадания и промахи кэша отслеживаются через metrics_collector.record_cache_hit() и record_cache_miss(), видны через инструмент get_tool_metrics.
analysis_cache.py)Многоуровневый кэш, специально предназначенный для результатов декомпиляции (которые дорого вычислять):
Импорт/экспорт: Инструменты export_analysis_cache и import_analysis_cache позволяют сохранять состояние кэша в файлы rcpack и загружать из них для обмена между средами.
Система ИИ-памяти (memory_tools.py + core/memory.py) обеспечивает постоянное и доступное для запросов хранилище результатов анализа между сессиями. Это позволяет ИИ:
create_memory_session("analysis of ransomware sample") │ ├── store_analysis_finding("Found AES-256 encryption at 0x401000", tags=["crypto", "ransomware"]) ├── store_analysis_finding("C2 beacon interval: 30 seconds", tags=["c2", "network"]) └── tag_analysis_session(tags=["ransomware", "financial-sector"])
query_analysis_memories("ransomware encryption") → Returns previous findings about ransomware encryption patterns
get_binary_analysis_context("sample.exe") → Returns all findings ever recorded for this binary
**Storage:** Async SQLite database at the path configured by `MEMORY_DB_PATH` (default: `~/.reversecore_mcp/memory.db`).
**Portability:** Use `export_memory_store` and `import_memory_store` to transfer the entire memory database between environments.
---
## Web Dashboard
When running in HTTP mode (`MCP_TRANSPORT=http`), a web dashboard is available at `http://localhost:8000/dashboard`. It provides:
- Binary upload with drag-and-drop
- Real-time analysis status
- Interactive function list and disassembly view
- IOC extraction results
- Server health monitoring
**Tech stack:** FastAPI + Jinja2 templates + HTMX (loaded locally from `dashboard/static/`, no CDN dependency for CSP compliance).
**Security features:**
- CSRF tokens on all state-changing forms
- Jinja2 auto-escaping enabled
- All user input sanitized via `html.escape()` before display
- Path traversal protection via `validate_file_path()`
---
## Deployment
### Production Checklist
Before deploying to production:
| Item | How |
|---|---|
| Set API key | `MCP_API_KEY=<strong-random-key>` |
| Use non-root user | Built-in: container runs as `appuser` (UID 1000) |
| Set resource limits | Default: 2 CPU / 4 GB RAM in `docker-compose.yml` |
| Enable structured logging | `LOG_FORMAT=json` for log aggregation |
| Configure Redis | `REDIS_URL=redis://<host>:6379/0` for task queue and caching |
| Set workspace path | `REVERSECORE_WORKSPACE=/path/to/isolated/directory` |
| Review rate limits | `REVERSECORE_RATE_LIMIT=60` (requests/min, adjust as needed) |
| Enable sandbox | `REVERSECORE_SANDBOX_ENABLED=true` for dynamic analysis isolation |
### Health Checks
The server provides HTTP health check endpoints for orchestration:```bash
# Liveness (always 200 if process is running)
curl http://localhost:8000/health/live
# Readiness (checks tool availability)
curl http://localhost:8000/health/ready
# Full health (requires API key if configured)
curl -H "X-API-Key: <key>" http://localhost:8000/health
Эти конечные точки освобождены от аутентификации по API-ключу, чтобы балансировщики нагрузки и оркестраторы контейнеров могли их проверять.
Docker-образ включает встроенную инструкцию HEALTHCHECK, которая проверяет TCP-подключение к порту 8000 каждые 30 секунд. Docker и Kubernetes автоматически перезапускают нездоровые контейнеры.
Требуемый CLI-инструмент не установлен в окружении.
Решение: Если вы используете Docker, убедитесь, что инструмент присутствует в базовом образе:```bash docker exec reversecore-mcp-arm64 which r2 yara binwalk tsk_recover gdb
Если вы используете локальную установку Python, установите недостающий инструмент:```bash
# macOS
brew install radare2 yara binwalk sleuthkit
# Ubuntu/Debian
apt install radare2 yara binwalk sleuthkit
Анализ превысил установленное время ожидания.
Решение: Увеличьте время ожидания:```bash export REVERSECORE_DEFAULT_TOOL_TIMEOUT=300 # 5 minutes
Для больших бинарных файлов (>100 МБ) рассмотрите возможность использования вариантов быстрого сканирования:
- `run_capa_quick` вместо `run_capa`
- `detect_packer` вместо `detect_packer_deep`
</details>
<details>
<summary><b>Ошибка обхода пути (RCMCP-E302)</b></summary>
Вы указали файл за пределами рабочего каталога.
**Решение:** Сначала скопируйте файл в рабочий каталог:```
copy_to_workspace("/path/to/file.exe")
Или смонтируйте дополнительные каталоги в режиме только для чтения:```bash export REVERSECORE_READ_DIRS=/opt/samples,/mnt/evidence
</details>
<details>
<summary><b>Контейнер Docker не запускается на Apple Silicon</b></summary>
Убедитесь, что вы используете профиль ARM64:```bash
docker compose --profile arm64 up -d
Или используйте скрипт автоматического обнаружения:```bash ./scripts/run-docker.sh
</details>
<details>
<summary><b>Отказ в подключении к Redis</b></summary>
Очередь задач требует запущенного экземпляра Redis.
**Решение:** Запустите Redis вместе с основным сервисом:```bash
docker compose --profile arm64 up -d # Starts both reversecore and redis
Или отключите функции, зависящие от Redis, не задавая REDIS_URL.
Обычно это означает, что функция не была проанализирована заранее.
Решение: Запустите анализ перед декомпиляцией:``` Radare2_analyze_binary("sample.exe") Radare2_decompile_function("sample.exe", "main")
</details>
---
## FAQ
<details>
<summary><b>Заменяет ли этот проект Ghidra или IDA Pro?</b></summary>
Нет. Этот проект — дополнение, а не замена. Для декомпиляции он использует r2ghidra (движок декомпилятора Ghidra, встроенный в Radare2). Он не предоставляет графический интерфейс и не имеет интерактивного рабочего процесса анализа полноценного дизассемблера. Его цель — позволить ИИ-ассистентам выполнять задачи анализа программно.
</details>
<details>
<summary><b>Нужна ли отдельная установка Ghidra или JDK?</b></summary>
Нет. Плагин r2ghidra встраивает движок декомпилятора Ghidra непосредственно в Radare2. Ни JDK, ни установки Ghidra, ни файлов проекта Ghidra не требуется. Достаточно `r2` со скомпилированным плагином `r2ghidra`.
</details>
<details>
<summary><b>Какие MCP-клиенты поддерживаются?</b></summary>
Любой клиент, реализующий спецификацию [Model Context Protocol](https://modelcontextprotocol.io/). Протестировано с: Claude Desktop, Cursor, Windsurf и Google Antigravity. Сервер поддерживает оба транспорта — stdio и HTTP/SSE.
</details>
<details>
<summary><b>Можно ли анализировать Windows PE-файлы в Linux/macOS?</b></summary>
Да. Статический анализ (дизассемблирование, декомпиляция, извлечение строк, извлечение IOC, сканирование YARA) работает с любым форматом файлов независимо от ОС хоста. Динамический анализ (эмуляция, фаззинг) может иметь ограничения в зависимости от целевой архитектуры.
</details>
<details>
<summary><b>Насколько безопасно анализировать вредоносное ПО с помощью этого инструмента?</b></summary>
Docker-контейнер обеспечивает изоляцию: пользователь без прав root, отсутствие сети по умолчанию в CI, ограничения ресурсов. Для анализа живого вредоносного ПО мы рекомендуем запускать в выделенной виртуальной машине или использовать функцию песочницы (`REVERSECORE_SANDBOX_ENABLED=true`). Инструменты статического анализа (r2, YARA, strings) никогда не выполняют целевой бинарный файл.
</details>
<details>
<summary><b>Каков максимальный размер файла?</b></summary>
Ограничения по умолчанию:
- Загрузка: 100 МБ (`MAX_UPLOAD_SIZE`)
- Разбор LIEF: 1 ГБ (`REVERSECORE_LIEF_MAX_FILE_SIZE`)
- Вывод инструментов: 10 МБ (`REVERSECORE_MAX_OUTPUT_SIZE`)
Все ограничения настраиваются через переменные окружения.
</details>
---
## Благодарности
Этот проект построен на основе работы многих проектов с открытым исходным кодом:
| Проект | Роль в Reversecore MCP |
|---|---|
| [Radare2](https://radare.org/) | Дизассемблирование, эмуляция, анализ бинарных файлов |
| [r2ghidra](https://github.com/radareorg/r2ghidra) | Движок декомпилятора Ghidra для Radare2 |
| [FastMCP](https://github.com/jlowin/fastmcp) | Фреймворк MCP-сервера |
| [YARA](https://virustotal.github.io/yara/) | Сопоставление с образцом для обнаружения вредоносного ПО |
| [LIEF](https://lief-project.github.io/) | Разбор форматов бинарных файлов (PE, ELF, Mach-O) |
| [CAPA](https://github.com/mandiant/capa) | Обнаружение возможностей Mandiant FLARE |
| [angr](https://angr.io/) | Движок символьного выполнения |
| [Capstone](https://www.capstone-engine.org/) | Фреймворк дизассемблирования |
| [Keystone](https://www.keystone-engine.org/) | Фреймворк ассемблирования |
| [pwntools](https://github.com/Gallopsled/pwntools) | Набор инструментов для разработки эксплойтов |
| [ROPgadget](https://github.com/JonathanSalwan/ROPgadget) | Поиск ROP-гаджетов |
| [Volatility3](https://github.com/volatilityfoundation/volatility3) | Фреймворк криминалистического анализа памяти |
| [Scapy](https://scapy.net/) | Анализ сетевых пакетов |
| [Sleuth Kit](https://sleuthkit.org/) | Набор инструментов криминалистического анализа дисков |
| [Binwalk](https://github.com/ReFirmLabs/binwalk) | Анализ прошивок |
| [Detect It Easy](https://github.com/horsicq/DIE-engine) | Обнаружение упаковщиков/компиляторов |
---
## Лицензия
MIT — подробнее см. в [LICENSE](https://github.com/sjkim1127/reversecore_mcp/blob/HEAD/LICENSE).
---
<div align="center">
**[GitHub](https://github.com/sjkim1127/Reversecore_MCP)** · **[PyPI](https://pypi.org/project/reversecore-mcp/)** · **[FastMCP Docs](https://github.com/jlowin/fastmcp)** · **[MCP Spec](https://modelcontextprotocol.io/)** · **[Radare2](https://radare.org/)** · **[YARA](https://virustotal.github.io/yara/)**
</div>
| Domain | What you can do |
|---|
| Static analysis | Disassembly, decompilation (r2ghidra), binary parsing (LIEF), packer detection (DIE), capability detection (CAPA), string extraction, firmware scanning (binwalk) |
| Dynamic & symbolic | ESIL emulation, angr symbolic execution, taint analysis, fuzzing harness generation |
| Malware analysis | IOC extraction, YARA scanning, dormant backdoor detection, adaptive vaccine generation, autonomous vulnerability hunting |
| Vulnerability research | Dangerous API detection, ROP gadget discovery, heap exploit analysis, crash triage, PoC generation |
| Digital forensics | Memory forensics (Volatility3), PCAP analysis (Scapy), disk forensics (Sleuth Kit), artifact correlation |
| Source code audit | Python AST scanning, C/C++ regex pattern scanning |
| Reporting | Session-based reports with MITRE ATT&CK mapping, SIGMA rule generation, VEX reports, email delivery |
| Variable | Default | Description |
|---|
MCP_TRANSPORT | stdio | Режим транспорта: stdio или http |
REVERSECORE_WORKSPACE | ./ (cwd) | Каталог рабочей области анализа |
REVERSECORE_READ_DIRS | "" | Список дополнительных каталогов только для чтения через запятую |
REVERSECORE_STRICT_PATHS | false | Вызывать ошибки для отсутствующих путей вместо предупреждений |
REVERSECORE_STRUCTURED_ERRORS | false | Включить структурированные ответы об ошибках с кодами ошибок |
REVERSECORE_DEFAULT_TOOL_TIMEOUT | 120 | Тайм-аут выполнения инструмента по умолчанию (в секундах) |
REVERSECORE_MAX_OUTPUT_SIZE | 10000000 | Максимальный размер вывода для инструментов (байт) |
| Variable | Default | Description |
|---|
MCP_HOST | 0.0.0.0 | Сетевой интерфейс для привязки (автоматически заменяется на 127.0.0.1 при отсутствии API-ключа) |
MCP_PORT | 8000 | Порт для HTTP-сервера |
MCP_API_KEY | (не задано) | API-ключ для HTTP-аутентификации (X-API-Key или Authorization: Bearer) |
REVERSECORE_RATE_LIMIT | 60 | Максимум запросов в минуту (только для HTTP-режима, через slowapi) |
MAX_UPLOAD_SIZE | 100000000 | Максимальный размер загрузки (по умолчанию 100 МБ) |
FILE_RETENTION_MINUTES | 1440 | Срок хранения загруженных файлов (по умолчанию 24 часа) |
| Variable | Default | Description |
|---|
REVERSECORE_R2_POOL_SIZE | 3 | Количество подключений Radare2 в пуле |
REVERSECORE_R2_POOL_TIMEOUT | 30 | Тайм-аут получения подключения из пула |
REVERSECORE_R2_EXTENSIONS | "" | Список классов расширений r2 через запятую (module:ClassName) |
REVERSECORE_GHIDRA_MAX_PROJECTS | 3 | Максимальное количество кэшируемых проектов декомпилятора r2ghidra |
REVERSECORE_GHIDRA_EXTENSIONS | "" | Список классов расширений Ghidra через запятую |
MAX_EMULATION_INSTRUCTIONS | 1000 | Максимальное количество инструкций эмуляции ESIL |
| Variable | Default | Description |
|---|
REVERSECORE_SANDBOX_ENABLED | false | Включить выполнение в песочнице для инструментов динамического анализа |
REVERSECORE_SANDBOX_MODE | auto | Режим песочницы: auto, host, container, disabled |
REVERSECORE_SANDBOX_DOCKER_IMAGE | reversecore-sandbox:latest | Docker-образ для выполнения в песочнице |
REVERSECORE_SANDBOX_CPU_LIMIT | 1.0 | Лимит ядер CPU для контейнеров песочницы |
REVERSECORE_SANDBOX_MEMORY_LIMIT | 512m | Лимит памяти для контейнеров песочницы |
REVERSECORE_SANDBOX_PIDS_LIMIT | 100 | Лимит PID для контейнеров песочницы |
REVERSECORE_SANDBOX_USER | nobody | Пользователь без root-прав для выполнения в песочнице |
| Variable | Default | Description |
|---|
REDIS_URL | redis://localhost:6379/0 | URL Redis для очереди задач и кэширования результатов |
MEMORY_DB_PATH | ~/.reversecore_mcp/memory.db | Путь к SQLite-базе данных памяти ИИ |
REVERSECORE_LIEF_MAX_FILE_SIZE | 1000000000 | Максимальный размер файла для анализа LIEF (1 ГБ) |
| Variable | Default | Description |
|---|
LOG_LEVEL | INFO | Уровень детализации журнала: DEBUG, INFO, WARNING, ERROR |
LOG_FILE | <tempdir>/reversecore/app.log | Путь к файлу журнала |
LOG_FORMAT | human | Формат журнала: human (читаемый) или json (структурированный) |
| Контроль | Реализация |
|---|
| Отсутствие shell-инъекций | Все вызовы subprocess используют списки аргументов, а не строки shell (execution.py) |
| Предотвращение обхода пути | validate_file_path() и validate_binary_path() разрешают символические ссылки и ограничивают доступ рабочим каталогом (validators.py) |
| Смягчение TOCTOU | Флаг bypass_cache=True повторно проверяет пути для предотвращения состояний гонки |
| Очистка входных данных | Все параметры очищаются перед выполнением (security.py) |
| Защита от CSRF | Формы панели управления требуют проверки CSRF на основе токенов (dashboard/__init__.py) |
| Контроль | Реализация |
|---|
| Аутентификация, устойчивая к атакам по времени | secrets.compare_digest() для сравнения API-ключей (web/auth.py) |
| Ограниченные векторы аутентификации | Принимаются только заголовки X-API-Key и Authorization: Bearer; без параметров запроса и cookie |
| Резервный режим только через loopback | Без MCP_API_KEY доступ по HTTP ограничен адресом 127.0.0.1 (web/middleware.py) |
| Ограничение частоты запросов | Настраиваемые поминутные лимиты через slowapi |
| Заголовки безопасности | HSTS, X-Content-Type-Options, X-Frame-Options, CSP во всех HTTP-ответах (web/middleware.py) |
Минимизированный /health | Публичная конечная точка возвращает только {"status": "alive"}; подробности доступны после аутентификации (web/endpoints.py) |
| Опциональная песочница на основе контейнеров для инструментов динамического анализа |
| Контроль | Реализация |
|---|
| Сканирование секретов | Gitleaks запускается при каждом коммите (pre-commit хук + CI) |
| SAST | Bandit сканирует весь Python-код при каждом коммите |
| CodeQL | Статический анализ GitHub CodeQL при каждом push в main |
| Аудит зависимостей | pip-audit при каждом push — без непроверенных CVE |
| Сканирование контейнеров | Trivy сканирует Docker-образы на наличие уязвимостей (от LOW до CRITICAL) |
| Контроль безопасности эксплойтов | Шаблоны POC сканируются с помощью Bandit; фаззинг DAST на основе Hypothesis; проверяется изоляция контейнеров |
| Маркер | Назначение |
|---|
@pytest.mark.unit | Быстрые модульные тесты |
@pytest.mark.integration | Тесты, требующие Docker или внешних инструментов |
@pytest.mark.slow | Длительные тесты |
@pytest.mark.benchmark | Бенчмарки производительности |
@pytest.mark.security | Тесты валидации границ безопасности |
| Сервис | Профиль | Описание |
|---|
reversecore-mcp | default, x86 | Intel/AMD x86_64 |
reversecore-mcp-arm64 | arm64, macos | Apple Silicon ARM64 |
redis | все профили | Redis 7 Alpine для очереди задач и кэширования |
| Компонент | Минимум | Рекомендуется |
|---|
| ЦП | 4 ядра | 8+ ядер |
| ОЗУ | 8 ГБ | 16 ГБ |
| Хранилище | 20 ГБ | 50 ГБ SSD |
| ОС | Linux / macOS | Среда Docker (любая ОС) |
| Docker | 20.10+ | 24.0+ |
| Python (локальный режим) | 3.10 | 3.11 или 3.12 |
| Исключение | Код | Тип | Когда |
|---|
ReversecoreError | RCMCP-E000 | UNKNOWN_ERROR | Базовый класс для всех ошибок |
ValidationError | RCMCP-E001 | VALIDATION_ERROR | Некорректный ввод, неверные параметры |
ExecutionTimeoutError | RCMCP-E002 | TIMEOUT_ERROR | Инструмент превысил время ожидания |
ToolNotFoundError | RCMCP-E003 | TOOL_ERROR | Требуемый CLI-инструмент не установлен |
OutputLimitExceededError | RCMCP-E004 | OUTPUT_ERROR | Вывод превысил максимальный размер |
ToolExecutionError | RCMCP-E005 | EXECUTION_ERROR | Подпроцесс вернул ненулевой код возврата |
BinaryAnalysisError | RCMCP-E100 | BINARY_ANALYSIS_ERROR | Общий сбой анализа бинарного файла |
DecompilationError | RCMCP-E101 | DECOMPILATION_ERROR | Не удалась декомпиляция r2ghidra |
DisassemblyError | RCMCP-E102 | DISASSEMBLY_ERROR | Сбой дизассемблирования Radare2 |
StructureRecoveryError | RCMCP-E103 | STRUCTURE_RECOVERY_ERROR | Не удалось восстановить структуры C |
SignatureGenerationError | RCMCP-E104 | SIGNATURE_GENERATION_ERROR | Сбой генерации YARA/сигнатур |
EmulationError | RCMCP-E105 | EMULATION_ERROR | Сбой эмуляции ESIL |
ToolTimeoutError | RCMCP-E200 | TOOL_TIMEOUT_ERROR | Внешний инструмент превысил время ожидания |
GhidraConnectionError | RCMCP-E201 | GHIDRA_CONNECTION_ERROR | Проблема с подключением r2ghidra |
Radare2Error | RCMCP-E202 | RADARE2_ERROR | Сбой выполнения команды Radare2 |
WorkspaceError | RCMCP-E300 | WORKSPACE_ERROR | Ошибка доступа к файлам рабочей области |
SecurityViolationError | RCMCP-E301 | SECURITY_VIOLATION | Нарушение политики безопасности |
PathTraversalError | RCMCP-E302 | PATH_TRAVERSAL | Обнаружена попытка обхода пути |
| Уровень | Бэкенд | Формат ключа | TTL | Назначение |
|---|
| L1 | Redis | ghidra:decompile:{file_hash}:{function_address}:{decompiler} | 1 час (3600s) | Быстрый, общий для сессий |
| L2 | SQLite | Таблица decompilation_cache | Постоянный | Переживает перезапуски Redis |