diff --git a/jode/jode-unix.html b/jode/jode-unix.html new file mode 100644 index 0000000..ad4acf4 --- /dev/null +++ b/jode/jode-unix.html @@ -0,0 +1,96 @@ + + +
+/usr/lib/java
.
+For other installations you have to adopt the paths. Also I use the
+bourne shell syntax.
+
+java.*
class files.
++export CLASSPATH=$HOME/jode_cls.zip:$HOME/download:/usr/lib/java/lib/classes.zip ++
+java jode.JodeWindow ++
jode.JodeWindow
and
+ you may push start immediately to decompile this class.
+.class
file, enter
+ the name of the file without .class
extension and
+ push the start button. Change the class path if it doesn't point
+ to the right directory.
++java jode.Decompiler ++and get a list of the supported parameters. To decompile the whole +decompiler you can use these magic lines: +
+mkdir src +CLASSPATH=jode_cls.zip java jode.Decompiler --dest src \ + `unzip -v jode_cls.zip|grep .class|cut -c59-|sed s/.class//|sed s?/?.?g` ++ +
+CLASSPATH=jode_cls.zip java jode.Obfuscator ++ +As a hint, to obfuscate the obfuscator use the following command line: +
+CLASSPATH=jode_cls.zip java jode.Obfuscator \ + -cp jode_cls.zip:/usr/lib/java/lib/classes.zip -d obfuscated.zip \ + -weak -revtable translate.tbl -swaporder \ + -preserve jode.Obfuscator.main jode ++ +The options
-unique
and -table
can be
+helpful to deobfuscate obfuscated code.
+
+
+
diff --git a/jode/jode-useapplet.html b/jode/jode-useapplet.html
new file mode 100644
index 0000000..6bb049a
--- /dev/null
+++ b/jode/jode-useapplet.html
@@ -0,0 +1,48 @@
+
+
+
+.class
file or zip
file, you
+ want to decompile, to that directory.
+.
' (without quotes).
+ You may also specify a zip or jar file here. Note that applet and
+ class files must be in the same directory due to security policy. .class
+ extension.
+c:\jdk1.2\java
) may differ. java.*
class files.
++set CLASSPATH=c:\temp\jode_cls.zip;c:\temp;c:\jdk1.2\jre\lib\rt.jar ++
+c:\jdk1.2\java jode.JodeWindow ++
jode.JodeWindow
and
+ you may push start immediately to decompile this class.
+.class
file, enter
+ the name of the file without .class
extension and
+ push the start button. Change the class path if it doesn't point
+ to the right directory.
++c:\jdk1.2\java jode.Decompiler ++and get a list of the supported parameters. + diff --git a/jode/jode.html b/jode/jode.html new file mode 100644 index 0000000..a006520 --- /dev/null +++ b/jode/jode.html @@ -0,0 +1,112 @@ + + + +
This is a decompiler for java I have written in my spare time. It
+takes class-files as input and produces something similar to the
+original java-File. Of course this can't be perfect: There is no way
+to produce the comments or the names of local variables (except when
+compiled with -g
) and there are often more ways to write
+the same thing. But it does its job quite well.
You can donwload the files in zip form.
+The sources contain only the
+java
files, the classes
+contain only the class
files.
RCS
directories. This is the form I maintain the
+project, but you probably need unix and a few tools to use them.
+
+I have some simple step by step pages. There are three +possibilities: +
There may be situations, where the code doesn't understand complex +expressions. In this many ugly temporary variables are used, but the +code should still be compileable. This does especially happen when +you compile with `-O' flag and javac has inlined some methods.
+ +Sometimes this program may exit with an Exception
or
+produce incorrect code. Most time the code can't be compiled, so that
+it can be easily spotted. If you have one of these problems (except
+those that occur on some of the jode.test
files, I would
+be very interested in a bug report (including the class
+file, if possible).
Sometimes it generates some GOTO
expression and
+labels. This can't be compiled, but shouldn't happen any more with
+javac or jikes.
It doesn't handle inner and anonymous classes, yet. You can
+decompile them separately, though (use `+$
' switch under
+jikes), but there is a bug in javac, so that a final variable is twice
+initialized. If you encounter this problem just remove the doubled
+line by hand.
Someday I found guavad
, a disassembler for java byte
+code (it does similar things like javap -c
). I used
+it on a class file, and found that it was possible to reconstruct the
+original java code. First I did it by hand on some small routines,
+but I soon realized that it was a rather stupid task, and that I could
+write a perl
script
+that does the same. At the end of the next day I had a working
+decompiler.
Now while it was working, it was not easy to use. You had to
+decompile the code first with a disassembler, cut the method, you
+wanted to decompile and then run the perl script on it. So I decided
+to get some information of the class files and do this all
+automatically. I decided to write it in java
now,
+because it suited best.
Just for the records: the java code is now nearly 50 times bigger +than the original perl script and is still growing.
+ +This code is under GNU GPL. That basically means, that you can copy +or modify this code, as long as you put all your modification under +the GPL again. Look +here for the complete license.
+ ++http://www.informatik.uni-oldenburg.de/~delwi/jode/jode.html, last +updated on 08-Mar-1999.
+ + + diff --git a/jode/test/Unreach.java b/jode/test/Unreach.java new file mode 100644 index 0000000..3ea149e --- /dev/null +++ b/jode/test/Unreach.java @@ -0,0 +1,29 @@ +package jode.test; + +/* A test class submitted by dave@onekiwi.demon.co.uk */ +class Unreach +{ + static int j = 0; + final double[] d = {0.5, 0.4, 0.3}; // won't decompile + + public static final void m(int i) throws Exception { + switch (i) { + case 1: + j += 2; + for (;;) { + j += 3; + switch (j) { + case 2: + break; + default: + j += 4; + return; + } + } + // An unreachable break is inserted here + default: + j += 5; // decompiles as j = j + 1; -- not quite optimal + } + } +} +