JAD description
A program that reads one or more Java class files and converts them into Java source files which can be compiled again.
JAD is a decompiler for Java, i.e. program that reads one or more Java class files and converts them into Java source files which can be compiled again.
Jad is a 100% pure C++ program and it generally works several times faster than decompilers written in Java. Jad doesn't use the Java runtime for its functioning, therefore no special setup is required (like changes to the CLASSPATH variable).
Jad can be used:
· For recovering lost source codes;
· For exploring the sources of Java runtime libraries;
· As a Java disassembler;
· As a Java source code cleaner and beautifier.
Jad expects that supplied Java class files are valid ones, i.e. they can pass the Java Virtual Machine (JVM) verification successfully.
Here are some key features of "JAD":
· Enhanced readability of the generated source code.
·
Ability to comment Java source code with JVM bytecodes. Useful for verification and educational purposes.
· Full support for inner and anonymous classes.
· Fast decompilation and simple setup.
· Automatic conversion of identifiers garbled by Java obfuscators into valid ones.
· Free for non-commercial use. If you would like to use Jad for commercial purposes, please contact me for conditions.
Limitations:
· In certain cases when decompiling classes which contain inner classes, Jad cannot reliably sort out the extra arguments added to class constructors by Java compiler. In those cases Jad can generate constructors with an incorrect number of arguments or can fail to declare some local variables as final
· ZIP and JAR files are not supported. However you can unzip those files and decompile the whole class tree. Use the instructions from Readme.txt.
· In those rare cases when Jad is unable to fully decompile constructs like labeled blocks with breaks or nested loops with inter-loop break/continue statements it generates the source with labels and goto statements which reflects program's control flow and displays the message "Couldn't fully decompile method
". Also when Jad couldn't reconstruct all try-catch-finally statements it displays the message "Couldn't resolve all exception handlers in method ".
· Currently Jad ignores the contents of the Line Number Table Attribute and the Source File Attribute.
· Currently Jad makes no use of the Java class hierarchy information. Consequently, Jad always chooses java.lang.Object as a common superclass of two different classes and inserts auxiliary casts where necessary.
· Jad doesn't handle inlined functions well.