5 min read

Ghidra: The NSA's Free Reverse Engineering Suite (GitHub, Scanned)

Disassemble, decompile and script your way through compiled programs with the NSA's open-source reverse engineering suite.

Ghidra logo
✅
Scan: safe. Nothing malicious. The six private-key hits are the PEM header text inside Ghidra's own SSH and certificate code and its tests, and the 32 committed binaries are the GPL libraries that read Apple disk images. Scanned Nov 1, 2026; the full report is below.

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.

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/releases

2. Download the release zip (not the source archive) and extract it

https://github.com/NationalSecurityAgency/ghidra/releases

3. Launch it from the extracted folder (ghidraRun.bat on Windows)

./ghidraRun

4. Or launch the Python-first PyGhidra variant

./support/pyghidraRun

Do 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

CheckResult
Secrets6 candidates found and read; see the notes above.
Suspicious code1 pattern hit found and read; every one is listed under the raw findings.
Install-time code2 installer scripts
Committed binaries32 executable or compiled objects committed; listed under the raw findings.
CI workflows3 workflows. None use pull_request_target. 1 of 1 third-party action pinned to a tag rather than a commit.
Network hosts40 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 vulnerabilitiesNo lockfile to check: dependencies are declared as ranges, so what gets installed is whatever is current on the day.
Project hygieneHas security policy, licence file, contributing guide. Missing automated dependency updates, CodeQL.
OpenSSF Scorecard3.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)
WhereRuleMatch
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java:850private-key-----B…--- (27 chars)
Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/security/SSHKeyManager.java:107private-key-----B…--- (31 chars)
Ghidra/Framework/FileSystem/src/main/java/ghidra/framework/remote/security/SSHKeyManager.java:108private-key-----B…--- (31 chars)
Ghidra/Framework/Generic/src/test/java/ghidra/net/PKIUtilsTest.java:517private-key-----B…--- (31 chars)
Ghidra/Framework/Generic/src/test/java/ghidra/net/PKIUtilsTest.java:547private-key-----B…--- (31 chars)
Ghidra/Test/IntegrationTest/src/test.slow/java/ghidra/server/remote/SSHKeyUtil.java:182private-key-----B…--- (31 chars)
Pattern hits (1)
WhereRuleMatch
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/BSimControlLaunchable.java:1722persistencethrow new IOException("systemctl enable failed for " + unit);
Installer scripts (2)
Committed binaries (32)
  • GPL/DMG/data/lib/hfsx.jar: JAR, 982 KB
  • GPL/DMG/data/os/win_x86_32/llio_ia64.dll: PE (Windows executable), 152 KB
  • GPL/DMG/data/os/win_x86_64/llio_ia64.dll: PE (Windows executable), 152 KB
  • GPL/DMG/data/lib/hfsx_dmglib.jar: JAR, 122 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/WinhelloCPP/WinHelloCPP.exe: PE (Windows executable), 111 KB
  • GPL/DMG/data/os/win_x86_32/llio_amd64.dll: PE (Windows executable), 64 KB
  • GPL/DMG/data/os/win_x86_64/llio_amd64.dll: PE (Windows executable), 64 KB
  • GPL/DMG/data/os/win_x86_32/llio_i386.dll: PE (Windows executable), 62 KB
  • GPL/DMG/data/os/win_x86_64/llio_i386.dll: PE (Windows executable), 62 KB
  • Ghidra/RuntimeScripts/support/gradle/gradle-wrapper.jar: JAR, 48 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/VersionTracking/WallaceSrc.exe: PE (Windows executable), 34 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/VersionTracking/WallaceVersion2.exe: PE (Windows executable), 34 KB
  • GPL/DMG/data/lib/csframework.jar: JAR, 34 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/animals: ELF, 15 KB
  • GPL/DMG/data/lib/iharder-base64.jar: JAR, 10 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/switch: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/dataMutability: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/compilerVsDecompiler: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/inline: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/custom: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/ldiv: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/setRegister: ELF, 9 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/opaque: ELF, 8 KB
  • GhidraDocs/GhidraClass/ExerciseFiles/Advanced/jumpWithinInstruction: ELF, 8 KB
  • and 8 more

By the numbers

Stars96.5K
Forks10.9K
Contributors478
Commits19K
Open issues1,607
Open pull requests559
Releases57
Latest releaseGhidra_12.2_build
LicenceApache-2.0
Main languageJava
Project age7 years
Last pushOct 30, 2026
Tracked files20,630
Lines of code3.6M
Checkout size325 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.