ghidra-headless

Reverse engineers binaries using Ghidra's headless analyzer. Use when decompiling executables, extracting functions, strings, symbols, or analyzing call graphs from compiled binaries without the Ghidra GUI.

By trailofbits · 375 installs

npx skills add trailofbits/skills-curated --skill ghidra-headless

Source repository · Upstream listing

Ghidra Headless Analysis Perform automated reverse engineering using Ghidra's analyzeHeadless tool. Import binaries, run analysis, decompile to C code, and extract useful information. When to Use Decompiling a binary to C pseudocode for review Extracting function signatures, strings, or symbols from executables Analyzing call graphs to understand binary control flow Triaging unknown binaries or firmware images Batch analyzing multiple binaries for comparison Security auditing compiled code without source access When NOT to Use Source code is available — read it directly instead Interactive debugging is needed — use GDB, LLDB, or Ghidra GUI The binary is a .NET assembly — use dnSpy or ILSpy The binary is Java bytecode — use jadx or cfr Dynamic analysis is required — use a debugger or sandbox Quick Reference Task Command Full analysis with all exports {baseDir}/scripts/ghidra analyze.sh s ExportAll.java o ./output binary Decompile to C code {baseDir}/scripts/ghidra analyze.sh s ExportDecompiled.java o ./output binary List functions {baseDir}/scripts/ghidra analyze.sh s ExportFunctions.java o ./output binary Extract strings {baseDir}/scripts/ghidra analyze.sh s ExportStrings.java o ./output binary Get call graph {baseDir}/scripts/ghidra analyze.sh s ExportCalls.java o ./output binary Export symbols {baseDir}/scripts/ghidra analyze.sh s ExportSymbols.java o ./output binary Find Ghidra path {baseDir}/scripts/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 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 Runs summary, decompilation, function list, strings, and interesting pattern exports. Does not include call graph or symbols — run ExportCalls.java and ExportSymbols.java separately if needed. 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 (plain text; use ExportStrings.java for JSON) {name} interesting.txt — Functions matching security relevant patterns ExportDecompiled.java Decompile all functions to C pseudocode. Output: {name} decompiled.c ExportFunctions.java Export function list as JSON with addresses, signatures, parameters, and call relationships. Output: {name} functions.json ExportStrings.java Extract all strings (ASCII, Unicode) with addresses. Output: {name} strings.json ExportCalls.java Export function call graph showing caller/callee relationships. Includes full call graph, potential entry points, and most frequently called functions. Output: {name} calls.json ExportSymbols.java Export all symbols: imports, exports, and internal symbols. Output: {name} symbols.json Common Workflows Analyze an Unknown Binary Analyze Firmware Quick Function Listing Find Specific Patterns 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 Troubleshooting Ghidra Not Found Analysis Takes Too Long Out of Memory Set before running: Wrong Architecture Detected Explicitly specify the processor: Tips 1. Start with ExportAll.java — gives everything; the summary helps orient 2. Check interesting.txt — highlights security relevant functions automatically 3. Use jq for JSON parsing — JSON exports are designed to be machine readable 4. Decompilation isn't perfect — use as a guide, cross reference with disassembly 5. Large binaries take time — use timeout and consider no analysis for quick scans