Decompilation

June 9, 2023 ยท View on GitHub

Multi-tools

ToolDescriptionLink
RecafRecaf is a multi-tool that bundles CFR, Procyon, and FernFlower in an easy to use UI. It has contextual right-click actions and keybinds to make navigating code similar to an IDE.recaf
Bytecode-ViewerBytecode-Viewer is a multi-tool similar to Helios, but the UI is based on the multi-document-interface layout. This allows viewing different decompilations side by side.bytecode-viewer
The Java DisassemblerA fork of Bytecode-Viewer that removes bloated features and boasts a powerful code-simplification process that automatically cleans up obfuscation. This in turn allows decompilers to more effectively do their job and print cleaner output.The Java Dissassembler
HeliosDISCONTINUED Helios is a multi-tool that bundles CFR, Procyon, FernFlower, Krakatau, and Javap.helios-standalone

Individual

ToolDescriptionLink
CFRCFR is a decompiler focusing on support of modern features (lambdas, string switches, etc.). It has a couple dozen command-line arguments that can tackle different obfuscation strategies. These are documented on the CFR blog. You can check out the source and report bugs on Github.cfr - Source
FernFlowerFernFlower is an analytical decompiler maintained by the IntelliJ community.Source
QuiltFlowerQuiltFlower is a FernFlower fork run by the QuiltMC community. The github repo also links to an IntelliJ plugin and precompiled binaries.Source
JADJAD is an older compiler which is unable to decompile many modern Java features.mirror
jadxJadx is an android dex to Java decompiler capable of also doing simple deobfuscation.Source
JavapJavap is the dissasembler provided in all releases of the JDK. It's simple to use and since its only showing you bytecode and not attempting to transform it into source code, you can trust the output.javap
JDJD is one of the most popular decompilers around. It is capable of producing very legible results on non-obfuscated jars. However simple obfuscation and modern java features (Some generics will suffice) will cause it to crash. It can open modern classes as long as they do not use any modern features.JD - Source
KrakatauKrakatau is a set of 3 bytecode tools, an assembler, disassembler, and decompiler. The decompiler does not focus on recreating the original code of a class, but rather takes some "artistic liberties". This allows it to bypass minor obfuscation that would be shown with a pattern matching decompiler.Source
ProcyonProcyon is more than a decompiler, but is generally used for just that. Works well, but slightly slower than other decompilers.gui-luyten - Source
QuiltFlowerQuiltFlower is a fork of FernFlower that fixes a variety of bugs and generally improves output quality.Source
LinkDescription
Anatomy of a Java DecompilerA journal written by the authors of CFR and Procyon on how Java decompilers work.
The Strengths and Behavioral Quirks of Java Bytecode DecompilersAn academic paper that analyzes the most popular decompilers and compares them using objective metrics.
Step-by-Step Java Decompilation ExampleAn explanation, step-by-step, of how some example bytecode gets translated into legible Java code via decompilation.

(Back to README)