Mirror of the JODE repository
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
jode/jode/doc/jode.html

117 lines
4.3 KiB

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (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-10-24">
</head>
<body>
<table cellpadding=4 cellspacing=1 width=100%>
<tr>
<td></td>
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td>
</tr>
<tr>
<td valign="top">
<B><a href="http://www.informatik.uni-oldenburg.de/~delwi">Homepage</a></B>
<br><br>
<a
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode.html">
<B>Jode</B></a>
<ul>
<li><a href="applet.html">Test It Online</a></li>
<li><a href="download.html">Download</a></li>
<li><a href="usage.html">Usage</a></li>
<li><a href="license.html">License</a></li>
<li><a href="history.html">History</a></li>
</ul>
</td>
<td>
<P><i>JODE</i> is a java package containing a decompiler and an
optimizer (aka obfuscator ;-) for java. This package was totally
written in my spare time and is available for free (see <a
href="license.html">license</a>).<p>
<P>The decompiler takes <tt>class</tt> files as input and produces
something similar to the original <tt>java</tt> 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 debuging) and there are
often more ways to write the same thing. But <i>JODE</i> does its job
quite well, so you should give it a try: <a href="applet.html">start
the applet</a>.</P>
<P>The optimizer transforms <tt>class</tt> files in various ways with
can be controlled by a script file. It supports the following
operations:</p>
<ul>
<li>Renaming class, method, field and local names to shorter or unique
names or according to a given translation table</li>
<li>Removing debugging information</li>
<li>Removing dead code (classes, fields, methods) and constant
fields</li>
<li>Optimizing local variable allocation</li>
</ul>
<h2>News</h2>
<ul>
<li>I can now decompile <b>inner and anonymous</b> classes.</li>
<li>The optimizer (aka obfuscator) can now be customized via a small
config file</li>
<li>Jode is now <tt>autoconf</tt>igured.</li>
<li>I use the <a href="http://www.urbanophile.com/arenn/hacking/download.html#getopt">getopt</a> package</li>
</ul>
<h3>Older News</h3>
<ul>
<li>There is a <a href="usage.html#swing">swing</a> interface</li>
<li>Jode handles zip and jar archives as both input and output.</li>
</ul>
<h2>Known Bugs</h2>
<p>If not all dependent classes can be found, the verifier (which is
run before decompilation starts) may exit with a type error. You
can decompile it with <tt>--verify=off</tt>, but take the warning
serious, that the types may be incorrect. There's sometimes no way
to guess the right type, if you don't have access the full class
hierarchie.<br>
But if you don't have the dependent classes, you can't compile the
code again, anyway, so why do you want to decompile it?</p>
<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 <tt>`-O'</tt> 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 <i>JODE</i> generates some GOTO expression and labels. This
shouldn't happen any more with code produced by javac or jikes.
But some flow obfuscator likes Zelix Klassmaster may provoke this.
In that case you can run the Obfuscator first (to optimize away the
flow obfuscation ;-).</p>
</td>
</table>
<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>24-Okt-1999</em>.</p>
</body>
</html>