3.0 KiB
3.0 KiB
name, description, domain, subdomain, tags, version, author, license, mitre_attack, d3fend, references
| name | description | domain | subdomain | tags | version | author | license | mitre_attack | d3fend | references | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| scripting-ghidra-headless-analysis | Automates batch reverse engineering by generating Ghidra analyzeHeadless commands and post-analysis script skeletons to import, auto-analyze, and export results for many samples without the GUI. Activates for requests to script Ghidra headless analysis, batch-analyze samples with Ghidra, or generate an analyzeHeadless command and post-script. | cybersecurity | reverse-engineering |
|
1.0.0 | analyst-ai-pack | Apache-2.0 |
|
|
|
Scripting Ghidra Headless Analysis
When to Use
- You need to auto-analyze many samples (or re-run a consistent analysis) without the Ghidra GUI.
- You want to generate the
analyzeHeadlesscommand and a post-script that exports functions, strings, or decompiled output.
Do not use this to run untrusted samples — Ghidra analyzes binaries statically and never executes them, but keep the import directory isolated. This skill prepares automation, it does not run the binary.
Prerequisites
- A Ghidra installation (
analyzeHeadlessinsupport/) and the samples to import.
Safety & Handling
- Ghidra does not execute the sample; still store imports in an isolated, defanged directory.
Workflow
Step 1: Generate the headless command
python scripts/analyst.py command --project /proj --name Batch --import ./samples --script export.py
Builds an analyzeHeadless invocation with project path, import directory, post-script, and common
flags (-recursive, -overwrite, -deleteProject optional).
Step 2: Generate a post-analysis script skeleton
python scripts/analyst.py postscript --out export.py --emit functions,strings
Emits a Ghidra Python (Jython) script that iterates functions/strings and writes JSON next to the program.
Step 3: Run and collect
Execute the generated command, then aggregate the per-sample JSON exports.
Step 4: Review
Spot-check a few exports to confirm analysis completeness before scaling up.
Validation
- The generated command references a valid project path, import dir, and existing post-script.
- The post-script uses real Ghidra API calls (
currentProgram,getFunctionManager). - Output JSON is produced per imported program.
Pitfalls
- Forgetting
-overwrite/-recursive, causing skipped or duplicate imports. - Jython 2 syntax constraints in post-scripts (no f-strings).
- Project lock conflicts when running multiple headless jobs on one project.
References
- See
references/api-reference.mdfor the generator. - Ghidra analyzeHeadless and API docs (linked in frontmatter).