JD-GUI, a standalone graphical utility that displays Java sources from CLASS files with enhanced security analysis capabilities.
- Java Decompiler projects home page: http://java-decompiler.github.io
- Original JD-GUI source code: https://github.com/java-decompiler/jd-gui
JD-GUI is a standalone graphical utility that displays Java source codes of ".class" files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.
- SHA-256 Hash Generation: Generate cryptographic hashes for .class files with clipboard integration
- VirusTotal Integration: Direct API integration for malware detection and security analysis
- Multi-file Processing: Bulk security scanning with Ctrl+click multi-select support
- Enhanced Build System: Modern Gradle wrapper with Windows executable generation (.exe)
- Consolidated Architecture: Optimized codebase with eliminated duplicate implementations
- Java 8 or higher (Java 8 recommended for compatibility)
- Git with submodule support
# Clone the repository
> git clone https://github.com/java-decompiler/jd-gui.git
> cd jd-gui
# Initialize and clone the JD-Core submodule (REQUIRED)
> git submodule init
> git submodule update
# Build the project
> ./gradlew buildTo build a Windows executable (.exe):
> ./gradlew buildExeThis generates: build/launch4j/jd-gui.exe
Generate IDE project files for development:
# Generate IntelliJ IDEA project files
> ./gradlew idea
# Generate Eclipse project files
> ./gradlew eclipseThe build process generates:
build/libs/jd-gui-x.y.z.jar- Main application JARbuild/libs/jd-gui-x.y.z-min.jar- Minified JARbuild/launch4j/jd-gui.exe- Windows executablebuild/distributions/jd-gui-windows-x.y.z.zip- Windows distributionbuild/distributions/jd-gui-osx-x.y.z.tar- macOS distributionbuild/distributions/jd-gui-x.y.z.deb- Debian packagebuild/distributions/jd-gui-x.y.z.rpm- RPM package
- Double-click on "jd-gui-x.y.z.jar"
- Double-click on "jd-gui.exe" application from Windows
- Double-click on "JD-GUI" application from Mac OSX
- Execute "java -jar jd-gui-x.y.z.jar" or "java -classpath jd-gui-x.y.z.jar org.jd.gui.App"
- Open a file with menu "File > Open File..."
- Open recent files with menu "File > Recent Files"
- Drag and drop files from your file explorer
Right-click on any .class file in the tree view to access:
- Generate SHA256 Hash - Calculate and display the cryptographic hash of the class file
- Hash is automatically copied to clipboard for easy verification
Enhanced security analysis with VirusTotal API integration:
For End Users:
- Get API Key: Go to VirusTotal API Keys and get your free API key
- Configure: In JD-GUI, go to
File > Preferences > VirusTotaland enter your API key - Rate Limiting: Set appropriate rate limits (1 second for free API, 0.25 for paid)
For Developers (Secure Setup):
- Create .env file: Copy
.env.exampleto.envin the project root - Add your API key: Edit
.envand addVIRUSTOTAL_API_KEY=your_actual_key_here - Never commit .env: The
.envfile is gitignored for security - CI/CD: GitHub Actions uses
VIRUSTOTAL_API_KEYsecret for testing
Right-click on any .class file to access:
- Open in VirusTotal - Opens browser to VirusTotal with the file's SHA256 hash
- Check VirusTotal - Direct API lookup showing detection results in a dialog
- Bulk Check VirusTotal - Scan multiple selected files (use Ctrl+click to select multiple)
- Multi-select Support: Hold Ctrl and click multiple .class files, then right-click for bulk operations
- Progress Tracking: Real-time progress dialog with cancellation support
- Results Table: Shows file names, SHA256 hashes, detection counts, and status
- Detection Logic:
- Shows actual detection count for files found on VirusTotal
- Shows
-1for files not found in VirusTotal database - Clean files show
0detections
- Free API: 4 requests per minute (1 second between requests recommended)
- Paid API: Higher limits available (0.25 second intervals supported)
- Automatic Rate Limiting: Built-in delays prevent API quota exceeded errors
> ./gradlew idea
generate Idea Intellij project
> ./gradlew eclipse
generate Eclipse project
> java -classpath jd-gui-x.y.z.jar;myextension1.jar;myextension2.jar org.jd.gui.App
launch JD-GUI with your extensions
- Java: Delete "jd-gui-x.y.z.jar" and "jd-gui.cfg".
- Mac OSX: Drag and drop "JD-GUI" application into the trash.
- Windows: Delete "jd-gui.exe" and "jd-gui.cfg".
Released under the GNU GPL v3.
Did JD-GUI help you to solve a critical situation? Do you use JD-Eclipse daily? What about making a donation?


