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

137 lines
5.1 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="2000-01-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 (WWW)</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>
<li><a href="links.html">Links</a></li>
<li><a href="bluesky.html">Blue Sky</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>Small bugs, that should be fixed in the next release:</p>
<ul>
<li>If there is more than one assignment to a final local variable
(they can be conditionally, so that only one is actually excuted),
jode refuses to mark it as final. This can make decompilation of
method scoped classes wrong. </li>
<li>There's probably a bug in LocalOptimizer (part of the obfuscator).
It is triggered very seldom, and may produces incorrect code. If your
application doesn't work after obfuscation, or is refused by the
bytecode verifier, try again without the LocalOptimizer. If this was
the reason send me your class file ;-)
</li>
</ul>
<p>Now follows a list of oddities, that will probably never get
completely fixed.</p>
<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>
This is not a bug in the verifier: java will complain the same way,
if it is run with bytecode verification turned on. And if you don't
have the dependent classes, you can't compile the code again.</p>
<p>There may be situations, where the code doesn't understand complex
expressions. In this case 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 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-Jan-2000</em>.</p>
</body>
</html>