IDA Pro

Interaja com o IDA Pro para tarefas de engenharia reversa e análise binária.

Documentação

Servidor MCP IDA Pro

Um servidor Model Context Protocol (MCP) que permite que assistentes de IA interajam com o IDA Pro para tarefas de engenharia reversa e análise de binários.

IDA Pro Server MCP server

Visão Geral

Este projeto fornece uma ponte entre assistentes de IA e o IDA Pro, um desmontador e depurador popular usado para engenharia reversa de software. Ele consiste em três componentes principais:

  1. Plugin de Controle Remoto do IDA Pro (ida_remote_server.py): Um plugin do IDA Pro que cria um servidor HTTP para controlar remotamente as funções do IDA Pro.
  2. Cliente Remoto do IDA (idaremoteclient.ts): Um cliente TypeScript para interagir com o Servidor de Controle Remoto do IDA Pro.
  3. Servidor MCP (index.ts): Um servidor Model Context Protocol que expõe a funcionalidade do IDA Pro a assistentes de IA.

Recursos

  • Executar scripts Python no IDA Pro a partir de assistentes de IA
  • Recuperar informações sobre binários:
    • Strings
    • Importações
    • Exportações
    • Funções
  • Capacidades avançadas de análise de binários:
    • Pesquisar valores imediatos em instruções
    • Pesquisar strings de texto no binário
    • Pesquisar sequências de bytes específicas
    • Obter desmontagem para faixas de endereços
  • Automatizar operações do IDA Pro por meio de uma interface padronizada
  • Comunicação segura entre componentes

Pré-requisitos

  • IDA Pro 8.3 ou posterior
  • Node.js 18 ou posterior
  • TypeScript

Exemplo de uso do ida_remote_server.py

curl -X POST -H "Content-Type: application/json" -d '{"script":"print(\"Script initialization...\")"}' http://127.0.0.1:9045/api/execute
{"success": true, "output": "Script initialization...\n"}

Exemplo de uso do Servidor MCP

Roo Output

Instalação

1. Instalar o Plugin de Controle Remoto do IDA Pro

  1. Copie ida_remote_server.py para o diretório de plugins do seu IDA Pro:

    • Windows: %PROGRAMFILES%\IDA Pro\plugins
    • macOS: /Applications/IDA Pro.app/Contents/MacOS/plugins
    • Linux: /opt/idapro/plugins
  2. Inicie o IDA Pro e abra um arquivo binário.

  3. O plugin iniciará automaticamente um servidor HTTP em 127.0.0.1:9045.

2. Instalar o Servidor MCP

  1. Clone este repositório:

    git clone <repository-url>
    cd ida-server
    
  2. Instale as dependências:

    npm install
    
  3. Compile o projeto:

    npm run build
    
  4. Configure o servidor MCP no arquivo de configurações MCP do seu assistente de IA:

    {
      "mcpServers": {
        "ida-pro": {
          "command": "node",
          "args": ["path/to/ida-server/dist/index.js"],
          "env": {}
        }
      }
    }
    

Uso

Depois de instalado e configurado, o servidor MCP fornece a seguinte ferramenta aos assistentes de IA:

run_ida_command

Executa um script Python do IDA Pro.

Parâmetros:

  • scriptPath (obrigatório): Caminho absoluto para o arquivo de script a ser executado
  • outputPath (opcional): Caminho absoluto para salvar a saída do script

Exemplo:

# Example IDA Pro script (save as /path/to/script.py)
import idautils

# Count functions
function_count = len(list(idautils.Functions()))
print(f"Binary has {function_count} functions")

# Get the first 5 function names
functions = list(idautils.Functions())[:5]
for func_ea in functions:
    print(f"Function: {ida_name.get_ea_name(func_ea)} at {hex(func_ea)}")

# Return data
return_value = function_count

O assistente de IA pode então usar este script com:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>run_ida_command</tool_name>
<arguments>
{
  "scriptPath": "/path/to/script.py"
}
</arguments>
</use_mcp_tool>

search_immediate_value

Pesquisa valores imediatos nas instruções do binário.

Parâmetros:

  • value (obrigatório): Valor a ser pesquisado (número ou string)
  • radix (opcional): Base para conversão de números (padrão: 16)
  • startAddress (opcional): Endereço inicial para a pesquisa
  • endAddress (opcional): Endereço final para a pesquisa

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_immediate_value</tool_name>
<arguments>
{
  "value": "42",
  "radix": 10
}
</arguments>
</use_mcp_tool>

search_text

Pesquisa strings de texto no binário.

Parâmetros:

  • text (obrigatório): Texto a ser pesquisado
  • caseSensitive (opcional): Se a pesquisa diferencia maiúsculas de minúsculas (padrão: falso)
  • startAddress (opcional): Endereço inicial para a pesquisa
  • endAddress (opcional): Endereço final para a pesquisa

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_text</tool_name>
<arguments>
{
  "text": "password",
  "caseSensitive": false
}
</arguments>
</use_mcp_tool>

search_byte_sequence

Pesquisa uma sequência de bytes específica no binário.

Parâmetros:

  • bytes (obrigatório): Sequência de bytes a ser pesquisada (por exemplo, "90 90 90" para três NOPs)
  • startAddress (opcional): Endereço inicial para a pesquisa
  • endAddress (opcional): Endereço final para a pesquisa

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>search_byte_sequence</tool_name>
<arguments>
{
  "bytes": "90 90 90"
}
</arguments>
</use_mcp_tool>

get_disassembly

Obtém a desmontagem para uma faixa de endereços.

Parâmetros:

  • startAddress (obrigatório): Endereço inicial para a desmontagem
  • endAddress (opcional): Endereço final para a desmontagem
  • count (opcional): Número de instruções a desmontar

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_disassembly</tool_name>
<arguments>
{
  "startAddress": "0x401000",
  "count": 10
}
</arguments>
</use_mcp_tool>

get_functions

Obtém a lista de funções do binário.

Parâmetros:

  • Nenhum obrigatório

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_functions</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

get_exports

Obtém a lista de exportações do binário.

Parâmetros:

  • Nenhum obrigatório

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_exports</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

get_strings

Obtém a lista de strings do binário.

Parâmetros:

  • Nenhum obrigatório

Exemplo:

<use_mcp_tool>
<server_name>ida-pro</server_name>
<tool_name>get_strings</tool_name>
<arguments>
{}
</arguments>
</use_mcp_tool>

API de Controle Remoto do IDA Pro

O Plugin de Controle Remoto do IDA Pro expõe os seguintes endpoints HTTP:

  • GET /api/info: Obter informações do plugin
  • GET /api/strings: Obter strings do binário
  • GET /api/exports: Obter exportações do binário
  • GET /api/imports: Obter importações do binário
  • GET /api/functions: Obter lista de funções
  • GET /api/search/immediate: Pesquisar valores imediatos em instruções
  • GET /api/search/text: Pesquisar texto no binário
  • GET /api/search/bytes: Pesquisar sequências de bytes no binário
  • GET /api/disassembly: Obter desmontagem para uma faixa de endereços
  • POST /api/execute: Executar script Python (JSON/Formulário)
  • POST /api/executebypath: Executar script Python a partir de um caminho de arquivo
  • POST /api/executebody: Executar script Python a partir do corpo bruto

Considerações de Segurança

Por padrão, o Plugin de Controle Remoto do IDA Pro escuta apenas em 127.0.0.1 (localhost) por motivos de segurança. Isso impede o acesso remoto à sua instância do IDA Pro.

Se você precisar permitir acesso remoto, pode modificar a variável DEFAULT_HOST em ida_remote_server.py, mas esteja ciente das implicações de segurança.

Desenvolvimento

Compilando a partir do Código Fonte

npm run build

Executando Testes

npm test

Licença

Este projeto é licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter detalhes.

Autor

Florian Drechsler (@fdrechsler) fd@fdrechsler.com