ghidra-headless
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGhidra Headless Analysis
Ghidra 无头分析
Perform automated reverse engineering using Ghidra's tool.
Import binaries, run analysis, decompile to C code, and extract useful
information.
analyzeHeadless使用Ghidra的工具执行自动化逆向工程。导入二进制文件、运行分析、反编译为C代码,并提取有用信息。
analyzeHeadlessWhen 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
- 将二进制文件反编译为C伪代码以供审查
- 从可执行文件中提取函数签名、字符串或符号
- 分析调用图以理解二进制文件的控制流
- 分类未知二进制文件或固件镜像
- 批量分析多个二进制文件以进行对比
- 在无源代码访问权限的情况下对编译代码进行安全审计
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
- 有源代码可用——直接阅读源代码即可
- 需要交互式调试——使用GDB、LLDB或Ghidra图形界面
- 二进制文件为.NET程序集——使用dnSpy或ILSpy
- 二进制文件为Java字节码——使用jadx或cfr
- 需要动态分析——使用调试器或沙箱
Quick Reference
快速参考
| Task | Command |
|---|---|
| Full analysis with all exports | |
| Decompile to C code | |
| List functions | |
| Extract strings | |
| Get call graph | |
| Export symbols | |
| Find Ghidra path | |
| 任务 | 命令 |
|---|---|
| 导出所有内容的完整分析 | |
| 反编译为C代码 | |
| 列出函数 | |
| 提取字符串 | |
| 获取调用图 | |
| 导出符号 | |
| 查找Ghidra路径 | |
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
environment variable if Ghidra is installed in a non-standard
location.
GHIDRA_HOME- 必须安装Ghidra。在macOS上:
brew install --cask ghidra - 必须具备Java(OpenJDK 17+)环境
该工具会自动在常见安装路径中查找Ghidra。如果Ghidra安装在非标准位置,请设置环境变量。
GHIDRA_HOMEMain Wrapper Script
主包装脚本
bash
{baseDir}/scripts/ghidra-analyze.sh [options] <binary>Wrapper that handles project creation/cleanup and provides a simpler
interface to .
analyzeHeadlessOptions:
- — Output directory for results (default: current dir)
-o, --output <dir> - — Post-analysis script to run (can be repeated)
-s, --script <name> - — Arguments for the last specified script
-a, --script-args <args> - — Additional script search path
--script-path <path> - — Processor/architecture (e.g.,
-p, --processor <id>)x86:LE:32:default - — Compiler spec (e.g.,
-c, --cspec <id>,gcc)windows - — Skip auto-analysis (faster, but less info)
--no-analysis - — Analysis timeout per file
--timeout <seconds> - — Keep the Ghidra project after analysis
--keep-project - — Directory for Ghidra project (default: /tmp)
--project-dir <dir> - — Project name (default: auto-generated)
--project-name <name> - — Verbose output
-v, --verbose
bash
{baseDir}/scripts/ghidra-analyze.sh [options] <binary>该包装脚本负责项目的创建/清理,并为提供更简洁的接口。
analyzeHeadless选项:
- — 结果输出目录(默认:当前目录)
-o, --output <dir> - — 要运行的分析后脚本(可重复指定)
-s, --script <name> - — 最后指定的脚本的参数
-a, --script-args <args> - — 额外的脚本搜索路径
--script-path <path> - — 处理器/架构(例如:
-p, --processor <id>)x86:LE:32:default - — 编译器规范(例如:
-c, --cspec <id>,gcc)windows - — 跳过自动分析(速度更快,但信息更少)
--no-analysis - — 每个文件的分析超时时间
--timeout <seconds> - — 分析完成后保留Ghidra项目
--keep-project - — Ghidra项目的目录(默认:/tmp)
--project-dir <dir> - — 项目名称(默认:自动生成)
--project-name <name> - — 详细输出
-v, --verbose
Built-in Export Scripts
内置导出脚本
ExportAll.java
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:
- — Overview: architecture, memory sections, function counts
{name}_summary.txt - — All functions decompiled to C
{name}_decompiled.c - — Function list with signatures and calls
{name}_functions.json - — All strings found (plain text; use ExportStrings.java for JSON)
{name}_strings.txt - — Functions matching security-relevant patterns
{name}_interesting.txt
bash
{baseDir}/scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis firmware.bin运行摘要、反编译、函数列表、字符串和有趣模式导出。不包含调用图或符号——如果需要,请单独运行ExportCalls.java和ExportSymbols.java。最适合初始分析。
输出文件:
- — 概述:架构、内存段、函数数量
{name}_summary.txt - — 所有函数反编译为C代码
{name}_decompiled.c - — 包含签名和调用关系的函数列表
{name}_functions.json - — 找到的所有字符串(纯文本;如需JSON格式请使用ExportStrings.java)
{name}_strings.txt - — 匹配安全相关模式的函数
{name}_interesting.txt
bash
{baseDir}/scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis firmware.binExportDecompiled.java
ExportDecompiled.java
Decompile all functions to C pseudocode.
Output:
{name}_decompiled.c将所有函数反编译为C伪代码。
输出:
{name}_decompiled.cExportFunctions.java
ExportFunctions.java
Export function list as JSON with addresses, signatures, parameters, and
call relationships.
Output:
{name}_functions.json以JSON格式导出函数列表,包含地址、签名、参数和调用关系。
输出:
{name}_functions.jsonExportStrings.java
ExportStrings.java
Extract all strings (ASCII, Unicode) with addresses.
Output:
{name}_strings.json提取所有字符串(ASCII、Unicode)及其地址。
输出:
{name}_strings.jsonExportCalls.java
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导出显示调用者/被调用者关系的函数调用图。包含完整调用图、潜在入口点和最频繁调用的函数。
输出:
{name}_calls.jsonExportSymbols.java
ExportSymbols.java
Export all symbols: imports, exports, and internal symbols.
Output:
{name}_symbols.json导出所有符号:导入、导出和内部符号。
输出:
{name}_symbols.jsonCommon Workflows
常见工作流
Analyze an Unknown Binary
分析未知二进制文件
bash
mkdir -p ./analysis
{baseDir}/scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis unknown_binary
cat ./analysis/unknown_binary_summary.txt
cat ./analysis/unknown_binary_interesting.txtbash
mkdir -p ./analysis
{baseDir}/scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis unknown_binary
cat ./analysis/unknown_binary_summary.txt
cat ./analysis/unknown_binary_interesting.txtAnalyze Firmware
分析固件
bash
{baseDir}/scripts/ghidra-analyze.sh \
-p "ARM:LE:32:v7" \
-s ExportAll.java \
-o ./firmware_analysis \
firmware.binbash
{baseDir}/scripts/ghidra-analyze.sh \
-p "ARM:LE:32:v7" \
-s ExportAll.java \
-o ./firmware_analysis \
firmware.binQuick Function Listing
快速列出函数
bash
{baseDir}/scripts/ghidra-analyze.sh --no-analysis -s ExportFunctions.java -o . program
cat program_functions.json | jq '.functions[] | "\(.address): \(.name)"'bash
{baseDir}/scripts/ghidra-analyze.sh --no-analysis -s ExportFunctions.java -o . program
cat program_functions.json | jq '.functions[] | "\(.address): \(.name)"'Find Specific Patterns
查找特定模式
bash
undefinedbash
undefinedAfter running ExportDecompiled, search for patterns
运行ExportDecompiled后,搜索模式
grep -n "password|secret|key" output_decompiled.c
grep -n "strcpy|sprintf|gets" output_decompiled.c
undefinedgrep -n "password|secret|key" output_decompiled.c
grep -n "strcpy|sprintf|gets" output_decompiled.c
undefinedArchitecture/Processor IDs
架构/处理器ID
Common processor IDs for the option:
-p| Architecture | Processor ID |
|---|---|
| x86 32-bit | |
| x86 64-bit | |
| ARM 32-bit | |
| ARM 64-bit | |
| MIPS 32-bit | |
| PowerPC | |
-p| 架构 | 处理器ID |
|---|---|
| x86 32位 | |
| x86 64位 | |
| ARM 32位 | |
| ARM 64位 | |
| MIPS 32位 | |
| PowerPC | |
Troubleshooting
故障排除
Ghidra Not Found
未找到Ghidra
bash
{baseDir}/scripts/find-ghidra.shbash
{baseDir}/scripts/find-ghidra.shOr set GHIDRA_HOME if in non-standard location
若安装在非标准位置,设置GHIDRA_HOME
export GHIDRA_HOME=/path/to/ghidra_11.x_PUBLIC
undefinedexport GHIDRA_HOME=/path/to/ghidra_11.x_PUBLIC
undefinedAnalysis Takes Too Long
分析耗时过长
bash
{baseDir}/scripts/ghidra-analyze.sh --timeout 300 -s ExportAll.java binarybash
{baseDir}/scripts/ghidra-analyze.sh --timeout 300 -s ExportAll.java binaryOr skip analysis for quick export
或跳过分析以快速导出
{baseDir}/scripts/ghidra-analyze.sh --no-analysis -s ExportSymbols.java binary
undefined{baseDir}/scripts/ghidra-analyze.sh --no-analysis -s ExportSymbols.java binary
undefinedOut of Memory
内存不足
Set before running:
bash
export MAXMEM=4G运行前设置:
bash
export MAXMEM=4GWrong Architecture Detected
检测到错误的架构
Explicitly specify the processor:
bash
{baseDir}/scripts/ghidra-analyze.sh -p "ARM:LE:32:v7" -s ExportAll.java firmware.bin明确指定处理器:
bash
{baseDir}/scripts/ghidra-analyze.sh -p "ARM:LE:32:v7" -s ExportAll.java firmware.binTips
提示
- Start with ExportAll.java — gives everything; the summary helps orient
- Check interesting.txt — highlights security-relevant functions automatically
- Use jq for JSON parsing — JSON exports are designed to be machine-readable
- Decompilation isn't perfect — use as a guide, cross-reference with disassembly
- Large binaries take time — use and consider
--timeoutfor quick scans--no-analysis
- 从ExportAll.java开始——可获取所有信息,摘要有助于快速了解情况
- 查看interesting.txt——自动高亮显示安全相关函数
- 使用jq解析JSON——导出的JSON格式专为机器可读性设计
- 反编译并非完美——仅作为参考,需与反汇编交叉验证
- 大型二进制文件耗时较长——使用,并考虑使用
--timeout进行快速扫描--no-analysis