Skip to content

Latest commit

 

History

History
36 lines (28 loc) · 4.7 KB

decompilation.md

File metadata and controls

36 lines (28 loc) · 4.7 KB

Decompilation

Multi-tools

Tool Description Link
Recaf Recaf 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-Viewer Bytecode-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 Disassembler A 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
Helios DISCONTINUED Helios is a multi-tool that bundles CFR, Procyon, FernFlower, Krakatau, and Javap. helios-standalone

Individual

Tool Description Link
CFR CFR 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
FernFlower FernFlower is an analytical decompiler maintained by the IntelliJ community. Source
QuiltFlower QuiltFlower is a FernFlower fork run by the QuiltMC community. The github repo also links to an IntelliJ plugin and precompiled binaries. Source
JAD JAD is an older compiler which is unable to decompile many modern Java features. mirror
jadx Jadx is an android dex to Java decompiler capable of also doing simple deobfuscation. Source
Javap Javap 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
JD JD 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
Krakatau Krakatau 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
Procyon Procyon is more than a decompiler, but is generally used for just that. Works well, but slightly slower than other decompilers. gui-luyten - Source
QuiltFlower QuiltFlower is a fork of FernFlower that fixes a variety of bugs and generally improves output quality. Source

Relevant links

Link Description
Anatomy of a Java Decompiler A journal written by the authors of CFR and Procyon on how Java decompilers work.
The Strengths and Behavioral Quirks of Java Bytecode Decompilers An academic paper that analyzes the most popular decompilers and compares them using objective metrics.
Step-by-Step Java Decompilation Example An explanation, step-by-step, of how some example bytecode gets translated into legible Java code via decompilation.

(Back to README)