Initial revision

git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@350 379699f6-c40d-0410-875b-85095c16579e
stable
jochen 26 years ago
parent 318e664b1e
commit 6eab48d761
  1. 96
      jode/jode-unix.html
  2. 48
      jode/jode-useapplet.html
  3. 62
      jode/jode-win.html
  4. 112
      jode/jode.html
  5. 29
      jode/test/Unreach.java

@ -0,0 +1,96 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Using the decompiler under Unix</title>
</head>
<body>
<a href="../index.html">Home</a> <a href="jode.html">Up</a> <br>
<h1>Step by Step</h1>
You need java version 1.1 or higher. In the following description I
assume you have the JDK 1.1, residing in <code>/usr/lib/java</code>.
For other installations you have to adopt the paths. Also I use the
bourne shell syntax.
<ol>
<li> Set the classpath. It should include the jode_cls.zip as well as
the directory where the class files you want to decompile resides.
You can also specify a zip file instead of a directory. It is
also a good idea to include the zip resp. jar file containing the
basic <code>java.*</code> class files.
<pre>
export CLASSPATH=$HOME/jode_cls.zip:$HOME/download:/usr/lib/java/lib/classes.zip
</pre>
</li>
<li> Now you can start the graphical interface as following (Note the
case of the parameter)
<pre>
java jode.JodeWindow
</pre>
</li>
<li> The classpath field should already contain the classpath you set
above. The class field contains <code>jode.JodeWindow</code> and
you may push start immediately to decompile this class.
</li>
<li> If you want to decompile your own <code>.class</code> file, enter
the name of the file without <code>.class</code> extension and
push the start button. Change the class path if it doesn't point
to the right directory.
</li>
<li> After decompiling, you can save the file using the save button.
</li>
</ol>
<h1>Packaged classes</h1>
If the class file belongs to a package (like jode.JodeWindow) you
have to give the full qualified class name (the package names
separated by a dot followed by the class name). The class path should
point to the directory containing the package sub directories in this
case. <br><br>
<h1>Command line utility</h1>
There is also a command line utility which is much more powerful, but
also more difficult to use. You can start it (after setting the
classpath) with
<pre>
java jode.Decompiler
</pre>
and get a list of the supported parameters. To decompile the whole
decompiler you can use these magic lines:
<pre>
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`
</pre>
<h1>Obfuscator</h1>
So you want to protect your classes from decompiling? Well that is
your choice. You may use my obfuscator. The class files are
decompileable again (except when using -strong option, but this is
reversable by obfuscating again), but at least the information about
the names of identifiers are completely lost. <br><br>
The obfuscator is quite difficult to use (this is why I hided this
section here) and there is only a short description of the command
line parameters:
<pre>
CLASSPATH=jode_cls.zip java jode.Obfuscator
</pre>
As a hint, to obfuscate the obfuscator use the following command line:
<pre>
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
</pre>
The options <code>-unique</code> and <code>-table</code> can be
helpful to deobfuscate obfuscated code.
</body>

@ -0,0 +1,48 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Using the decompiler as applet (locally)</title>
</head>
<body>
<a href="../index.html">Home</a> <a href="jode.html">Up</a> <br>
<h1>Step by Step</h1>
If you want to use the applet version you need a recent Internet
Explorer or Netscape which supports java 1.1.
<ol>
<li> Copy <a
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode-applet.html"
>jode-applet.html</a> into a local directory.
</li>
<li> Copy <a
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode_cls.zip"
>jode_cls.zip</a> to the <b>same</b> directory.
</li>
<li> Copy the <code>.class</code> file or <code>zip</code> file, you
want to decompile, to that directory.
</li>
<li> Load the html file into Netscape or Internet Explorer.
</li>
<li> Set the classpath simply to `<code>.</code>' (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. <br>
You can also change the default classpath in the html file.
</li>
<li> Enter the name of the class without <code>.class</code>
extension.
</li>
<li> Press start button in applet. </li>
<li> Saving doesn't work in Netscape, but maybe in Internet Explorer. </li>
</ol>
<h1>Packaged classes</h1>
If the class file belongs to a package (like jode.JodeWindow) you
have to give the full qualified class name (the package names
separated by a dot followed by the class name). The class path should
point to the directory containing the package sub directories in this
case.
</body>

@ -0,0 +1,62 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Using the decompiler under Windows</title>
</head>
<body>
<a href="../index.html">Home</a> <a href="jode.html">Up</a> <br>
<h1>Step by Step</h1>
You need java version 1.1 or higher. I suggest using the Sun JDK or
JRE 1.1 or 1.2. In the following description I assume Sun JDK 1.2,
for other virtual machines the paths and the name of the java
interpreter (<code>c:\jdk1.2\java</code>) may differ. <br><br>
<ol>
<li> Set the classpath. It should include the jode_cls.zip as well as
the directory where the class files you want to decompile resides.
You can also specify a zip file instead of a directory. It is
also a good Idea to include the zip resp. jar file containing the
basic <code>java.*</code> class files.
<pre>
set CLASSPATH=c:\temp\jode_cls.zip;c:\temp;c:\jdk1.2\jre\lib\rt.jar
</pre>
</li>
<li> Now you can start the graphical interface as following (Note the
case of the parameter)
<pre>
c:\jdk1.2\java jode.JodeWindow
</pre>
</li>
<li> The classpath field should already contain the classpath you set
above. The class field contains <code>jode.JodeWindow</code> and
you may push start immediately to decompile this class.
</li>
<li> If you want to decompile your own <code>.class</code> file, enter
the name of the file without <code>.class</code> extension and
push the start button. Change the class path if it doesn't point
to the right directory.
</li>
<li> After decompiling, you can save the file using the save button.
</li>
</ol>
<h1>Packaged classes</h1>
If the class file belongs to a package (like jode.JodeWindow) you
have to give the full qualified class name (the package names
separated by a dot followed by the class name). The class path should
point to the directory containing the package sub directories in this
case. <br><br>
<h1>Command line utility</h1>
There is also a command line utility which is much more powerful, but
also more difficult to use. You can start it (after setting the
classpath) with
<pre>
c:\jdk1.2\java jode.Decompiler
</pre>
and get a list of the supported parameters.
</body>

@ -0,0 +1,112 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title> JOchens' java-DEcompiler (JODE) </title>
<meta name="description" content="The home page of jode, my Java decompiler.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompile, decompiler,
java-decompiler, reverse engineering, free, GPL">
<meta name="robots" content="index">
<meta name="robots" content="nofollow">
<meta name="date" content="1999-03-08">
</head>
<body>
<a href="../index.html">Home</a>
<h2>What is it?</h2>
<P>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 <code>-g</code>) and there are often more ways to write
the same thing. But it does its job quite well.</P>
<h2>Quick Test</h2>
I have now an applet interface to the decompiler.
<a href="jode-applet.html">Check it out</a>.
<h2>How to get it</h2>
<P>You can donwload the files in zip form.
The <a href="jode_src.zip">sources</a> contain only the
<code>java</code> files, the <a href="jode_cls.zip">classes</a>
contain only the <code>class</code> files. </p>
I also have a <a href="jode.tar.gz">tar.gz file</a> containing only
the <code>RCS</code> directories. This is the form I maintain the
project, but you probably need unix and a few tools to use them.
<h2>How to use it</h2>
<p>I have some simple step by step pages. There are three
possibilities:
<ul>
<li> <a href="jode-useapplet.html"> Using the applet version</a>.
This can make problem due to java's security policy, but is the
simplest way and works on most platforms.
</li>
<li> If you use Windows, you should look on <a
href="jode-win.html">this page</a>.</li>
<li> Unix users should look on <a href="jode-unix.html">this page</a>.
</ul>
<h2>Known bugs</h2>
<p>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. </p>
<p>Sometimes this program may exit with an <code>Exception</code> 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 <code>jode.test</code> files, I would
be very interested in a bug report (including the <code>class</code>
file, if possible).</p>
<p>Sometimes it generates some <code>GOTO</code> expression and
labels. This can't be compiled, but shouldn't happen any more with
javac or jikes.</p>
<p>It doesn't handle inner and anonymous classes, yet. You can
decompile them separately, though (use `<code>+$</code>' 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. </p>
<h2>Why did I wrote it?</h2>
<p>Someday I found <code>guavad</code>, a disassembler for java byte
code (it does similar things like <code>javap&nbsp;-c</code>). 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 <a href="../perl/dasm_to_java.perl"><code>perl</code> script</a>
that does the same. At the end of the next day I had a working
decompiler.</p>
<p>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 <code>java</code> now,
because it suited best.</p>
<p>Just for the records: the java code is now nearly 50 times bigger
than the original perl script and is still growing.</p>
<h2>License</h2>
<p>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. <A HREF="http://www.gnu.org/copyleft/gpl.html"> Look
here for the complete license</a>.</p>
<hr>
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE">
http://www.informatik.uni-oldenburg.de/~delwi/jode/jode.html</A>, last
updated on <em>08-Mar-1999</em>.</p>
</body>
</html>

@ -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
}
}
}
Loading…
Cancel
Save