npx skills add https://github.com/mitsuhiko/agent-stuff --skill ghidra使用 Ghidra 的 analyzeHeadless 工具执行自动化逆向工程。导入二进制文件,运行分析,反编译为 C 代码,并提取有用信息。
| 任务 | 命令 |
|---|---|
| 包含所有导出的完整分析 | ghidra-analyze.sh -s ExportAll.java -o ./output binary |
| 反编译为 C 代码 | ghidra-analyze.sh -s ExportDecompiled.java -o ./output binary |
| 列出函数 | ghidra-analyze.sh -s ExportFunctions.java -o ./output binary |
| 提取字符串 | ghidra-analyze.sh -s ExportStrings.java -o ./output binary |
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
| 获取调用图 | ghidra-analyze.sh -s ExportCalls.java -o ./output binary |
| 导出符号 | ghidra-analyze.sh -s ExportSymbols.java -o ./output binary |
| 查找 Ghidra 路径 | find-ghidra.sh |
brew install --cask ghidra该技能会自动在常见的安装路径中定位 Ghidra。如果 Ghidra 安装在非标准位置,请设置 GHIDRA_HOME 环境变量。
./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> - 每个文件的分析超时时间--keep-project - 分析后保留 Ghidra 项目--project-dir <dir> - Ghidra 项目目录(默认:/tmp)--project-name <name> - 项目名称(默认:自动生成)-v, --verbose - 详细输出综合导出 - 运行所有其他导出并创建摘要。适用于初始分析。
输出文件:
{name}_summary.txt - 概述:架构、内存段、函数数量
{name}_decompiled.c - 所有函数反编译为 C 代码
{name}_functions.json - 包含签名和调用的函数列表
{name}_strings.txt - 找到的所有字符串
{name}_interesting.txt - 匹配安全相关模式的函数
./scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis firmware.bin
将所有函数反编译为 C 伪代码。
输出: {name}_decompiled.c
./scripts/ghidra-analyze.sh -s ExportDecompiled.java -o ./output program.exe
将函数列表导出为 JSON,包含地址、签名、参数和调用关系。
输出: {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"]
}
]
}
提取所有字符串(ASCII、Unicode)及其地址。
输出: {name}_strings.json
./scripts/ghidra-analyze.sh -s ExportStrings.java -o ./output malware.exe
导出函数调用图,显示调用者/被调用者关系。
输出: {name}_calls.json
包含:
导出所有符号:导入、导出和内部符号。
输出: {name}_symbols.json
# 创建输出目录
mkdir -p ./analysis
# 运行综合分析
./scripts/ghidra-analyze.sh -s ExportAll.java -o ./analysis unknown_binary
# 首先查看摘要
cat ./analysis/unknown_binary_summary.txt
# 查看有趣的模式(加密、网络、危险函数)
cat ./analysis/unknown_binary_interesting.txt
# 检查特定的反编译函数
grep -A 50 "encrypt" ./analysis/unknown_binary_decompiled.c
# 为固件指定 ARM 架构
./scripts/ghidra-analyze.sh \
-p "ARM:LE:32:v7" \
-s ExportAll.java \
-o ./firmware_analysis \
firmware.bin
# 仅获取函数名称和地址(更快)
./scripts/ghidra-analyze.sh --no-analysis -s ExportFunctions.java -o . program
# 使用 jq 解析
cat program_functions.json | jq '.functions[] | "\(.address): \(.name)"'
# 运行 ExportDecompiled 后,搜索模式
grep -n "password\|secret\|key" output_decompiled.c
grep -n "strcpy\|sprintf\|gets" output_decompiled.c
for bin in ./samples/*; do
name=$(basename "$bin")
./scripts/ghidra-analyze.sh -s ExportAll.java -o "./results/$name" "$bin"
done
-p 选项的常见处理器 ID:
| 架构 | 处理器 ID |
|---|---|
| x86 32 位 | x86:LE:32:default |
| x86 64 位 | x86:LE:64:default |
| ARM 32 位 | ARM:LE:32:v7 |
| ARM 64 位 | AARCH64:LE:64:v8A |
| MIPS 32 位 | MIPS:BE:32:default 或 MIPS:LE:32:default |
| PowerPC | PowerPC:BE:32:default |
查找所有可用的处理器:
ls "$(dirname $(./scripts/find-ghidra.sh))/../Ghidra/Processors/"
# 检查 Ghidra 是否已安装
./scripts/find-ghidra.sh
# 如果安装在非标准位置,请设置 GHIDRA_HOME
export GHIDRA_HOME=/path/to/ghidra_11.x_PUBLIC
./scripts/ghidra-analyze.sh ...
# 设置超时时间(秒)
./scripts/ghidra-analyze.sh --timeout 300 -s ExportAll.java binary
# 跳过分析以快速导出
./scripts/ghidra-analyze.sh --no-analysis -s ExportSymbols.java binary
编辑 analyzeHeadless 脚本或设置:
export MAXMEM=4G
显式指定处理器:
./scripts/ghidra-analyze.sh -p "ARM:LE:32:v7" -s ExportAll.java firmware.bin
--timeout 并考虑使用 --no-analysis 进行快速扫描每周安装次数
135
仓库
GitHub 星标数
1.8K
首次出现时间
2026年1月22日
安全审计
安装于
codex126
gemini-cli124
opencode121
cursor120
github-copilot109
claude-code105
Perform automated reverse engineering using Ghidra's analyzeHeadless tool. Import binaries, run analysis, decompile to C code, and extract useful information.
| 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 |
brew install --cask ghidraThe skill automatically locates Ghidra in common installation paths. Set GHIDRA_HOME environment variable if Ghidra is installed in a non-standard location.
./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)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
Decompile all functions to C pseudocode.
Output: {name}_decompiled.c
./scripts/ghidra-analyze.sh -s ExportDecompiled.java -o ./output program.exe
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"]
}
]
}
Extract all strings (ASCII, Unicode) with addresses.
Output: {name}_strings.json
./scripts/ghidra-analyze.sh -s ExportStrings.java -o ./output malware.exe
Export function call graph showing caller/callee relationships.
Output: {name}_calls.json
Includes:
Export all symbols: imports, exports, and internal symbols.
Output: {name}_symbols.json
# 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
# Specify ARM architecture for firmware
./scripts/ghidra-analyze.sh \
-p "ARM:LE:32:v7" \
-s ExportAll.java \
-o ./firmware_analysis \
firmware.bin
# 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)"'
# After running ExportDecompiled, search for patterns
grep -n "password\|secret\|key" output_decompiled.c
grep -n "strcpy\|sprintf\|gets" output_decompiled.c
for bin in ./samples/*; do
name=$(basename "$bin")
./scripts/ghidra-analyze.sh -s ExportAll.java -o "./results/$name" "$bin"
done
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 |
Find all available processors:
ls "$(dirname $(./scripts/find-ghidra.sh))/../Ghidra/Processors/"
# Check if Ghidra is installed
./scripts/find-ghidra.sh
# Set GHIDRA_HOME if in non-standard location
export GHIDRA_HOME=/path/to/ghidra_11.x_PUBLIC
./scripts/ghidra-analyze.sh ...
# Set a timeout (seconds)
./scripts/ghidra-analyze.sh --timeout 300 -s ExportAll.java binary
# Skip analysis for quick export
./scripts/ghidra-analyze.sh --no-analysis -s ExportSymbols.java binary
Edit the analyzeHeadless script or set:
export MAXMEM=4G
Explicitly specify the processor:
./scripts/ghidra-analyze.sh -p "ARM:LE:32:v7" -s ExportAll.java firmware.bin
--timeout and consider --no-analysis for quick scansWeekly Installs
135
Repository
GitHub Stars
1.8K
First Seen
Jan 22, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
codex126
gemini-cli124
opencode121
cursor120
github-copilot109
claude-code105
OpenClaw 安全 Linux 云部署指南:私有优先、SSH隧道、Podman容器化
36,400 周安装
Genkit JS 开发指南:AI 应用构建、错误排查与最佳实践
134 周安装
Azure 可观测性服务指南:Monitor、App Insights、Log Analytics 监控与 KQL 查询
102,200 周安装
Azure 配额管理指南:服务限制、容量验证与配额增加方法
105,700 周安装
Microsoft Entra应用注册指南:Azure AD应用配置、API权限与OAuth流程详解
103,100 周安装
Azure 验证工具 - Microsoft GitHub Copilot for Azure 部署前检查指南
103,100 周安装
Azure资源可视化工具 - 自动生成架构图,分析资源依赖关系
103,100 周安装
--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 outputPowerPC:BE:32:default