GhidraMCP: Gebruik LLM’s voor autonome reverse engineering in Ghidra
In de wereld van reverse engineering is Ghidra al jaren een go-to tool. Maar stel je voor dat je een Large Language Model (LLM) zoals Claude of een lokale variant kunt laten meewerken: automatisch functies hernoemen, decompilen en analyseren. Dat is precies wat GhidraMCP mogelijk maakt. In deze post duik ik in wat het is en hoe het technisch in elkaar steekt. Ook geen we kijken naar een voorbeeld dus laten we snel van start gaan!
Wat is GhidraMCP?
GhidraMCP is een Model Context Protocol (MCP) server die Ghidra verbindt met LLMs. Het stelt AI-modellen in staat om autonoom binaries te reverse engineeren door toegang te geven tot Ghidra’s kernfuncties. Denk aan taken zoals decompilen, analyseren, hernoemen van methodes en variabelen, en het ophalen van lijsten met methodes, classes, imports en exports.
Het project is open-source en beschikbaar op GitHub (LaurieWired/GhidraMCP). Het bestaat uit een Ghidra-plugin en een Python-brug die als MCP-server fungeert. MCP is een protocol dat LLMs toelaat om externe tools aan te roepen, vergelijk het met een API voor AI-gedreven automatisering. In plaats van handmatig te reverse-engineeren, kun je nu een LLM laten ‘meedenken’ en acties uitvoeren in Ghidra.
Dit is ontzettend nuttig omdat Reverse Engineering erg tijdrovend is. Denk aan functies hernoemen, patronen ontdekken of documentatie genereren. Met GhidraMCP wordt dit geautomatiseerd terwijl je (met lokale setups) je privacy behoudt. Let wel, deze toevoeging is een hulpmiddel ofwel een extra assistent. Het is geen vervanging voor expertise!
Hoe werkt het technisch?
Laten we eens wat dieper kijken naar hoe het technisch in elkaar steekt. GhidraMCP bestaat uit twee hoofdcomponenten:
1. Ghidra Plugin (Java-based): Deze plugin installeer je in Ghidra zelf. Het zet Ghidra’s API open via een HTTP-server (standaard op poort 8080). Functies zoals decompile_function, rename_function, list_exports en analyze_binary worden beschikbaar als API endpoints. Deze plugin draait binnen Ghidra’s CodeBrowser en communiceert met de MCP-server.
2. Python MCP Bridge: Dit is de server die het MCP-protocol implementeert. Het verbindt met de Ghidra-plugin via HTTP en vertaalt LLM-verzoeken naar Ghidra-acties. De bridge ondersteunt transports zoals stdio of SSE (Server-Sent Events). Je start deze MCP Bridge met een commando.
De technische flow ziet er als volgt uit:
1. Een LLM-client (zoals Claude Desktop, Cline of 5ire) stuurt een prompt naar de MCP-server.
2. De LLM herkent een ’tool call’ (bijv. “rename functions”) en genereert een JSON-request met functie-naam en argumenten.
3. De MCP-server roept de Ghidra-plugin aan, voert de actie uit (bijv. decompilen of hernoemen).
4. Resultaten gaan terug naar de LLM, die ze integreert in een antwoord.
Voor lokale setups kun je Ollama combineren met OpenWeb-UI en mcpo (een proxy voor OpenAPI). Maar voor deze post focus ik op Claude Desktop, welke cloud-based is maar makkelijk te integreren is.
Belangrijk: Tool calling is cruciaal. Niet elke LLM is er goed in – modellen zoals Claude 3.5 Sonnet excelleren hierin, terwijl lokale varianten zoals Qwen 2.5 nog in ontwikkeling zijn.
Installatie:
In een vogelvlucht:
- Download de release van GitHub.
- Installeer de plugin in Ghidra (File > Install Extensions).
- Configureer de poort in Ghidra’s Tool Options.
- Run de Python-bridge.
Laten we eens aan de slag gaan. Ik gebruik Claude Desktop als MCP-client omdat het naadloos integreert en tool calling ondersteunt. (Voor lokale alternatieven: check Cline of 5ire, maar Claude is ideaal voor een snelle demo.). De volgende zaken zijn rand voorwaardelijk aan de installatie:
1. Installer Ghidra (in mijn voorbeeld was de plugin compatible met Ghidra 11.3.2 en dus heb ik niet de nieuwste versie maar 11.3.2 gedownload): https://github.com/NationalSecurityAgency/ghidra/releases
2. Installeer de “requests” module (pip install requests)
3. Installeer Python3: https://www.python.org
4. Installeer de MCP Python SDK: https://github.com/modelcontextprotocol/python-sdk
5. Maak een Claude Account aan en Download Claude Desktop: https://claude.ai/download. Start Claude Desktop en log in.
Vervolgens gaan we de GhidraMCP plugin downloaden en installeren.
Het eerste wat we gaan doen is het downloaden van de plugin (GhidraMCP-release-1-*.zip) vanuit de releases page. https://github.com/LaurieWired/GhidraMCP/releases
Nu gaan we de GhidraMCP plugin installeren in Ghidra. Hiervoor openen we Ghidra en kiezen we voor “File” – “Install Extensions”:
Vervolgens klik je op het + icoontje. In het volgende venster selecteer je de GhidraMCP plugin (pak hiervoor de ZIP uit die je vanuit de releases pagina gedownload hebt):
Nu moeten we Ghidra rebooten, een project starten en controleren of onder “File” – “Configure” de “Developer” optie is geselecteed en of hier de GhidraMCP plugin actief is. We kunnen hier eventueel via “Edit” – “Tool Options” de poort configureren.
Nu gaan we de MCP client instellen om met Claude Desktop samen te werken. Laten we eerst het “bridge_mcp_ghidra.py” bestand kopiëren naar de Ghidra folder. Ik gebruik hiervoor de “extensions” folder.
Nu dat gedaan is openen we Claude Desktop en gaan we naar “Settings” – “Developer” – “Edit Config”.
We openen dan de “claude_desktop_config.json” file en gaan deze bewerken. Hier voegen we het volgende toe:
{ "mcpServers": { "ghidra": { "command": "python", "args": [ "C:\\Program Files\\ghidra_11.3.2_PUBLIC\\Extensions\\bridge_mcp_ghidra.py", "--ghidra-server", "http://127.0.0.1:8080/" ] } } } |
Je kunt er natuurlijk ook voor kiezen om dit bestand direct te bewerken (/Users/YOUR_USER/Library/Application Support/Claude/claude_desktop_config.json)
Nu herstarten we Claude Desktop.
Gebruik de GhidraMCP Extensie:
Het eerste wat we nu gaan doen is het starten van Ghidra en het importeren van een binary. Laat deze binary analyseren. Ik gebruik als voorbeeld de EasyPeasy binary: https://github.com/cspinstructor/github-crackmes/blob/master/EasyPeasy.zip.
En als alles goed gegaan is kunnen we nu via Claude Desktop gebruiken om ons te helpen met de analyse. Laten we dit eens testen. We kunnen nu simpelweg via Claude Desktop vragen stellen en acties uitvoeren, bijvoorbeeld:
1. Analyze the binary in Ghidra (in het begin zul je bepaalde functies en acties toe moeten staan (altijd of slechts deze keer):
2. Rename all functions based on their behavior
3. Rename all main variables so they sound logical:
4. Can you tell me something about the program flow?
5. This is a CTF challenge. I need to find the correct credentials. Can you help me find them?
6. Can you create a graphical representation of the program control-flow?
Conclusie:
GhidraMCP transformeert Ghidra van een statische tool naar een AI-gedreven powerhouse. Technisch is het een slimme brug via MCP, en met clients zoals Claude Desktop kun je snel resultaten zien. Ga je reverse-engineeren en behoord het gebruik van AI tot de mogelijkheden probeer het dan zeker zelf! GhidraMCP is een prachtige aanvulling op het Ghidra ecosysteem!





