Ghidra is a software reverse engineering framework: you load a compiled program and it disassembles the machine code, decompiles it into readable C-like pseudocode, draws call graphs and lets you rename, annotate and script your way to understanding what the binary does. It handles a long list of processors and executable formats, runs on Windows, macOS and Linux, has a debugger, supports multi-user projects on a shared server and can be scripted in Java or Python through PyGhidra.
It was built inside the National Security Agency's Research Directorate for its own analysts and released as open source in 2019, which made a tool of IDA Pro's class free overnight. Seven years on it has about 96,000 stars, 478 contributors and a steady release train, with Ghidra 12.2 out in October 2026. Malware analysts, CTF players, firmware hackers and game modders use it daily, and community MCP servers now let coding agents drive it.
It is Apache-2.0 licensed with no paid edition. The one thing to know before downloading is the README's own warning: some versions have had security vulnerabilities, so read the advisories page and run the current release.
- Repository: github.com/NationalSecurityAgency/ghidra
- Licence: Apache-2.0 (Apache License 2.0)
- Language: Java. Stars: 96.5K. Forks: 10.9K. Last push: Oct 30, 2026.
- Scan: safe, Nov 1, 2026, commit 4718f50
Who it is for
Security researchers and malware analysts, CTF players, anyone pulling apart firmware or an old game, and students who want to see what a compiler really produced.
Getting started
1. Install a 64-bit JDK 25 first (Temurin builds are free)
https://adoptium.net/temurin/releases2. Download the release zip (not the source archive) and extract it
https://github.com/NationalSecurityAgency/ghidra/releases3. Launch it from the extracted folder (ghidraRun.bat on Windows)
./ghidraRun4. Or launch the Python-first PyGhidra variant
./support/pyghidraRunDo not extract a new release on top of an old one. The GettingStarted document in the install folder covers memory settings and the first project. Analysing malware belongs in a virtual machine, whatever tool you use.
Safety scan
We cloned NationalSecurityAgency/ghidra at commit 4718f50 on Nov 1, 2026 and ran the checks described on the GitHub Tools page: credential patterns, decode-and-execute code, install-time scripts, committed binaries, risky CI workflows, every host the code talks to, known vulnerabilities in pinned dependencies, and project hygiene. A person read every hit. This is what we found.
- Six secret hits in 20,630 files and 3.6 million lines, every one the private-key rule matching the text -----BEGIN in source that handles keys: SSHKeyManager.java parses them, PKIUtilsTest.java holds test fixtures and the BSim launcher writes a key file for its database service. None is a usable key.
- One pattern hit, the persistence rule on a systemctl enable call in the BSim control launcher. BSim is Ghidra's optional function-similarity database, and that code registers it as a service only when an administrator asks it to.
- 32 binaries, all under GPL/DMG: the hfsx and hfsx_dmglib jars and llio DLLs for Windows that let Ghidra open Apple disk images, which are built from the GPL sources in the same folder. The release zips you download are built by the project's own workflow from this tree.
- No lockfiles, so OSV had nothing to query: Gradle fetches the Java dependencies at build time and the release bundles them. Three workflows, none using pull_request_target, with one of twelve action uses from a third party and unpinned. Security policy and contributing guide present; no Dependabot or CodeQL.
- OpenSSF Scorecard 3.4 on 2026-10-26: Maintained and Dangerous-Workflow score 10, Code-Review scores 0 because NSA commits land without GitHub pull request reviews. The 16,000 references to www.apache.org are licence headers; the android.googlesource.com links are source citations.
What the scanner counted
| Check | Result |
|---|---|
| Secrets | 6 candidates found and read; see the notes above. |
| Suspicious code | 1 pattern hit found and read; every one is listed under the raw findings. |
| Install-time code | 2 installer scripts |
| Committed binaries | 32 executable or compiled objects committed; listed under the raw findings. |
| CI workflows | 3 workflows. None use pull_request_target. 1 of 1 third-party action pinned to a tag rather than a commit. |
| Network hosts | 40 distinct hosts referenced from source; most often www.apache.org, android.googlesource.com, github.com, opensource.apple.com. No URLs to bare IP addresses. |
| Known vulnerabilities | No lockfile to check: dependencies are declared as ranges, so what gets installed is whatever is current on the day. |
| Project hygiene | Has security policy, licence file, contributing guide. Missing automated dependency updates, CodeQL. |
| OpenSSF Scorecard | 3.4 out of 10, as of Oct 26, 2026. |
The raw findings
Every hit the scanner wrote out, with a link to the exact line at the scanned commit. Secrets candidates are redacted.
Secret candidates (6, redacted)
| Where | Rule | Match |
|---|---|---|
| Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java:850 | private-key | -----B…--- (27 chars) |
| Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/security/SSHKeyManager.java:107 | private-key | -----B…--- (31 chars) |
| Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/security/SSHKeyManager.java:108 | private-key | -----B…--- (31 chars) |
| Ghidra/Framework/Generic/src/test/java/ghidra/net/PKIUtilsTest.java:517 | private-key | -----B…--- (31 chars) |
| Ghidra/Framework/Generic/src/test/java/ghidra/net/PKIUtilsTest.java:547 | private-key | -----B…--- (31 chars) |
| Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/server/remote/SSHKeyUtil.java:182 | private-key | -----B…--- (31 chars) |
Pattern hits (1)
| Where | Rule | Match |
|---|---|---|
| Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java:1722 | persistence | throw new IOException("systemctl enable failed for " + unit); |
Installer scripts (2)
- Ghidra/Debug/Debugger-rmi-trace/data/support/setuputils.ps1, 130 lines; talks to www.apache.org
- Ghidra/Debug/Debugger-rmi-trace/data/support/setuputils.sh, 149 lines; talks to www.apache.org
Committed binaries (32)
GPL/DMG/data/lib/hfsx.jar: JAR, 982 KBGPL/DMG/data/os/win_x86_32/llio_ia64.dll: PE (Windows executable), 152 KBGPL/DMG/data/os/win_x86_64/llio_ia64.dll: PE (Windows executable), 152 KBGPL/DMG/data/lib/hfsx_dmglib.jar: JAR, 122 KBGhidraDocs/GhidraClass/ExerciseFiles/WinhelloCPP/WinHelloCPP.exe: PE (Windows executable), 111 KBGPL/DMG/data/os/win_x86_32/llio_amd64.dll: PE (Windows executable), 64 KBGPL/DMG/data/os/win_x86_64/llio_amd64.dll: PE (Windows executable), 64 KBGPL/DMG/data/os/win_x86_32/llio_i386.dll: PE (Windows executable), 62 KBGPL/DMG/data/os/win_x86_64/llio_i386.dll: PE (Windows executable), 62 KBGhidra/RuntimeScripts/support/gradle/gradle-wrapper.jar: JAR, 48 KBGhidraDocs/GhidraClass/ExerciseFiles/VersionTracking/WallaceSrc.exe: PE (Windows executable), 34 KBGhidraDocs/GhidraClass/ExerciseFiles/VersionTracking/WallaceVersion2.exe: PE (Windows executable), 34 KBGPL/DMG/data/lib/csframework.jar: JAR, 34 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/animals: ELF, 15 KBGPL/DMG/data/lib/iharder-base64.jar: JAR, 10 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/switch: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/dataMutability: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/compilerVsDecompiler: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/inline: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/custom: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/ldiv: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/setRegister: ELF, 9 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/opaque: ELF, 8 KBGhidraDocs/GhidraClass/ExerciseFiles/Advanced/jumpWithinInstruction: ELF, 8 KB- and 8 more
By the numbers
| Stars | 96.5K |
|---|---|
| Forks | 10.9K |
| Contributors | 478 |
| Commits | 19K |
| Open issues | 1,607 |
| Open pull requests | 559 |
| Releases | 57 |
| Latest release | Ghidra_12.2_build |
| Licence | Apache-2.0 |
| Main language | Java |
| Project age | 7 years |
| Last push | Oct 30, 2026 |
| Tracked files | 20,630 |
| Lines of code | 3.6M |
| Checkout size | 325 MB |
Lines by language: Java 3.3M, C++ 160.8K, HTML 68K, C 49.5K, Python 48.3K, C/C++ header 14.8K.
Questions
Is Ghidra free?
Yes, completely. It is Apache-2.0 open source maintained by the NSA, with no paid tier, no account and no telemetry. The only requirement is a Java Development Kit, which is also free.
Ghidra or IDA Pro?
IDA Pro is the commercial standard with a faster debugger and more polish, and its full version costs thousands. Ghidra's decompiler works for every processor it supports at no cost, which is why many analysts keep both and students start here.
Is it safe to install software from the NSA?
The source has been public since 2019 and the releases are built from it in the open. Our scan found nothing hidden: no network calls home, no unexplained binaries. Treat it like any reverse engineering tool and keep malware samples in a VM.
This post is part of GitHub Tools, where every repository is cloned and scanned before it is written up. The scan is a snapshot of one commit on one day; the repository has moved on since, so check it before you install.
