Byte codes generated by javac compiler can again be converted into java source. For this we need a decompiler tool. Decompilers are the utilities that generate the source code from input java class file. A Decompiler knows about the structure of a Java class and parse it to generated Java source code. Java decompilers will not give the exact Java source file from which class was generated and executed by Java Virtual Machine. But most of the structure will be maintained.from here. Update: JAD’s site is down hence you can download it from this link. I have used a simple Hello World java class to demonstrate JAD decompiler. Following is the code of HelloWorld.java file.
JAD: Java Decompiler
A lot of Decompilers are available in the market to decompile a class file. We will use one of the free decomipler called JAD. You can download JAD compilerpublic class HelloWorld {
public static void main(String args[]) {
String fooBar = "Hello World from Java.";
System.out.println(fooBar);
}
}
Code language: Java (java)
Use following output when we use command line utility JAD to decompile our class file.The source file output of JAD is in file with .jad extension. You can change the extension to .java. Following is the source that you get after decompillng our HelloWorld.class file.Code language: HTML, XML (xml)$> jad HelloWorld.class Parsing HelloWorld.class... Generating HelloWorld.jad
// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://www.kpdus.com/jad.html
// Decompiler options: packimports(3)
// Source File Name: HelloWorld.java
import java.io.PrintStream;
public class HelloWorld
{
public HelloWorld()
{
}
public static void main(String args[])
{
String s = "Hello World from Java.";
System.out.println(s);
}
}
Code language: Java (java)
Note that the string variable that we used in our original Java class was fooBar and it got changed into s. Any idea why so?
The reason for the change is Refactorization/Optimization , when the compiler is compiling the source it`s grabbing the long variable names in this case “FooBar” and replace it to some shorter versions for example “s” i think that most of the compilers are doing it.
Your wordpress theme generates an error:
Warning: ob_start() [ref.outcontrol]: output handler ‘ob_gzhandler’ cannot be used twice in /home/viralpat/public_html/blogs/wp-content/themes/wp-max/header.php on line 1
Hi Jakob,
Thanks for pointing out the error. Actually I was trying to enable GZip compression for my website and hence was playing with .htaccess ;)
Are you still getting the error?
Hi Viral,
It is very good tool.
But currently it is not existing.
Here i have a lot of list of available decompilers.
Just see,It is very useful
http://yuvadeveloper.blogspot.com/2009/03/java-decompilers-class-to-java-file.html
The page http://www.kpdus.com/jad.html#download expired in late February. Is there another place I can dl the executable?
Thanks kungfugeek, I have updated the link. You can download JAD from this site.
hope you will not mind if I link your “jad.zip” download from my Blog
Thanks
Freddie
Hi FreddieMaize, You can link to jad.zip from your site. No problem :)
To achieve better results (including for Java 1.5+ classes) in decompilation, process the classes with JadRetro (jadretro.sf.net) tool before decompiling them by Jad.
Of course, it doesn’t help in your case with “fooBar” variable because javac doesn’t put local variable names to the generated class file unless instructed to do so (-g:vars).
Thank you for sharing so much information. May be this information would help me in developing an application in future. Right now i am excited to go to attend the Sun Tech Days 2010 conference in Hyderabad. Experts are going to share ideas on new technologies there.
hiiiiiiiiiiiii,
good site but some clear idea about java decaffinator.plz require that information.
There is another java decompiler:
http://www.neshkov.com/ac_decompiler.html
AndroChef successfully decompiles obfuscated Java 6 and Java 7 .class and .jar files. It is simple but powerful tool that allows you to decompile Java and Dalvik bytecode (DEX, APK) into readable Java source.
Good tool.
jd-gui-0.3.5.windows– this is good.
thank you
thanks
buddy u rock………….thanks alot
thanks a lot Mr. Viral Patel, keep posting :)
just trying to download but the download dialog doesn’t appear
it’s urgent do something plzzzzzzzzz the link doesn’t work
this is a old post, but i learned something that the java file decompiled from .class is not the original one. :)