
Servidor MCP para engenharia reversa de executáveis Windows e formatos binários. Combina triagem estática, recuperação de funções assistida por Ghidra, ferramentas orientadas a plugins, gerenciamento de artefatos e execução opcional em runtime Windows isolada.
Rikune é um servidor MCP para engenharia reversa de executáveis Windows e formatos binários relacionados. Ele combina ingestão de amostras, triagem estática, recuperação de funções assistida por Ghidra, ferramentas especializadas orientadas por plugins, gerenciamento de artefatos e execução opcional em runtime Windows isolado por trás de uma interface Model Context Protocol.
O fluxo de trabalho atual do servidor voltado para IA é organizado em torno de uma superfície de gateway mínima:
workflow.search para classificar perfis, fluxos de trabalho e capacidades especializadas correspondentes para o tipo de arquivo e objetivo do usuário.workflow.run action=request_upload para upload de arquivos do host, ou deixe workflow.search apontar clientes legados para ferramentas ocultas de compatibilidade de ingestão de amostras.workflow.run action=start com o sample_id retornado.workflow.run action=status e workflow.run action=promote para monitorar e aprofundar a execução em estágios.artifact.read para artefatos completos persistidos quando a saída compacta do fluxo de trabalho não for suficiente.sample.*, workflow.analyze.*, workflow.triage, tools.discover e task.status permanecem registrados para compatibilidade ou inspeção de baixo nível, mas novos clientes devem preferir workflow.search, workflow.run e artifact.read.
Ao conectar através do gateway remoto rikune-agent, os clientes MCP veem nomes de transporte estáveis:
workflow_search, workflow_run, artifact_read, rikune_tool_call e os controles
rikune_connection_*. rikune_connection_refresh atualiza apenas o cache interno de capacidade upstream; não expande a lista de ferramentas MCP. Use rikune_tool_call somente após
workflow_search identificar uma subferramenta interna específica do analisador que não seja coberta pelos gateways primários de fluxo de trabalho ou artefato.
workflow.search usa tipo de amostra, descobertas e metadados de perfil para rotear para capacidades especializadas sem expor todas as ferramentas desde o início.O Docker estático é o padrão mais seguro. Ele não executa amostras.
.\rikune.ps1 install -Profile static -DataRoot "D:\Docker\rikune"
./rikune.sh install --profile static --data-root "$HOME/.rikune"
Equivalente manual:
npm install
npm run build
npm run docker:generate:all
docker compose --env-file .docker-runtime.env -f docker-compose.analyzer.yml up -d --build analyzer
O modo híbrido executa o Analisador no Docker e delega trabalhos Windows ao vivo para um Windows Host Agent. O Host Agent pode iniciar o Windows Sandbox sob demanda ou controlar uma VM Hyper-V configurada.
.\rikune.ps1 install -Profile hybrid -InstallRuntime
Do Linux/macOS com um host Windows remoto:
./rikune.sh install --profile hybrid --windows-host <windows-host> --windows-user <windows-user>
Conectar um cliente MCP não inicia o Windows Sandbox nem executa uma amostra. O trabalho de runtime ao vivo só começa quando uma ferramenta o solicita explicitamente, como runtime.debug.session.start, runtime.debug.command, sandbox.execute ou um estágio de execução dinâmica promovido.
npm install
npm run build
npm test
node dist/index.js
O pacote raiz requer Node.js 22 ou mais recente. Alguns subpacotes de runtime podem ser executados em versões mais antigas do Node, mas o desenvolvimento do repositório e a CLI raiz publicada devem usar Node 22+.
Comece com workflow.search sempre que o fluxo de trabalho, tipo de arquivo ou backend solicitado não estiver claro. Ele classifica perfis correspondentes e retorna dicas compactas de prontidão/roteamento sem ativar ferramentas especializadas ocultas.
Para arquivos do host, chame workflow.run action=request_upload, faça POST dos bytes brutos para a URL de upload retornada e depois leia sample_id da resposta HTTP. sample.request_upload e sample.ingest são auxiliares de compatibilidade, não o caminho normal voltado para IA.
Para implantações de analisador remoto ou rikune-agent, defina API_PUBLIC_BASE_URL, RIKUNE_API_PUBLIC_BASE_URL ou RIKUNE_ANALYZER_PUBLIC_URL para a base da API HTTP acessível ao cliente, por exemplo http://159.195.136.226:18080. As sessões de upload então retornam valores públicos upload_url / status_url em vez de URLs localhost locais ao contêiner. O gateway remoto também normaliza URLs de upload localhost de analisadores mais antigos para seu endpoint configurado.
Se a API HTTP estiver habilitada, POST /api/v1/samples ainda está disponível para integrações não-MCP. A ingestão bem-sucedida retorna um sample_id; a análise deve usar sample_id, não um caminho local, após a importação.
Chame workflow.run action=start com o sample_id. O primeiro estágio realiza um perfil rápido e cria ou reutiliza uma execução de análise. O plan_id retornado mapeia para a execução de análise persistida.
Use workflow.run action=promote para solicitar estágios mais profundos. O pipeline atualmente modela estes estágios:
fast_profileenrich_staticfunction_mapreconstructsemantic_reviewsdynamic_plandynamic_executesummarizeTrabalhos de longa duração são enfileirados através do sistema de jobs. Consulte o estado compacto do estágio com workflow.run action=status.
workflow.run action=status é a visualização principal da execução em estágios. Grandes cargas úteis de estágios históricos podem ser podadas com um aviso no nível superior; use artifact.read para artefatos completos. task.status é uma visualização bruta de fila/processo para compatibilidade e inclui telemetria de memória external_active_* para subprocessos do analisador.
Superfícies úteis de acompanhamento:
workflow.searchworkflow.runanalysis.context.getartifact.read, mais auxiliares de compatibilidade de artefato como artifact.list, artifact.diff e artifact.downloadreport.summarize, report.generate, workflow.summarizeworkflow.semantic_name_reviewworkflow.function_explanation_reviewworkflow.module_reconstruction_reviewO caminho de código atual é:
src/index.ts
-> loadConfig()
-> WorkspaceManager / DatabaseManager / PolicyGuard / CacheManager / StorageManager / JobQueue
-> optional RuntimeClient or Windows sandbox bootstrap
-> registerAllTools()
-> MCP stdio server
Módulos centrais do servidor ficam em src/core/:
Alguns arquivos de nível raiz como src/server.ts, src/tool-registry.ts e src/plugins.ts permanecem como encaminhadores de compatibilidade. Novo código deve ter como alvo src/core/*.
Os modos de runtime são configurados através de runtime.mode ou variáveis de ambiente:
disabled: nenhuma delegação de runtime.manual: conectar a um endpoint de runtime fornecido.remote-sandbox: delegar a um Windows Host Agent.auto-sandbox: analisador Windows nativo inicia Windows Sandbox localmente.Analisadores Docker/WSL devem usar remote-sandbox, não auto-sandbox.
Rikune atualmente inclui 111 plugins internos em src/plugins/<id>/. Os plugins podem registrar ferramentas, declarar dependências, expor esquemas de configuração, participar de hooks de ciclo de vida, fornecer metadados Docker e declarar ferramentas limitadas baseadas em Worker através de metadados workerBackend.
O conjunto de Workers de fronteira mantém ferramentas apenas de plano como superfícies de triagem e transferência, depois adiciona ferramentas de execução explícitas ao lado delas. restringer.deobfuscation.run, jsimplifier.pipeline.run, jsir.cascade.normalize, gtirb.ir.generate, remill.lift.run, manifold.fact.extract, qbdi.trace.run e culifter.gpu.artifact.inventory expõem contratos de Worker através de workflow.search, plugin.list, tool.help e tool.readiness; tools.discover permanece um portal de compatibilidade de baixo nível. Descoberta e prontidão permanecem passivas: relatam metadados de backend e orientação de configuração sem iniciar REstringer, JSIMPLIFIER, JSIR/CASCADE, GTIRB, Remill, Manifold, QBDI, drivers GPU, Node/V8, navegadores ou instrumentação de runtime.
A geração do Docker lê systemDeps do plugin e metadados de empacotamento de Worker diretamente. Imagens padrão instalam wrappers estáticos de baixo risco como REstringer, JSIMPLIFIER, Manifold, WABT e validação LIEF; perfis opcionais podem habilitar rotas estáticas JSIR/CASCADE, JSVMP, GTIRB, radare2 e Triton; backends pesados/runtime/GPU/sensíveis a licença permanecem bloqueados por perfil, BYO ou sidecar.
node scripts/generate-docker.mjs --dry-run
node scripts/generate-docker.mjs --profile=full --backend-profile=optional
node scripts/generate-docker.mjs --all-profiles --dry-run
O carregamento de plugins é controlado por PLUGINS:
PLUGINS=* # todos os internos
PLUGINS=pe-analysis,yara # plugins selecionados
PLUGINS=-dynamic # todos exceto dinâmicos
Use estas ferramentas MCP em tempo de execução:
workflow.searchworkflow.runplugin.listplugin.enableplugin.disabletools.discover e tool.readiness para inspeção de compatibilidade/depuração de baixo nívelConsulte docs/PLUGINS.md e packages/plugin-sdk/README.md.
Quando api.enabled é verdadeiro, o servidor de arquivos embutido expõe:
Autenticação por chave de API, limitação de taxa, cabeçalhos de segurança e CORS limitado são tratados pela camada HTTP.
Linha de base mínima de desenvolvimento:
Ferramentas opcionais são específicas de plugin. Execute system.health, system.setup.guide, tool.readiness e plugin.list para ver o que está faltando em um determinado ambiente.
src/
index.ts entrada principal do servidor
core/ servidor MCP, registro, executor, orquestração de plugins
core/tool-registry/ fatias de registro de ferramentas/prompts/recursos internas
tools/ implementações principais de ferramentas
workflows/ fluxos de trabalho de análise em estágios, triagem, reconstrução, revisão
analysis/ estado de execução e executor de tarefas em segundo plano
plugins/ 111 plugins internos
persistence/ persistência SQLite e workspace
sample/ finalização de amostra e inspeção de workspace
storage/ artefatos, uploads, retenção
runtime-client/ cliente de delegação de runtime do lado do analisador
worker/ orquestração de workers Ghidra e Python
packages/
plugin-sdk/ SDK público de plugins
shared/ tipos de contrato de runtime e ferramenta
runtime-node/ executor de runtime isolado
windows-host-agent/ agente host Windows Sandbox / Hyper-V
workers/ scripts de worker Python e regras YARA
docker/ modelos Dockerfile gerados e arquivos de perfil
docs/ documentação de arquitetura, plugin, runtime, implantação
tests/ testes unitários, de integração e e2e
npm install
npm run build
npm test
npm run typecheck
npm run validate
npm run docker:generate:all
Verificações focadas úteis:
npm run test:unit
npm run test:integration
npm run test:e2e
npm run build:runtime
Build local:
{
"mcpServers": {
"rikune": {
"command": "node",
"args": ["D:/Playground/windows-exe-decompiler-mcp-server/dist/index.js"],
"env": {
"API_ENABLED": "true",
"API_PORT": "18080",
"API_PUBLIC_BASE_URL": "http://127.0.0.1:18080",
"PLUGINS": "*"
}
}
}
}
Docker stdio:
{
"mcpServers": {
"rikune": {
"command": "docker",
"args": ["exec", "-i", "rikune-analyzer", "node", "dist/index.js"]
}
}
}
Pacote publicado:
npm install -g rikune
rikune
rikune docker-stdio
rikune agent
Por padrão, o Rikune armazena dados persistentes sob a raiz do Rikune em nível de usuário. Instaladores Docker geralmente mapeiam essa raiz para um diretório host como D:\Docker\rikune.
Subdiretórios comuns:
samples/artifacts/uploads/cache/logs/Os espaços de trabalho de amostras são agrupados por SHA-256 para evitar colisões de caminho e preservar originais imutáveis.
O Rikune é projetado para análise de malware e binários não confiáveis, mas não é um limite de segurança mágico por si só.
PolicyGuard.Consulte SECURITY.md e TROUBLESHOOTING.md.
MIT
tool.helptool.readinesstools.discover| Área | Arquivo atual |
|---|
| Wrapper do servidor MCP | src/core/server.ts |
| Registro de ferramentas/prompts/recursos MCP | src/core/mcp-registry.ts |
| Execução de ferramentas, validação, hooks | src/core/tool-executor.ts |
| Orquestração de registro | src/core/tool-registry.ts |
| Fatias de registro internas | src/core/tool-registry/*.ts |
| Fachada do gerenciador de plugins | src/core/plugins.ts |
| Descoberta/carregamento de plugins | src/core/plugin-orchestrator.ts |
| Exposição progressiva de ferramentas | src/core/tool-surface-manager.ts |
| Plano | Propósito | Código principal |
|---|
| Analyzer | Servidor MCP stdio, API HTTP, armazenamento, jobs, ferramentas estáticas, orquestração de plugins | src/index.ts, src/core/* |
| Runtime Node | Executor de tarefas isolado dentro de sandbox ou VM | packages/runtime-node/* |
| Windows Host Agent | Inicia/para Windows Sandbox ou runtime Hyper-V e expõe endpoints de controle de runtime | packages/windows-host-agent/* |
| Agent Gateway | Gateway/proxy MCP para gerenciamento de conexão analisador/runtime | src/rikune-agent-gateway.ts |
| Endpoint | Propósito |
|---|
/dashboard e / | Painel da interface |
/api/v1/health | Verificação de atividade |
/api/v1/ready | Prontidão em banco de dados, fila, runtime e backends de plugin |
/api/v1/events | Eventos SSE |
/api/v1/samples | Upload direto de amostra |
/api/v1/samples/:id | Metadados da amostra |
/api/v1/samples/:id/download | Download da amostra original |
/api/v1/artifacts | Listagem de artefatos |
/api/v1/artifacts/:id | Leitura/exclusão de artefato |
/api/v1/uploads/:token | Sessão de upload durável POST/status |