Skip to content
AI & Agents
Skill

/ghidra

Reverse engineer binaries using Ghidra's headless analyzer. Decompile executables, extract functions, strings, symbols, and analyze call graphs without GUI.

BOOST
From plugin
agent-stuff
3.2k18 skills1 command
Install
$ npx -y skills add mitsuhiko/agent-stuff --skill ghidra --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/ghidra

Context preview

The summary Claude sees to decide when to auto-load this skill.

Reverse engineer binaries using Ghidra's headless analyzer. Decompile executables, extract functions, strings, symbols, and analyze call graphs without GUI.

SKILL.md

ghidra.SKILL.md
name: ghidra
description: "Reverse engineer binaries using Ghidra's headless analyzer. Decompile executables, extract functions, strings, symbols, and analyze call graphs without GUI."

Ghidra Headless Analysis Skill

Perform automated reverse engineering using Ghidra's `analyzeHeadless` tool. Import binaries, run analysis, decompile to C code, and extract useful information.

Quick Reference

| Task | Command | |------|---------| | Full analysis with all exports | `ghidra-analyze.sh -s ExportAll.java -o ./output binary` | | Decompile to C code | `ghidra-analyze.sh -s ExportDecompiled.java -o ./output binary` | | List functions | `ghidra-analyze.sh -s ExportFunctions.java -o ./output binary` | | Extract strings | `ghidra-analyze.sh -s ExportStrings.java -o ./output binary` | | Get call graph | `ghidra-analyze.sh -s ExportCalls.java -o ./output binary` | | Export symbols | `ghidra-analyze.sh -s ExportSymbols.java -o ./output binary` | | Find Ghidra path | `find-ghidra.sh` |

Prerequisites

  • **Ghidra** must be installed. On macOS: `brew install --cask ghidra`
  • **Java** (OpenJDK 17+) must be available

The skill automatically locates Ghidra in common installation paths. Set `GHIDRA_HOME` environment variable if Ghidra is installed in a non-standard location.

---

Main Wrapper Script

./scripts/ghidra-analyze.sh [options] <binary>

Wrapper that handles project creation/cleanup and provides a simpler interface to `analyzeHeadless`.

**Options:**

  • `-o, --output <dir>` - Output directory for results (default: current dir)
  • `-s, --script <name>` - Post-analysis script to run (can be repeated)
  • `-a, --script-args <args>` - Arguments for the last specified script
  • `--script-path <path>` - Additional script search path
  • `-p, --processor <id>` - Processor/architecture (e.g., `x86:LE:32:default`)
  • `-c, --cspec <id>` - Compiler spec (e.g., `gcc`, `windows`)
  • `--no-analysis` - Skip auto-analysis (faster, but less info)
  • `--timeout <seconds>` - Analysis timeout per file
  • `--keep-project` - Keep the Ghidra project after analysis
  • `--project-dir <dir>` - Directory for Ghidra project (default: /tmp)
  • `--project-name <name>` - Project name (default: auto-generated)
  • `-v, --verbose` - Verbose output

---

Built-in Export Scripts

ExportAll.java

Comprehensive export - runs all other exports and creates a summary. Best for initial analysis.

**Output files:**

  • `{name}_summary.txt` - Overview: architecture, memory sections, function counts
  • `{name}_decompiled.c` - All functions decompiled to C
  • `{name}_functions.json` - Function list with signatures and calls
  • `{name}_strings.txt` - All strings found
  • `{name}_interesting.txt` - Functions matching security-relevant patterns
./scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis firmware.bin

ExportDecompiled.java

Decompile all functions to C pseudocode.

**Output:** `{name}_decompiled.c`

./scripts/ghidra-analyze.sh -s ExportDecompiled.java -o ./output program.exe

ExportFunctions.java

Export function list as JSON with addresses, signatures, parameters, and call relationships.

**Output:** `{name}_functions.json`

{
  "program": "example.exe",
  "architecture": "x86",
  "functions": [
    {
      "name": "main",
      "address": "0x00401000",
      "size": 256,
      "signature": "int main(int argc, char **argv)",
      "returnType": "int",
      "callingConvention": "cdecl",
      "isExternal": false,
      "parameters": [{"name": "argc", "type": "int"}, ...],
      "calls": ["printf", "malloc", "process_data"],
      "calledBy": ["_start"]
    }
  ]
}

ExportStrings.java

Extract all strings (ASCII, Unicode) with addresses.

**Output:** `{name}_strings.json`

./scripts/ghidra-analyze.sh -s ExportStrings.java -o ./output malware.exe

ExportCalls.java

Export function call graph showing caller/callee relationships.

**Output:** `{name}_calls.json`

Includes:

  • Full call graph
  • Potential entry points (functions with no callers)
  • Most frequently called functions

ExportSymbols.java

Export all symbols: imports, exports, and internal symbols.

**Output:** `{name}_symbols.json`

---

Common Workflows

Analyze an Unknown Binary

# Create output directory
mkdir -p ./analysis

# Run comprehensive analysis
./scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis unknown_binary

# Review the summary first
cat ./analysis/unknown_binary_summary.txt

# Look at interesting patterns (crypto, network, dangerous functions)
cat ./analysis/unknown_binary_interesting.txt

# Check specific decompiled functions
grep -A 50 "encrypt" ./analysis/unknown_binary_decompiled.c

Analyze Firmware

# Specify ARM architecture for firmware
./scripts/ghidra-analyze.sh \
    -p "ARM:LE:32:v7" \
    -s ExportAll.java \
    -o ./firmware_analysis \
    firmware.bin

Quick Function Listing

# Just get function names and addresses (faster)
./scripts/ghidra-analyze.sh --no-analysis -s ExportFunctions.java -o . program

# Parse with jq
cat program_functions.json | jq '.functions[] | "\(.address): \(.name)"'

Find Specific Patterns

# After running ExportDecompiled, search for patterns
grep -n "password\|secret\|key" output_decompiled.c
grep -n "strcpy\|sprintf\|gets" output_decompiled.c

Analyze Multiple Binaries

for bin in ./samples/*; do
    name=$(basename "$bin")
    ./scripts/ghidra-analyze.sh -s ExportAll.java -o "./results/$name" "$bin"
done

---

Architecture/Processor IDs

Common processor IDs for the `-p` option:

| Architecture | Processor ID | |-------------|--------------| | x86 32-bit | `x86:LE:32:default` | | x86 64-bit | `x86:LE:64:default` | | ARM 32-bit | `ARM:LE:32:v7` | | ARM 64-bit | `AARCH64:LE:64:v8A` | | MIPS 32-bit | `MIPS:BE:32:default` or `MIPS:LE:32:default` | | PowerPC | `PowerPC:BE:32:default` |

Find all available processors:

ls "$(dirname $(./scr
Read more
Ships withagent-stuff

Armin's personal Pi Coding Agent package: reusable skills, extensions, prompt commands, themes, and a few supporting utilities that I use across projects. The package is published to npm as mitsupi.

Get the whole plugin
Stats
3,177
Stars
229
Forks
Active
Maintenance
TypeScript
Language
Apache-2.0
License
10d ago
Last commit
11mo ago
Created
9h ago
Added

Repo: mitsuhiko/agent-stuff

Other skills on agent-stuff.