GhidraMCP

Permite que LLMs realizem engenharia reversa de forma autônoma em aplicações, expondo funcionalidades principais do Ghidra.

Documentação

License GitHub release (latest by date) GitHub stars GitHub forks GitHub contributors Follow @lauriewired

ghidra_MCP_logo

ghidraMCP

ghidraMCP é um servidor Model Context Protocol que permite que LLMs façam engenharia reversa de aplicações de forma autônoma. Ele expõe diversas ferramentas da funcionalidade principal do Ghidra para clientes MCP.

https://github.com/user-attachments/assets/36080514-f227-44bd-af84-78e29ee1d7f9

Recursos

Servidor MCP + Plugin Ghidra

  • Descompilar e analisar binários no Ghidra
  • Renomear automaticamente métodos e dados
  • Listar métodos, classes, importações e exportações

Instalação

Pré-requisitos

Ghidra

Primeiro, baixe a versão mais recente release deste repositório. Ela contém o plugin Ghidra e o cliente MCP Python. Em seguida, você pode importar diretamente o plugin no Ghidra.

  1. Execute o Ghidra
  2. Selecione File -> Install Extensions
  3. Clique no botão +
  4. Selecione o GhidraMCP-1-2.zip (ou a versão escolhida) do release baixado
  5. Reinicie o Ghidra
  6. Certifique-se de que o GhidraMCPPlugin está habilitado em File -> Configure -> Developer
  7. Opcional: Configure a porta no Ghidra com Edit -> Tool Options -> GhidraMCP HTTP Server

Guia de instalação em vídeo:

https://github.com/user-attachments/assets/75f0c176-6da1-48dc-ad96-c182eb4648c3

Clientes MCP

Teoricamente, qualquer cliente MCP deve funcionar com o ghidraMCP. Três exemplos são fornecidos abaixo.

Exemplo 1: Claude Desktop

Para configurar o Claude Desktop como um cliente MCP do Ghidra, vá para Claude -> Settings -> Developer -> Edit Config -> claude_desktop_config.json e adicione o seguinte:

{
  "mcpServers": {
    "ghidra": {
      "command": "python",
      "args": [
        "/ABSOLUTE_PATH_TO/bridge_mcp_ghidra.py",
        "--ghidra-server",
        "http://127.0.0.1:8080/"
      ]
    }
  }
}

Alternativamente, edite este arquivo diretamente:

/Users/YOUR_USER/Library/Application Support/Claude/claude_desktop_config.json

O IP e a porta do servidor são configuráveis e devem ser definidos para apontar para a instância Ghidra alvo. Se não forem definidos, ambos terão como padrão localhost:8080.

Exemplo 2: Cline

Para usar o GhidraMCP com Cline, é necessário executar manualmente o servidor MCP também. Primeiro, execute o seguinte comando:

python bridge_mcp_ghidra.py --transport sse --mcp-host 127.0.0.1 --mcp-port 8081 --ghidra-server http://127.0.0.1:8080/

O único argumento obrigatório é o transporte. Se todos os outros argumentos não forem especificados, eles terão como padrão os valores acima. Quando o servidor MCP estiver em execução, abra o Cline e selecione MCP Servers no topo.

Cline select

Em seguida, selecione Remote Servers e adicione o seguinte, garantindo que a URL corresponda ao host e à porta do MCP:

  1. Nome do servidor: GhidraMCP
  2. URL do servidor: http://127.0.0.1:8081/sse

Exemplo 3: 5ire

Outro cliente MCP que suporta múltiplos modelos no backend é o 5ire. Para configurar o GhidraMCP, abra o 5ire e vá para Tools -> New e defina as seguintes configurações:

  1. Chave da ferramenta: ghidra
  2. Nome: GhidraMCP
  3. Comando: python /ABSOLUTE_PATH_TO/bridge_mcp_ghidra.py

Compilando a partir do código-fonte

  1. Copie os seguintes arquivos do diretório do seu Ghidra para o diretório lib/ deste projeto:
  • Ghidra/Features/Base/lib/Base.jar
  • Ghidra/Features/Decompiler/lib/Decompiler.jar
  • Ghidra/Framework/Docking/lib/Docking.jar
  • Ghidra/Framework/Generic/lib/Generic.jar
  • Ghidra/Framework/Project/lib/Project.jar
  • Ghidra/Framework/SoftwareModeling/lib/SoftwareModeling.jar
  • Ghidra/Framework/Utility/lib/Utility.jar
  • Ghidra/Framework/Gui/lib/Gui.jar
  1. Compile com Maven executando:

mvn clean package assembly:single

O arquivo zip gerado inclui o plugin Ghidra compilado e seus recursos. Esses arquivos são necessários para que o Ghidra reconheça a nova extensão.

  • lib/GhidraMCP.jar
  • extensions.properties
  • Module.manifest