Skip navigation
ozizka

Java Decompilers, 2014

Posted by ozizka May 6, 2014

In case you would like to use a Java Decompiler...

 

Until recently, all of them are either unstable, or obsolete, or not finished, or commercial, or - in the best case - all of that. And if not - then they were commercial.

The obsoletnes typically proved as the fact that they can only decompile JDK 1.3 bytecode.

 

The only so-so working solution was to take the .class file and pre-process it so it becomes JDK 1.3 compatible, and then run JaD over it (one of those better old decompilers).

 

The situation was a bit chaotic as many of the sites are down, some decompilers used multiple names or had the originality level 6000 of naming itself "Decompiler" or "Java Decompiler", or JD, JaD, JADE, JODE, JDec, etc. in better case, but changing these abbrevs over time.

 

But recently, a new wave of decompilers is coming: Procyon, CFR, Krakatau, Candle, JBVD, EDJC.

Here's a list of decompilers as of May 2014.

 

 

Available decompilers

 

 

Procyon - https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

2014. JDK 5, partly 6. Written in Java. Worth trying.

 

CFR - http://www.benf.org/other/cfr/

2014. JDK 6, 7, 8 support. Written in Java 6.

“CFR by Lee Benfield is well on its way to becoming the premier Java Decompiler. Lee and I actually work for the same company and share regression tests. We're engaged in a friendly competition to see who can deliver a better decompiler. Based on his progress thus far, there's a very good chance he will win--at least on decompiling obfuscated code :)”

Candle - https://github.com/bradsdavis/candle-decompiler

2013. Written in Java. By Brad Davis @ RH. “only decompiles a subset of the JVM operations”.

Krakatau - https://github.com/Storyyeller/Krakatau

2014.  JDK 7 support? Written in Python.

“Includes a robust verifier. Focuses on translating arbitrary bytecode into valid Java code, as opposed to reconstructing the original code.”

JBVD - https://sourceforge.net/projects/jbdec/?source=directory

2013. Academic Free License (AFL). Javassist approach. Unknown quality.

EDJC - https://sourceforge.net/projects/ejdc/

2011. Written in Java.

 

JD - http://jd.benow.ca/

JD-Core and JD-GUI are written in C++.

 

FernFlower - http://ww1.reversed-java.com/fernflower/ (site doesn’t work)

Quite good, but no idea where to get it. Supposedly at MCP - http://mcp.ocean-labs.de

Also here: http://forum.xda-developers.com/showthread.php?t=2029842

 

“Hello, I would like to share this java decompiler with the community. FernFlower is the first analytic decompiler for java. It will decompile class files and jar files to human readable java code. Unlike JD-GUI it does not decompile to byte code. It also will deobfuscate the source if you ask it to. This tool should work well with dex2jar. The files are attached. It requires java to run.”

 

DCompiler - http://dcompiler.sourceforge.net/

2002. Seems to be unstable.

 

JaD - http://java.decompiler.free.fr/ (site doesn’t work)

Commercial, no fee for noncommercial use, no source code.

Needs JadRetro http://jadretro.sourceforge.net/

 

JDec - http://jdec.sourceforge.net/

GPL. Last update 2007.

 

Mocha - http://www.brouhaha.com/~eric/software/mocha/

Last release 1996…

 

SourceTec Java Decompiler

Commercial, patch to Mocha.

 

JADO

JDK 1.3; Free, GPL, not actively maintained

 

HomeBrew Decompiler - http://freecode.com/projects/homebrewdecompiler

0.2.2 in 2002. Free, GPL. Written in C++.

 

JODE http://jode.sourceforge.net/

2002, supports JDK 1.3. Free, GPL.

 

JReversePro - http://jreversepro.blogspot.hu/

2008 - reportedly, a beta released. Otherwise it seems 2002. Free, GPL. Written in Java.

 

DJ - http://dj.navexpress.com/

Pretty bad. "freeware", no source code.

 

CavaJ - http://cavaj-java-decompiler.en.softonic.com/

Pretty bad.

 

 

Sources

So, TinkerPop is kind of set of libraries over Blueprints, a standardized API to access graph databases.

 

Of which Frames is something allowing wrapping the contents of the graph into Java objects.

Which is great, but in the current version, TinkerPop 2.5.0, the functionality is quite basic.

 

For example, you can't query for all objects of some class. You would expect this to be done, as it's not that hard to implement.

 

Thanks to Jesse Sightler who is working on this Frames "extension" in the Windup project.

Filter Blog

By date:
By tag: