MCP-сервер для ИИ-агентов: автоматизированный реверс-инжиниринг, анализ малвари, форензика и vulnerability research на Radare2/YARA/LIEF.
Платформа для бинарного анализа на базе символьного исполнения: способна автоматически найти входные данные, которые проведут программу …
Продвинутая платформа для DFIR (цифровая криминалистика и реагирование на инциденты) — позволяет одновременно "охотиться" на угрозы …
Набор CLI-утилит для анализа файловых систем и образов дисков. Поддерживает NTFS, FAT, EXT2/3/4, HFS+, UFS. Извлечение …
Инфраструктура виртуальной машинной интроспекции для мониторинга состояния гостевых систем на уровне гипервизора KVM.
pip install reversecore-mcp
![]()
ИИ‑усиленный обратный инжиниринг и анализ безопасности с использованием Model Context Protocol
MCP‑сервер, который предоставляет ИИ‑ассистентам, таким как Claude и Cursor, возможность выполнять обратный инжиниринг, анализ вредоносного ПО, исследование уязвимостей, цифровую криминалистику и аудит исходного кода на естественном языке.
Reversecore MCP — это сервер Протокола контекста модели, который объединяет 120 инструментов анализа в один интерфейс, который могут вызывать AI-ассистенты через естественный язык.
Вместо изучения синтаксиса командной строки для дюжины разных инструментов, вы описываете, что хотите:
"Decompile the main function of this malware sample, extract all network IOCs,
map the behavior to MITRE ATT&CK, and generate a triage report."
AI-ассистент разбивает это на вызовы инструментов:
r2_decompile("sample.exe", "main")
→ extract_iocs("sample.exe")
→ add_mitre_technique(technique_id="T1071.001", ...)
→ create_analysis_report(template_type="quick_triage")
Каждый инструмент возвращает структурированный ToolResult (либо ToolSuccess, либо ToolError) с типизированными данными, которые ИИ может использовать для рассуждений, цепочки последующих запросов или отображения пользователю.
| Домен | Что вы можете сделать |
|---|---|
| Статический анализ | Дизассемблирование, декомпиляция (r2ghidra), разбор бинарников (LIEF), обнаружение упаковщиков (DIE), обнаружение возможностей (CAPA), извлечение строк, сканирование прошивки (binwalk) |
| Динамический и символьный | Эмуляция ESIL, символьное выполнение angg, анализ замусоривания, создание harness для фаззинга |
| Анализ вредоносного ПО | Извлечение IOC, сканирование YARA, обнаружение спящих бекдоров, генерация адаптивных вакцин, автономный поиск уязвимостей |
| Исследование уязвимостей | Обнаружение опасных API, поиск гаджетов ROP, анализ эксплуатации кучи, triage сбоев, генерация PoC |
| Цифровая криминалистика | Криминалистика памяти (Volatility3), анализ PCAP (Scapy), криминалистика диска (Sleuth Kit), корреляция артефактов |
| Аудит исходного кода | Сканирование AST Python, сканирование шаблонов regex C/C++ |
| Отчетность | Отчеты, основанные на сеансах, с сопоставлением MITRE ATT&CK, генерация правил SIGMA, отчеты VEX, доставка по email |
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) │
└──────────────────────────────────────────────────────┘
Директория 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 |
Хранилище памяти ИИ на основе асинхронного SQLite для сохранения результатов анализа между сеансами |
mitre_mapper.py |
Механизм сопоставления идентификаторов техник MITRE ATT&CK |
evidence.py |
Система классификации доказательств: OBSERVED, INFERRED, POSSIBLE |
resilience.py |
Шаблоны декораторов повторов, прерывателя цепи и таймаута |
task_queue.py |
Фоновая очередь задач через Redis + arq |
extension_registry.py |
Регистрация плагинов и управление их жизненным циклом |
arch_registry.py |
Сопоставление множественных архитектур (x86, x86_64, ARM32, ARM64, MIPS, RISC-V, PPC → arch/bits/registers r2) |
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 |
Сканер уязвимостей на основе regex C/C++ |
sast/rule_manager.py |
Загрузка и управление правилами SAST |
Каждый инструмент возвращает структурированный ToolResult — либо ToolSuccess с типизированными data, либо ToolError с кодом ошибки RCMCP-E*. Инструменты организованы в 8 плагинов.
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 1 | run_strings |
strings CLI |
Извлечение 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) | Обнаружение возможностей — «шифрует данные», «создаёт persistence» и т.д. |
| 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 (Run-Time Type Information) |
| 14 | diff_binaries |
Radare2 | Семантическое различие бинарников между двумя версиями файла |
| 15 | analyze_variant_changes |
Radare2 | Анализ изменений между вариантами бинарника |
| 16 | match_libraries |
Radare2 | Идентификация статически связанных библиотек по отпечатку функций |
| 17 | patch_diff_1day |
Radare2 + heuristics | Автоматизированный анализ диффа патча для исследования уязвимостей типа 1‑день |
| 18 | analyze_patch_diff_auto |
Radare2 + inference | Автоматизированный вывод уязвимостей из диффа патча |
| 19 | emulate_binary |
Radare2 ESIL | Эмуляция кода с трассировкой регистров/памяти через 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 | Анализ потока данных с отслеживанием загрязнения от источников к стокам |
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 25 | audit_source_code |
AST + Regex | Сканер Python AST + регулярок C/C++ для поиска опасных паттернов |
Операции с файлами (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 и т.д.) |
Управление памятью ИИ (11 инструментов)
Эти инструменты позволяют ИИ сохранять и извлекать результаты анализа между сессиями с использованием асинхронной базы данных 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 используют потокобезопасный пул соединений (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 |
Обнаружение криптографических констант (S‑бокс AES и т.д.) |
| 74 | Radare2_find_gadgets |
Найти гаджеты ROP/JOP |
| 75 | Radare2_calculate_entropy |
Вычислить энтропию по секциям |
| # | Инструмент | Бэкенд | Описание |
|---|---|---|---|
| 76 | dormant_detector |
Radare2 + heuristics | Найти скрытые бэкдоры, сиротские функции, временные бомбы, логические бомбы |
| 77 | adaptive_vaccine |
YARA + Radare2 | Генерировать правила YARA для обнаружения + бинарные патчи для нейтрализации угроз |
| 78 | vulnerability_hunter |
Radare2 + analysis | Обнаружить опасные шаблоны 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 + heuristics | Анализ эксплуатации кучи (UAF, double‑free, переполнение) |
Криминалистика памяти (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 | Анализ таблицы MFT NTFS |
| 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 |
Custom parsers | Собрать историю браузера, кусты реестра, журналы событий, prefetch |
| 103 | artifact_correlate_ioc |
Custom parsers | Коррелировать артефакты с известными IOC |
| 104 | artifact_generate_yara |
YARA | Генерировать правила YARA на основе шаблонов артефактов |
| 105 | artifact_timeline |
Custom parsers | Построить хронологию из нескольких источников артефактов |
| 106 | artifact_report |
Custom parsers | Сгенерировать отчёт по анализу артефактов |
| # | Инструмент | Описание |
|---|---|---|
| 107 | get_system_time |
Получить метку времени сервера (предотвращает галлюцинации дат у ИИ) |
| 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 |
Добавлять помеченные заметки (обнаружение, предупреждение, поведение) |
| 116 | add_mitre_technique |
Документировать идентификаторы техник MITRE ATT&CK |
| 117 | set_severity |
Установить уровень серьёзности сеанса (низкий/средний/высокий/критический) |
| 118 | create_analysis_report |
Сформировать отчёт в 4 режимах: full_analysis, quick_triage, ioc_summary, executive_brief |
| 119 | generate_vex_report |
Сгенерировать отчёт VEX (обмен информацией о эксплуатируемости уязвимостей) |
| 120 | generate_sigma_rule |
Сгенерировать правила SIGMA для обнаружения |
Подсказки представляют собой готовые рабочие процессы анализа, которые настраивают ИИ с использованием структурированной личности, последовательности использования инструментов по шагам и правил классификации доказательств. Вы активируете их, ссылаясь на имя подсказки в своём ИИ‑клиенте.
| Подсказка | Случай использования |
|---|---|
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 |
Анализ ransomware: анализ шифрования, оценка восстановления ключа |
code_similarity_mode |
Сравнение бинарников на сходство кода и общее происхождение |
| Подсказка | Случай использования |
|---|---|
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 |
Автономный конвейер поиска уязвимостей |
| Подсказка | Случай использования |
|---|---|
taint_analysis_mode |
Анализ замусоривания потока данных: автоматизированное обнаружение пути от источника к приемнику |
heap_exploit_mode |
Анализ эксплуатации кучи и генерация PoC |
fuzzing_mode |
Настройка кампании фаззинга и оценка сбоев |
patch_diff_auto_mode |
Автоматический дифф патчей для исследования уязвимостей одного дня |
cve_discovery_pipeline_mode |
Полный конвейер обнаружения CVE: от диффа патча до рабочего эксплойта |
| Подсказка | Случай использования |
|---|---|
game_analysis_mode |
Анализ клиента игры: обнаружение античита, обратный инженеринг протокола, проверка памяти |
report_generation_mode |
Структурированный рабочий процесс сеанса с сопоставлением техник MITRE ATT&CK |
Как работают промпты: Каждый промпт «подготавливает» ИИ с помощью структурированного анализа персоны. Он включает контрольные точки цепочки мыслей (Chain-of-Thought) (где ИИ должен остановиться и оценить перед продолжением) и правила классификации доказательств, которые не позволяют ИИ выдавать спекуляции за факт. Каждое обнаружение должно быть помечено как
OBSERVED(прямо проверено),INFERRED(логически выведено из статического анализа) илиPOSSIBLE(требует дальнейшей проверки).
Ресурсы представляют собой конечные точки только для чтения данных, к которым клиенты ИИ могут обращаться через шаблоны URI. Они дополняют инструменты, предоставляя структурированные данные без необходимости явного вызова инструментов.
| URI | Описание |
|---|---|
reversecore://guide |
Руководство по использованию инструмента с правилами путей к файлам и лучшими практиками |
reversecore://guide/structures |
Техническое руководство по восстановлению структур и анализу перекрёстных ссылок |
reversecore://tools |
Полная документация по всем 120 зарегистрированным инструментам |
reversecore://logs |
Журналы приложения (последние 100 строк) |
Эти URI разрешаются на каждый бинарник и по требованию вызывают соответствующие инструменты анализа:
| Шаблон URI | Описание |
|---|---|
reversecore://{filename}/strings |
Извлечь все строки из бинарника |
reversecore://{filename}/iocs |
Извлечь IOC (IP, URL, e-mail, хеши) |
reversecore://{filename}/func/{address}/code |
Декомпилированный псевдо-C код функции |
reversecore://{filename}/func/{address}/asm |
Дизассемблирование функции |
reversecore://{filename}/func/{address}/cfg |
Граф управления потоком в формате Mermaid |
reversecore://{filename}/functions |
Список всех функций в бинарнике |
reversecore://{filename}/dormant_detector |
Результаты анализа спящего детектора |
pip install reversecore-mcp
reversecore-mcp
Требования: Radare2 должен быть установлен в вашей системе (
r2 --version). YARA устанавливается автоматически черезyara-python.
Все движки анализа (Radare2, r2ghidra, YARA, Binwalk, Sleuth Kit, GDB и др.) предустановлены:
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
git clone https://github.com/sjkim1127/Reversecore_MCP.git
cd Reversecore_MCP
./scripts/run-docker.sh # auto-detects Intel / Apple Silicon
Или вручную:
docker compose --profile x86 up -d # Intel/AMD
docker compose --profile arm64 up -d # Apple Silicon (M1/M2/M3)
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 прямо в работающий контейнер. Нулевая задержка запуска, постоянная память и полная доступность инструментов.
{
"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.
Для потоковой передачи по сети (Server-Sent Events):
{
"mcpServers": {
"Reversecore_MCP": {
"url": "http://localhost:8000/mcp/sse"
}
}
}
Запускает свежий изолированный контейнер для каждой сессии:
🍎 macOS
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/Users/YOUR_USERNAME/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
🐧 Linux
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "/home/YOUR_USERNAME/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
🪟 Windows
{
"mcpServers": {
"reversecore": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "C:/samples:/app/workspace",
"-e", "REVERSECORE_WORKSPACE=/app/workspace",
"-e", "MCP_TRANSPORT=stdio",
"ghcr.io/sjkim1127/reversecore_mcp:latest"
]
}
}
}
⚠️ Важно — Пути файлов внутри Docker
Ваша локальная папка смонтирована в
/app/workspaceвнутри контейнера. Всегда ссылайтесь на файлы только по имени файла, а не по вашему полному локальному пути.
❌ Неправильно ✅ Правильно r2_decompile("/Users/john/samples/mal.exe")r2_decompile("mal.exe")
Все настройки можно задать через переменные окружения или файл .env (см. .env.example). Настройки управляются через Pydantic BaseSettings с префиксом REVERSECORE_.
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
MCP_TRANSPORT |
stdio |
Режим транспорта: stdio или http |
REVERSECORE_WORKSPACE |
./ (текущая директория) |
Каталог рабочей области анализа |
REVERSECORE_READ_DIRS |
"" |
Список дополнительных каталогов только для чтения, разделённых запятыми |
REVERSECORE_STRICT_PATHS |
false |
Генерировать ошибки при отсутствующих путях вместо предупреждений |
REVERSECORE_STRUCTURED_ERRORS |
false |
Включить структурированные ответы об ошибках с кодами ошибок |
REVERSECORE_DEFAULT_TOOL_TIMEOUT |
120 |
Таймаут выполнения инструмента по умолчанию в секундах |
REVERSECORE_MAX_OUTPUT_SIZE |
10000000 |
Максимальный размер вывода инструментов (в байтах) |
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
MCP_HOST |
0.0.0.0 |
Интерфейс хоста для привязки (автоматически переопределяется на 127.0.0.1, если нет API ключа) |
MCP_PORT |
8000 |
Порт для HTTP сервера |
MCP_API_KEY |
(unset) | Ключ API для аутентификации HTTP (X-API-Key или Authorization: Bearer) |
REVERSECORE_RATE_LIMIT |
60 |
Максимальное число запросов в минуту (только режим HTTP, через slowapi) |
MAX_UPLOAD_SIZE |
100000000 |
Максимальный размер загружаемого файла (по умолчанию 100 МБ) |
FILE_RETENTION_MINUTES |
1440 |
Срок хранения загруженных файлов (по умолчанию 24 ч) |
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
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 |
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
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 для выполнения в песочнице |
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
REDIS_URL |
redis://localhost:6379/0 |
URL Redis для очереди задач и кэширования результатов |
MEMORY_DB_PATH |
~/.reversecore_mcp/memory.db |
Путь к базе данных SQLite памяти AI |
REVERSECORE_LIEF_MAX_FILE_SIZE |
1000000000 |
Максимальный размер файла для разбора LIEF (1 ГБ) |
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
LOG_LEVEL |
INFO |
Уровень детализации логов: DEBUG, INFO, WARNING, ERROR |
LOG_FILE |
<tempdir>/reversecore/app.log |
Путь к файлу лога |
LOG_FORMAT |
human |
Формат лога: human (читаемый) или json (структурированный) |
| Переменная | Значение по умолчанию | Описание |
|---|---|---|
REVERSECORE_PLUGIN_DIRS |
"" |
Список через запятую директорий для сканирования в поиске плагинов расширений |
REVERSECORE_SAST_RULES_PATH |
"" |
Путь к файлу пользовательских правил SAST в формате YAML |
Безопасность реализована в виде защиты в глубине, с защитой на нескольких уровнях:
| Контроль | Реализация |
|---|---|
| Отсутствие инъекции оболочки | Все вызовы subprocess используют список аргументов, никогда не строки оболочки (execution.py) |
| Предотвращение обхода пути | Функции validate_file_path() и validate_binary_path() разрешают символические ссылки и ограничивают доступ рабочей областью (validators.py) |
| Смягчение TOCTOU | Флаг bypass_cache=True повторно проверяет пути для предотвращения условий гонки |
| Очистка ввода | Все параметры очищаются перед выполнением (security.py) |
| Защита от CSRF | Формы дашборда требуют валидации CSRF на основе токенов (dashboard/__init__.py) |
| Контроль | Реализация |
|---|---|
| Аутентификация, безопасная против timing-атак | secrets.compare_digest() для сравнения ключа API (web/auth.py) |
| Ограниченные векторы аутентификации | Принимаются только заголовки X-API-Key и Authorization: Bearer; параметры запроса и cookies не используются |
| Fallback только на 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) |
Сведённый к минимуму endpoint /health |
Публичный эндпоинт возвращает только {"status": "alive"}; детали доступны только после аутентификации (web/endpoints.py) |
| Контроль | Реализация |
|---|---|
| Выполнение без прав root | Запуск от пользователя appuser (UID 1000) с минимальными возможностями |
| Ограничения ресурсов | Docker Compose enforces limits CPU (2.0) и памяти (4 ГБ) |
| Изоляция песочницы | Опциональная изоляция на основе контейнеров для динамических аналитических инструментов |
| Control | Implementation |
|---|---|
| Сканирование секретов | Gitleaks запускается при каждом коммите (pre-commit хук + CI) |
| SAST | Bandit сканирует весь Python‑код при каждом коммите |
| CodeQL | GitHub CodeQL статический анализ при каждом пуше в main |
| Аудит зависимостей | pip-audit при каждом пуше — нет непроверенных CVE |
| Сканирование контейнеров | Trivy сканирует Docker‑образы на уязвимости (от LOW до CRITICAL) |
| Шлюз безопасности эксплойтов | POC‑шаблоны сканируются Bandit; фаззинг DAST через Hypothesis; проверяется изоляция контейнера |
Все 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
# 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
Статус тестов:
- ✅ 1 957 unit tests проходят на Python 3.10 / 3.11 / 3.12
- 📊 87% покрытия кода (минимум 80% обеспечивается в CI)
- 🔒 Нулевые выводы Bandit
- ⚡ Полностью асинхронный набор тестов через pytest-asyncio
Маркеры тестов:
| Маркер | Назначение |
|---|---|
@pytest.mark.unit |
Быстрые unit‑тесты |
@pytest.mark.integration |
Тесты, требующие Docker или внешних инструментов |
@pytest.mark.slow |
Долгоrunning тесты |
@pytest.mark.benchmark |
Производительные бенчмарки |
@pytest.mark.security |
Тесты проверки границ безопасности |
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
Следующие хуки запускаются автоматически при каждом коммите:
Каждый пуш в 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 минут.
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 секунд.
Три сервиса с профилями, специфичными для архитектуры:
| Service | Profile | Description |
|---|---|---|
reversecore-mcp |
default, x86 |
Intel/AMD x86_64 |
reversecore-mcp-arm64 |
arm64, macos |
Apple Silicon ARM64 |
redis |
all profiles | Redis 7 Alpine для очереди задач и кеширования |
Ограничения ресурсов: 2,0 ядра CPU, 4 ГБ памяти на контейнер.
| Component | Minimum | Recommended |
|---|---|---|
| CPU | 4 ядра | 8+ ядер |
| RAM | 8 ГБ | 16 ГБ |
| Хранилище | 20 ГБ | 50 ГБ SSD |
| ОС | Linux / macOS | Среда Docker (любая ОС) |
| Docker | 20.10+ | 24.0+ |
| Python (локальный режим) | 3.10 | 3.11 или 3.12 |
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 и несут структурированные коды ошибок:
| Exception | Code | Type | When |
|---|---|---|---|
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 |
Обнаружена попытка path traversal |
Клиенты ИИ могут использовать поле error_code для программной обработки сбоев и решения, повторять ли попытку, использовать альтернативный инструмент или сообщать об ошибке пользователю.
Следуйте этому шаблону, чтобы добавить новый инструмент MCP:
# reversecore_mcp/tools/analysis/my_tool.py
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/.
git checkout -b feat/my-featurepytest, ruff check, mypy, banditПожалуйста, ознакомьтесь с руководством по contributingu по стандартам кода, соглашениям о docstring (Google-style) и чеклисту pull request.
| Документ | Описание |
|---|---|
| Руководство по установке | Подробная настройка для всех окружений |
| Руководство по архитектуре | Проект системы и детали компонентов |
| Руководство по contributingu | Стандарты кода, docstring, workflow PR |
| Руководство по тестированию | Паттерны тестов, фикстуры и покрытие |
| Справочник API | Справочник инструментов и модулей |
| Руководство пользователя | Рабочие процессы анализа |
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:
1. 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]
2. vulnerability_hunter("daemon")
→ 12 dangerous API calls, 4 exploitable patterns
3. 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..."
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:
1. diff_binaries("libfoo-1.0.so", "libfoo-1.1.so")
→ 3 functions changed, 1 new function
2. patch_diff_1day("libfoo-1.0.so", "libfoo-1.1.so")
→ Automated analysis: bounds check added at parse_header()
3. r2_decompile("libfoo-1.0.so", "parse_header")
→ Decompiled vulnerable version (no bounds check)
4. 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-бит | x86 |
x86 |
32 | eip |
esp |
| Intel/AMD 64-бит | x86_64 |
x86 |
64 | rip |
rsp |
| ARM 32-бит / Thumb | arm32 |
arm |
16, 32 | r15 |
r13 |
| ARM 64-бит (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)Многоуровневый кэш специально для результатов декомпиляции (которые дороги в вычислениях):
| Уровень | Бэкенд | Формат ключа | TTL | Назначение |
|---|---|---|---|---|
| L1 | Redis | ghidra:decompile:{file_hash}:{function_address}:{decompiler} |
1 час (3600с) | Быстрый, совместно используемый между сеансами |
| L2 | SQLite | Таблица decompilation_cache |
Постоянный | Переживает перезапуски Redis |
Импорт/Экспорт: инструменты 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"])
# Later, in a different session:
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
Хранилище: Асинхронная база данных SQLite по пути, заданному в MEMORY_DB_PATH (по умолчанию: ~/.reversecore_mcp/memory.db).
Переносимость: Используйте export_memory_store и import_memory_store для переноса всей базы данных памяти между окружениями.
При запуске в HTTP-режиме (MCP_TRANSPORT=http) веб-панель доступна по адресу http://localhost:8000/dashboard. Она предоставляет:
Стек технологий: FastAPI + шаблоны Jinja2 + HTMX (загружается локально из dashboard/static/, отсутствие зависимости от CDN для соответствия CSP).
Особенности безопасности:
- CSRF токены во всех формах, изменяющих состояние
- Автоэкранирование Jinja2 включено
- Ввод пользователя очищается через html.escape() перед отображением
- Защита от пути обхода через validate_file_path()
Перед развёртыванием в продакшене:
| Элемент | Как |
|---|---|
| Установить ключ API | MCP_API_KEY=<strong-random-key> |
| Использовать непривилегированного пользователя | Встроено: контейнер запускается от appuser (UID 1000) |
| Установить лимиты ресурсов | По умолчанию: 2 CPU / 4 GB RAM в docker-compose.yml |
| Включить структурированное логирование | LOG_FORMAT=json для агрегации логов |
| Настроить Redis | REDIS_URL=redis://<host>:6379/0 для очереди задач и кэширования |
| Установить путь рабочей области | REVERSECORE_WORKSPACE=/path/to/isolated/directory |
| Проверить лимиты скорости | REVERSECORE_RATE_LIMIT=60 (запросов/мин, при необходимости отрегулировать) |
| Включить песочницу | REVERSECORE_SANDBOX_ENABLED=true для изоляции динамического анализа |
Сервер предоставляет HTTP endpoints проверки состояния для оркестрации:
# 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 key, поэтому балансировщики нагрузки и оркестраторы контейнеров могут их опрашивать.
Образ Docker содержит встроенную инструкцию HEALTHCHECK, которая проверяет TCP-подключение к порту 8000 каждые 30 секунд. Docker и Kubernetes автоматически перезапускают нездоровые контейнеры.
Инструмент возвращает RCMCP-E003: Инструмент не найден
Необходимый CLI-инструмент не установлен в окружении.
Решение: Если используется Docker, проверьте, что инструмент присутствует в базовом образе:
docker exec reversecore-mcp-arm64 which r2 yara binwalk tsk_recover gdb
Если используется локальная установка Python, установите недостающий инструмент:
# macOS
brew install radare2 yara binwalk sleuthkit
# Ubuntu/Debian
apt install radare2 yara binwalk sleuthkit
Ошибка таймаута (RCMCP-E002 / RCMCP-E200)
Анализ превысил настроенный таймаут.
Решение: Увеличьте таймаут:
export REVERSECORE_DEFAULT_TOOL_TIMEOUT=300 # 5 minutes
Для больших бинарников (>100 МБ) рассмотрите использование быстрых вариантов сканирования:
- run_capa_quick вместо run_capa
- detect_packer вместо detect_packer_deep
Ошибка обхода пути (RCMCP-E302)
Вы сослались на файл вне рабочей директории.
Решение: Сначала скопируйте файл в рабочую директорию:
copy_to_workspace("/path/to/file.exe")
Или смонтируйте дополнительные каталоги как только для чтения:
export REVERSECORE_READ_DIRS=/opt/samples,/mnt/evidence
Контейнер Docker не запускается на Apple Silicon
Убедитесь, что вы используете профиль ARM64:
docker compose --profile arm64 up -d
Или используйте скрипт автоматического определения:
./scripts/run-docker.sh
Отказ в подключении к Redis
Очередь задач требует запущенного экземпляра Redis.
Решение: Запустите Redis вместе с основным сервисом:
docker compose --profile arm64 up -d # Starts both reversecore and redis
Или отключите функции, зависящие от Redis, не задавая переменную REDIS_URL.
Декомпиляция r2ghidra даёт пустой вывод
Это обычно означает, что функция не была проанализирована сначала.
Решение: Выполните анализ перед декомпиляцией:
Radare2_analyze_binary("sample.exe")
Radare2_decompile_function("sample.exe", "main")
Заменяет ли это Ghidra или IDA Pro?
Нет. Этот проект является дополнением, а не заменой. Он использует r2ghidra (встроенный в Radare2 движок декомпиляции Ghidra) для декомпиляции. Он не предоставляет GUI и не имеет интерактивного рабочего процесса анализа полноценного дизассемблера. Его цель — позволить ИИ-ассистентам выполнять задачи анализа программно.
Требуется ли отдельная установка Ghidra или JDK?
Нет. Плагин r2ghidra непосредственно внедряет движок декомпиляции Ghidra внутрь Radare2. Не нужен JDK, не нужна установка Ghidra, не нужны файлы проекта Ghidra. Достаточно иметь r2 со скомпилированным плагином r2ghidra.
Какие клиенты MCP поддерживаются?
Любой клиент, реализующий спецификацию Model Context Protocol. Протестировано с: Claude Desktop, Cursor, Windsurf и Google Antigravity. Сервер поддерживает как транспорт stdio, так и HTTP/SSE.
Можно ли анализировать файлы Windows PE в Linux/macOS?
Да. Статический анализ (дизассемблирование, декомпиляция, извлечение строк, извлечение IOC, сканирование YARA) работает с любым форматом файла независимо от ОС хоста. Динамический анализ (эмуляция, фаззинг) может иметь ограничения в зависимости от целевой архитектуры.
Насколько безопасно анализировать вредоносное ПО с помощью этого инструмента?
Контейнер Docker обеспечивает изоляцию: пользователь без прав root, по умолчанию без сети в CI, ограничения ресурсов. Для анализа живого вредоносного ПО мы рекомендуем запускать в выделенной виртуальной машине или использовать функцию песочницы (REVERSECORE_SANDBOX_ENABLED=true). Статические инструменты анализа (r2, YARA, strings) никогда не исполняют целевой бинарный файл.
Какой максимальный размер файла?
Лимиты по умолчанию:
- Загрузка: 100 МБ (MAX_UPLOAD_SIZE)
- Парсинг LIEF: 1 ГБ (REVERSECORE_LIEF_MAX_FILE_SIZE)
- Вывод инструмента: 10 МБ (REVERSECORE_MAX_OUTPUT_SIZE)
Все лимиты можно настроить через переменные окружения.
Этот проект построен на работе многих open-source проектов:
| Проект | Роль в Reversecore MCP |
|---|---|
| Radare2 | Дизассемблирование, эмуляция, анализ бинарных файлов |
| r2ghidra | Движок декомпиляции Ghidra для Radare2 |
| FastMCP | Фреймворк сервера MCP |
| YARA | Сопоставление шаблонов для обнаружения вредоносного ПО |
| LIEF | Анализ форматов бинарных файлов (PE, ELF, Mach-O) |
| CAPA | Обнаружение возможностей Mandiant FLARE |
| angr | Движок символического выполнения |
| Capstone | Фреймворк дизассемблирования |
| Keystone | Фреймворк ассемблирования |
| pwntools | Набор инструментов для разработки эксплоитов |
| ROPgadget | Поисковик гаджетов ROP |
| Volatility3 | Фреймворк анализа памяти в цифровой криминалистике |
| Scapy | Анализ сетевых пакетов |
| Sleuth Kit | Набор инструментов для анализа дисков в цифровой криминалистике |
| Binwalk | Анализ прошивки |
| Detect It Easy | Обнаружение упаковщиков/компиляторов |
MIT — см. LICENSE для подробностей.