Copied documentation from Jode-1.1

git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@1351 379699f6-c40d-0410-875b-85095c16579e
master
hoenicke 24 years ago
parent 9e5dca11ad
commit 0243eb4f23
  1. 14
      jode/doc/Makefile.am
  2. 100
      jode/doc/applet.html
  3. 16
      jode/doc/applet.php
  4. 136
      jode/doc/bluesky.html
  5. 104
      jode/doc/download.html
  6. 47
      jode/doc/download.php
  7. 72
      jode/doc/faq.php
  8. 83
      jode/doc/feedback.html
  9. 9
      jode/doc/feedback.php
  10. 4
      jode/doc/footer.inc
  11. 6
      jode/doc/header.inc
  12. 87
      jode/doc/history.html
  13. 134
      jode/doc/index.html
  14. 44
      jode/doc/index.php
  15. 80
      jode/doc/license.html
  16. 128
      jode/doc/links.html
  17. 17
      jode/doc/links.php
  18. 1
      jode/doc/menu.inc
  19. 289
      jode/doc/usage.html
  20. 50
      jode/doc/usage.php

@ -1,14 +0,0 @@
## Input file for automake to generate the Makefile.in used by configure
EXTRA_DIST = \
applet.html \
download.html.in \
history.html \
jode.html \
license.html \
links.html \
usage.html \
myproject.jos \
dasm_to_java.perl \
gimp/jode-logo.xcf \
jode-logo.gif

@ -1,100 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1>The <i>JODE</i> Applet</h1>
<p>Please be patience, loading the applet may take some time.</p>
<center>
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400>
<param name=pagecolor value="ffffff">
<param name=classpath value="http://jode.sourceforge.net/load.php/http%3a//www.informatik.uni-oldenburg.de/~mw/plasma.jar">
<param name=class value="PlasmaApplet">
<p>Sorry you need a java enabled browser to test a java applet ;-)</p>
<p>Don't read the rest, it only contains information about the applet.</p>
</applet>
</center><br>
<p> Press the start button to decompile <a
href="http://www.informatik.uni-oldenburg.de/~mw/plasma.html">Michael's
Plasma applet</a> (and give the decompiler some time to download the
jar file). </p>
You may change the classpath to point to a zip or jar file of your
choice, using a similar syntax. Use <code>%3a</code> instead of a
colon `:' in the url. You can also point it to a directory containing
the class-files (include a slash `/' at the end in this case), but
this is not recommended, since it is <i>very</i> slow. You may give
multiple entries in the class path field separated by a comma.<br><br>
You can't use this applet for local files; the class files must be on
a server that is accessible from sourceforge. You can try to give
local filenames directly without the load.php wrapper, but that is
probably forbidden by your browser. Most browser only allow loading
files from the same server as the applet, and this is the reason why
you have to use such a cryptic URL.<br><br>
Save probably doesn't work, because it is forbidden by your browser.<br><br>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -6,7 +6,7 @@
<center> <center>
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400> <applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400>
<param name=pagecolor value="ffffff"> <param name=pagecolor value="ffffff">
<param name=classpath value="http://jode.sourceforge.net/load.php/http%3a//www.informatik.uni-oldenburg.de/~mw/plasma.jar"> <param name=classpath value="http://jode.sourceforge.net/http/www.informatik.uni-oldenburg.de/~mw/plasma.jar">
<param name=class value="PlasmaApplet"> <param name=class value="PlasmaApplet">
<p>Sorry you need a java enabled browser to test a java applet ;-)</p> <p>Sorry you need a java enabled browser to test a java applet ;-)</p>
<p>Don't read the rest, it only contains information about the applet.</p> <p>Don't read the rest, it only contains information about the applet.</p>
@ -19,18 +19,20 @@ Plasma applet</a> (and give the decompiler some time to download the
jar file). </p> jar file). </p>
You may change the classpath to point to a zip or jar file of your You may change the classpath to point to a zip or jar file of your
choice, using a similar syntax. Use <code>%3a</code> instead of a choice, using a similar syntax. Only http and ftp addresses are supported.
colon `:' in the url. You can also point it to a directory containing The file must be available from the world wide web. In fact you download it
from Sourceforge and Sourceforge gets it from the given address. This hack
is necessary, because Java's security policy doesn't allow applets to contact
a different server. You can also point the classpath to a directory containing
the class-files (include a slash `/' at the end in this case), but the class-files (include a slash `/' at the end in this case), but
this is not recommended, since it is <i>very</i> slow. You may give this is not recommended, since it is <i>very</i> slow. You may give
multiple entries in the class path field separated by a comma.<br><br> multiple entries in the class path field separated by a comma.<br><br>
You can't use this applet for local files; the class files must be on You can't use this applet for local files. You can try to give
a server that is accessible from sourceforge. You can try to give local filenames directly without going through Sourceforge, but that is
local filenames directly without the load.php wrapper, but that is
probably forbidden by your browser. Most browser only allow loading probably forbidden by your browser. Most browser only allow loading
files from the same server as the applet, and this is the reason why files from the same server as the applet, and this is the reason why
you have to use such a cryptic URL.<br><br> you have to use such a weird URL.<br><br>
Save probably doesn't work, because it is forbidden by your browser.<br><br> Save probably doesn't work, because it is forbidden by your browser.<br><br>
<?php require("footer.inc"); ?> <?php require("footer.inc"); ?>

@ -1,136 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1>Blue Sky</h1>
<p>This section contains features that I think would be great to have,
but are also very hard to implement. The name of the section is
inspired, by <a
href="http://www.mozilla.org/blue-sky/">Mozilla</a>.</p>
<p>Currently this are all my own ideas. But if you send me an idea
for an interesting feature, I will add it to this list.</p>
<h2><i>Out</i>line inlined methods</h2>
<p>If java gets called with `<code>-O</code>' switch, it inlines methods,
that are private, final, or static and contain no loops. When
decompiling this it sometimes produces really ugly code. The right
way to solve this would be to <i>out</i>line the code again. This is
possible but requires to find the inlined method. </p>
<p>The name `outline' was suggested by <a
href="http://www.informatik.uni-oldenburg.de/~mw">Michael</a>.
</p>
<h2>Better names of local variables</h2>
<p>The local variable naming is very stupid. Even with pretty it just
names the variable after the type with a unifying number appended. A
method containing very much objects of the same type looks very
ugly. </p>
<p>My plan is looking at the assignments. If we have locals in
assignments
<pre>
int l_1 = array.length
String l_2 = object.getName()
</pre>
we could name them "length" and "name". If we
have assignments:
<pre>
MenuItem local_1 = new MenuItem("Open");
MenuItem local_2 = new MenuItem("Save");
</pre>
good names would be <code>miOpen</code> and <code>miSave</code>. </p>
<p>It is currently possible to assign a <i>(hint name,type)</i> pair
to a local. If the type matches, the local will be named after
<i>hint name</i>. This could be extended by giving them several
weighted hints and constructing the name in an intelligent way. </p>
<h2>Better deobfuscation features</h2>
<p>First there should be a good Renamer: Methods that simply
return a field value should be renamed to get<i>FieldName</i>.
Fields should be named after their type, maybe also by assignments
(see section about local variable names).</p>
<p>The deobfuscator should detect inner and anonymous variables,
synthetic methods and so on, and rename them accordingly.</p>
<h2>Handling of Class.forName in obfuscator</h2>
<p>The obfuscator should detect Class.forName constructs (and
similarly for methods and fields) and if their parameters are constant
it should change the parameter according to the rename function. </p>
<h2>Merging javadoc comments</h2>
<p>It would be nice if the decompiler could merge the javadoc comments
into the class file. More and more people use javadoc to comment the
public api of their java classes. It shouldn't be too difficult to
copy them back into the java code. </p>
<p>This doesn't need to be built into the decompiler. A script that takes
the javadoc pages and the decompiled code can easily merge them.</p>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -1,104 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1>Download</h1>
<p>Click <a href="http://sourceforge.net/project/filelist.php?group_id=3790">here</a> to download
the latest released source code of <i>JODE</i> . You need several
other packages to build <i>JODE</i>, check the <a href="./links.html">links page</a>. </p>
<p>The simplest way to get it, especially for non unix users, is in
precompiled form, though. I have two jar archives at the <a
href="ftp://jode.sourceforge.net/pub/jode">ftp server</a>. You may
need to press shift while clicking on the link, depending on your
browser.
<ul> <li><a href="ftp://jode.sourceforge.net/pub/jode/jode-1.0.93-1.1.jar">jode-1.0.93-1.1.jar</a> is for JDK&nbsp;1.1. It contains
the collection classes from the GNU Classpath project. If you want to
use the swing interface, you have to download swing separately. </li>
<li> <a href="ftp://jode.sourceforge.net/pub/jode/jode-1.0.93-1.2.jar">jode-1.0.93-1.2.jar</a> is for JDK&nbsp;1.2 or better. </li> </ul>
</p>
<h1>CVS Repository</h1>
<p>You can get the latest sources from the <a href="http://sourceforge.net/cvs/?group_id=3790"> CVS
repository</a>. They may not always compile, though. If you want an
older version you can use the <code>-r</code> option:</p>
<ul>
<li><code>-r jode_1_0_93</code>: gives you the version 1.0.93</li>
<li><code>-r branch_1_1</code>: gives you the latest version that will
become 1.1</li>
</ul>
<p>To build the sources from CVS change to the main directory where
the <code>configure.in</code> file resides and run
<pre>aclocal && automake -a && autoconf</pre>
Afterwards follow the instruction in the INSTALL file. </p>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -1,41 +1,34 @@
<?php require("header.inc"); ?> <?php require("header.inc"); ?>
<h1>Download</h1> <h1>Download</h1>
<p>Click <?php sflink("project/filelist.php")?>here</a> to download <p>Jode is available in the <?
the latest released source code of <i>JODE</i> . You need several sflink("project/showfiles.php")?>download area</a> in source or
other packages to build <i>JODE</i>, check the <?php selflink("links") binary form. For compiling the source code, you need several other
?>links page</a>. </p> packages, check the <?php selflink("links") ?>links page</a>. You
need a unix like environment for compilation.</p>
<p>The simplest way to get it, especially for non unix users, is in <p>The simplest way to get it, especially for non unix users, is in
precompiled form, though. I have two jar archives at the <a precompiled form, though. There are two jar archives in the download
href="ftp://jode.sourceforge.net/pub/jode">ftp server</a>. You may area:</P>
need to press shift while clicking on the link, depending on your
browser.
<?php <ul> <li>jode-1.1-JDK1.1.jar is for JDK&nbsp;1.1. If you want to use
function jarlink($what) { the swing interface, you have to download swing separately, all other
global $version; packages are already included in the archive. </li>
echo "<a href=\"ftp://jode.sourceforge.net/pub/jode/jode-".$version.$what;
echo ".jar\">jode-".$version.$what.".jar</a>";
} ?>
<ul> <li><?php jarlink("-1.1") ?> is for JDK&nbsp;1.1. It contains <li>jode-1.1.jar is for JDK&nbsp;1.2 or better. It should run
the collection classes from the GNU Classpath project. If you want to without any other package.</li> </ul> </p>
use the swing interface, you have to download swing separately. </li>
<li> <?php jarlink("-1.2") ?> is for JDK&nbsp;1.2 or better. </li> </ul>
</p>
<h1>CVS Repository</h1> <h1>CVS Repository</h1>
<p>You can get the latest sources from the <?php sflink("cvs/") ?> CVS <p>You can get the latest sources from the <?php sflink("cvs/") ?> CVS
repository</a>. They may not always compile, though. If you want an repository</a>. Follow the instruction on that page; use
older version you can use the <code>-r</code> option:</p> <code>jode</code> as <i>modulename</i>. If you want to checkout a
specific version you can use the <code>-r</code> option:</p>
<ul> <ul>
<li><code>-r jode_1_0_93</code>: gives you the version 1.0.93</li> <li><code>-r jode_1_0_93</code>: checks out the version 1.0.93</li>
<li><code>-r branch_1_1</code>: gives you the latest version that will <li><code>-r branch_1_1</code>: checks out the latest version in the
become 1.1</li> 1.1 series.</li> </ul>
</ul>
<p>To build the sources from CVS change to the main directory where <p>To build the sources from CVS change to the main directory where
the <code>configure.in</code> file resides and run the <code>configure.in</code> file resides and run
@ -43,5 +36,5 @@ the <code>configure.in</code> file resides and run
<pre>aclocal && automake -a && autoconf</pre> <pre>aclocal && automake -a && autoconf</pre>
Afterwards follow the instruction in the INSTALL file. </p> Afterwards follow the instruction in the INSTALL file. </p>
<?php require("footer.inc"); ?> <?php require("footer.inc"); ?>

@ -0,0 +1,72 @@
<?php require("header.inc"); ?>
<h1>FAQ - Frequently Asked Questions</h1>
This is a list of some questions that pop up from time to time.
<h2>Decompiler issues</h2>
<h3>The decompiler crashes with a VerifyException, what can I do?</h3>
<p>The class isn't verifiable, probably because there is not enough
information about used classes. See the question about the
classpath.</p>
<p>This could also be caused by malicious bytecode, or because there
is a bug in Jode's verifier.</p>
<h3>What should be included in the classpath?</h3>
<p>Jode needs to know the full class hierarchie to guess the types.
This includes not only the classes in the program, but also the
libraries used by the java program, even the Java runtime library.
You should set the classpath to include all these classes.</p>
<p>If you don't specify the classpath on the command line, Jode uses
the same as your Java Virtual Machine.</p>
<p>As last resort, if Jode can't find a class in the classpath it uses
reflection to ask the Virtual Machine. This works quite well, but
loading classes can have side effects, e.g. when AWT classes are
loaded, an AWT thread is created, even though Jode doesn't need
it.</p>
<h3>Why doesn't Jode decompile my inner class
<code>MyClass$Inner.class</code>?</h3>
<p>You should decompile the outermost class (<code>MyClass</code> in
this case). The produced code contains the inner class. </p>
<h2>Obfuscator issues</h2>
<h3>What should be included in the classpath?</h3>
<p>The program, all libraries, the Java runtime library. Don't omit a
library even when you don't want to obfuscate it.</p>
<h3>What should I preserve</h3>
<p>The most common mistake is to preserve a class. In most cases this
is not what you want. This only makes sure the class won't be
renamed, it doesn't prevent it from being stripped. Instead you
should preserve methods and constructors. The constructor is just a
method with the special name <tt>&lt;init&rt;</tt>. </p>
<p> Another common mistake is to omit the type
signature, e.g. to preserve <tt>Class.main</tt> instead of
<tt>Class.main.([Ljava/lang/String;)V</tt>. That doesn't work. If
you don't want to care about the format of the type signature use a
wildcard as in <tt>Class.main.*</tt>. </p>
<h3>What is a type signature</h3>
<p>The type signature is a machine readable representation of a java
type that is used all over in java bytecode. The JDK ships a command
named <tt>javap</tt>. With <tt>java -s</tt> you can lists the fields
and methods of a class with their type signatures.</p>
<p> If you are interested in the format of type signatures read the
Java Virtual Machine Specification, Chapter 4.3 Descriptors</p>
<?php require("footer.inc"); ?>

@ -1,83 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1>Feedback</h1>
<p>You can report bugs to the <a href="http://sourceforge.net/bugs/?group_id=3790">bug forum</a>.
Please send me a short notice if you add a bug.</p>
<p>You can contact me per email via <a
href="http://sourceforge.net/sendmessage.php?touser=18252">hoenicke at
users.sourceforge.net</a>. Please mention <i>jode</i> in the
subject.</p>
<p>There is a mailing list. Check <a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">this page</a> for subscription informations.</p>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -2,16 +2,13 @@
<h1>Feedback</h1> <h1>Feedback</h1>
<p>You can report bugs to the <?php sflink("bugs/")?>bug forum</a>. <p>You can report bugs to the <?php sflink("bugs/")?>bug forum</a>. </p>
Please send me a short notice if you add a bug.</p>
<p>You can contact me per email via <a <p>You can contact me by email via <a
href="http://sourceforge.net/sendmessage.php?touser=18252">hoenicke at href="http://sourceforge.net/sendmessage.php?touser=18252">hoenicke at
users.sourceforge.net</a>. Please mention <i>Jode</i> in the users.sourceforge.net</a>. Please mention <i>jode</i> in the
subject.</p> subject.</p>
<p>There is a mailing list. Check <a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">this page</a> for subscription informations.</p> <p>There is a mailing list. Check <a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">this page</a> for subscription informations.</p>
<?php require("footer.inc"); ?> <?php require("footer.inc"); ?>

@ -2,8 +2,8 @@
<TR> <TR>
<TD align="center"><SPAN class=footer> <TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br> All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000, Last updated on 29-May-2001,
Copyright &copy; 1998-2001 by Jochen Hoenicke.<br> Copyright &copy; 1998-2001 by Jochen Hoenicke.
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD> </TD>
</TR> </TR>

@ -2,7 +2,7 @@
if (! $extension) { if (! $extension) {
$extension = "php"; $extension = "php";
} }
$version="1.0.93"; $version="1.1";
function selflink($link) { function selflink($link) {
global $extension; global $extension;
@ -25,7 +25,7 @@ function sflink($link) {
<html> <html>
<head> <head>
<title>Java Optimize and Decompile Environment (JODE)</title> <title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30"> <meta name="date" content="2001-05-29">
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> <meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke"> <meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> <meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
@ -42,7 +42,7 @@ body { color:#000000; background-color: #FFFFFF; }
<body text=#000000 bgcolor=#FFFFFF> <body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100% <table cellpadding=4 cellspacing=1 width="100%"
><tr ><tr
><td align="left" ><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110 ><img src="jode-logo.gif" alt="JODE" width=286 height=110

@ -1,87 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1>History</h1>
<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. So I wrote a
small <a href="dasm_to_java.perl"><code>perl</code> script</a> that
did this process automatically. At the end of the next day I had my
first working decompiler.</p>
<p>Now while the <code>perl</code> script is working, it is not easy
to use. You have to decompile the code first with a disassembler, cut
out the code of a single method, and run the perl script on it. I
decided to get the bytecode directly out 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 more than 50 times
bigger than the original perl script and is still growing.</p>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -1,134 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<P><i>JODE</i> is a java package containing a decompiler and an
optimizer for java. This package is freely available under the GPL
(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,
obfuscated, 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>JODE</i> is now hosted by <a href="http://sourceforge.net/">SourceForge</a>.</li>
<li>The latest <a href="http://sourceforge.net/cvs/?group_id=3790">CVS</a> version breaks long lines</li>
<li>I can now decompile <b>inner and anonymous</b> classes.</li>
<li>The optimizer (aka obfuscator) can be customized via a small
config file</li>
<li>Jode is <tt>autoconf</tt>igured.</li>
</ul>
<h2>Limitations</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 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>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -1,16 +1,16 @@
<?php require("header.inc"); ?> <?php require("header.inc"); ?>
<P><i>JODE</i> is a java package containing a decompiler and an <P><i>JODE</i> is a java package containing a decompiler and an
optimizer for java. This package is freely available under the GPL optimizer for java. This package is <?php selflink("license")
(see <?php selflink("license") ?>license</a>).<p> ?>freely available</a> under the GNU GPL.<p>
<P>The decompiler takes <tt>class</tt> files as input and produces <P>The decompiler reads in <tt>class</tt> files and produces something
something similar to the original <tt>java</tt> file. Of course this similar to the original <tt>java</tt> file. Of course this can't be
can't be perfect: There is no way to produce the comments or the names perfect: There is no way to produce the comments or the names of local
of local variables (except when compiled with debuging) and there are variables (except when compiled with debuging) and there are often
often more ways to write the same thing. But <i>JODE</i> does its job more ways to write the same thing. However, <i>JODE</i> does its job quite
quite well, so you should give it a try: <? selflink("applet") ?>start well, so you should give it a try and <? selflink("applet") ?>start the
the applet</a>.</P> applet</a>.</P>
<P>The optimizer transforms <tt>class</tt> files in various ways with <P>The optimizer transforms <tt>class</tt> files in various ways with
can be controlled by a script file. It supports the following can be controlled by a script file. It supports the following
@ -28,14 +28,23 @@ fields</li>
<h2>News</h2> <h2>News</h2>
<ul> <ul>
<li><i>JODE</i> 1.1 is out. With support for javac v8 (jdk 1.3). </li>
<li><i>JODE</i> is now hosted by <a href="http://sourceforge.net/">SourceForge</a>.</li> <li><i>JODE</i> is now hosted by <a href="http://sourceforge.net/">SourceForge</a>.</li>
<li>The latest <?php sflink("cvs/") ?>CVS</a> version breaks long lines</li> <li>Now long lines are automatically broken.</li>
<li>I can now decompile <b>inner and anonymous</b> classes.</li> <li><b>Inner and anonymous</b> classes are automatically decompiled.</li>
<li>The optimizer (aka obfuscator) can be customized via a small <li>The optimizer (aka obfuscator) can be customized via a small
config file</li> config file</li>
<li>Jode is <tt>autoconf</tt>igured.</li>
</ul> </ul>
<h2>Known bugs of the decompiler</h2>
<p>Some jdk1.3 synthetic access functions aren't understood. The
produced source contains access$xxx functions, but it still compiles.</p>
<p>There may be other bugs, that cause Exceptions or invalid code.
If you have such a problems don't hesitate to issue a bug report.
Please include the <code>class</code> file if possible.</p>
<h2>Limitations</h2> <h2>Limitations</h2>
<p>If not all dependent classes can be found, the verifier (which is <p>If not all dependent classes can be found, the verifier (which is
@ -55,15 +64,4 @@ the code should still be compileable. This does especially happen
when you compile with <tt>`-O'</tt> flag and javac has inlined some when you compile with <tt>`-O'</tt> flag and javac has inlined some
methods. </p> 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>
<?php require("footer.inc"); ?> <?php require("footer.inc"); ?>

@ -1,80 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1>License</h1>
<p><i>JODE</i> is Copyright &copy; 1998-2000 by Jochen Hoenicke. <br><br>
<p>This program is free software; you can redistribute it and/or modify
it under the terms of the <a
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public
License</a> as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.</p>
<p>This program is distributed in the hope that it will be useful,
but <b>without any warranty</b>; without even the implied warranty of
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the
GNU General Public License for more details.</p>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -1,128 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<h1><i>JODE</i> Links</h1>
<h3>Other decompilers</h3>
<ul>
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Development_Tools/Translators/Decompilers_and_Disassemblers/">The Open Directory list</a></li>
<li>A list of decompilers can be found at <a href="http://www.meurrens.org/ip-Links/Java/CodeEngineering/#tocDecompilersToJava">Marc Meurren's list</a>
</li>
<li>A very fast decompiler is <a
href="http://www.geocities.com/SiliconValley/Bridge/8617/jad.html">jad</a>
written in C++. It doesn't come with source code though, and misses
some features <i>JODE</i> has ;-)</li> <li><a
href="http://www.javaworld.com/javaworld/jw-07-1997/jw-07-decompilers.html">A
comparison of three decompilers</a> (but not <i>JODE</i>) was done by Dave
Dyer.
</ul>
<h3>Other obfuscators</h3>
<ul>
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Development_Tools/Obfuscators/">The Open Directory list</a></li>
<li><a href="http://www.sbktech.org/hashjava_old.html">Hashjava</a> is another free obfuscator. It is no longer maintained, though, since its successor was commercialized.</li>
<li><a href="http://www.zelix.com/klassmaster/index.html">Zelix
Klassmaster</a> does a very good flow optimization and also decrypts
strings. But <i>JODE</i>'s deobfuscator can undo both.</li>
<li><a href="http://www.cs.arizona.edu/~collberg/Research/">Christian S. Collberg</a> has some really interesting papers about non reversible obfuscations.</li>
</ul>
<h3>Graphical User Interface</h3>
<ul>
<li><i>JODE</i> is used by the <a
href="http://jedit.standmed.com/plugins/JavaInsight">JavaInsight plugin</a> for
<a href="http://jedit.sourceforge.net/">jEdit</a>.</li>
</ul>
<h3>Miscellanous packages needed to run JODE</h3>
<dl>
<dt>CYGWIN (unix tools for win95/NT)</dt>
<dd>
<a href="http://sourceware.cygnus.com/cygwin/">http://sourceware.cygnus.com/cygwin/</a>
</dd>
<dt>JDK 1.1:</dt>
<dd>
<a href="http://java.sun.com/products/jdk/1.1/">http://java.sun.com/products/jdk/1.1/</a>
</dd>
<dt><a name="swing">Swing for JDK 1.1:</a><dt>
<dd>
<a href="http://java.sun.com/products/jfc/index.html#download-swing">http://java.sun.com/products/jfc/index.html#download-swing</a>
</dd>
<dt>JDK 1.2:</dt>
<dd>
<a href="http://java.sun.com/products/jdk/1.2/">http://java.sun.com/products/jdk/1.2/</a>
</dd>
<dt><a name="getopt">Getopt</a>:</dt>
<dd>
<a href="http://www.urbanophile.com/arenn/hacking/download.html#getopt">http://www.urbanophile.com/arenn/hacking/download.html#getopt</a>
</dd>
<dt><a name="collections">Collection Classes</a>:</dt>
<dd>I have written a small script that puts the collection classes
from the <a href="http://www.classpath.org">GNU Classpath Project</a>
into its own package (<code>gnu.java.util.collections</code>). This
script is now part of GNU classpath. For your convenience I have put a
precompiled <a
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/collections.jar">jar
file</a> on this server.
</dd>
</dl>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -2,7 +2,7 @@
<h1><i>JODE</i> Links</h1> <h1><i>JODE</i> Links</h1>
<h3>Other decompilers</h3> <h3>Other decompilers</h3>
<ul> <ul>
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Development_Tools/Translators/Decompilers_and_Disassemblers/">The Open Directory list</a></li> <li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Decompilers_and_Disassemblers/">The Open Directory list</a></li>
<li>A list of decompilers can be found at <a href="http://www.meurrens.org/ip-Links/Java/CodeEngineering/#tocDecompilersToJava">Marc Meurren's list</a> <li>A list of decompilers can be found at <a href="http://www.meurrens.org/ip-Links/Java/CodeEngineering/#tocDecompilersToJava">Marc Meurren's list</a>
</li> </li>
<li>A very fast decompiler is <a <li>A very fast decompiler is <a
@ -15,7 +15,7 @@ Dyer.
</ul> </ul>
<h3>Other obfuscators</h3> <h3>Other obfuscators</h3>
<ul> <ul>
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Development_Tools/Obfuscators/">The Open Directory list</a></li> <li><a href="http://dmoz.org/Computers/Programming/Languages/Java/Obfuscators/">The Open Directory list</a></li>
<li><a href="http://www.sbktech.org/hashjava_old.html">Hashjava</a> is another free obfuscator. It is no longer maintained, though, since its successor was commercialized.</li> <li><a href="http://www.sbktech.org/hashjava_old.html">Hashjava</a> is another free obfuscator. It is no longer maintained, though, since its successor was commercialized.</li>
<li><a href="http://www.zelix.com/klassmaster/index.html">Zelix <li><a href="http://www.zelix.com/klassmaster/index.html">Zelix
Klassmaster</a> does a very good flow optimization and also decrypts Klassmaster</a> does a very good flow optimization and also decrypts
@ -28,6 +28,19 @@ strings. But <i>JODE</i>'s deobfuscator can undo both.</li>
href="http://jedit.standmed.com/plugins/JavaInsight">JavaInsight plugin</a> for href="http://jedit.standmed.com/plugins/JavaInsight">JavaInsight plugin</a> for
<a href="http://jedit.sourceforge.net/">jEdit</a>.</li> <a href="http://jedit.sourceforge.net/">jEdit</a>.</li>
</ul> </ul>
<h3>Software Directories</h3>
<ul>
<li>Get everything and anything for Linux at the
<a href="http://www.linux-directory.com" target="_top"
><IMG SRC="http://www.linux-directory.com/button_88x31.gif"
WIDTH=88 HEIGHT=31 BORDER=0 ALT="Linux Directory"></a>.
</li>
<li>A great place for developing free software is
<a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a>
</li>
</ul>
<h3>Miscellanous packages needed to run JODE</h3> <h3>Miscellanous packages needed to run JODE</h3>
<dl> <dl>
<dt>CYGWIN (unix tools for win95/NT)</dt> <dt>CYGWIN (unix tools for win95/NT)</dt>

@ -4,6 +4,7 @@ $menu =
"Project page" , "sflink", "project/", "Project page" , "sflink", "project/",
"Applet" , "selflink", "applet", "Applet" , "selflink", "applet",
"Download" , "selflink", "download", "Download" , "selflink", "download",
"FAQ" , "selflink", "faq",
"Feedback" , "selflink", "feedback", "Feedback" , "selflink", "feedback",
"Documentation", "selflink", "usage", "Documentation", "selflink", "usage",
"License" , "selflink", "license", "License" , "selflink", "license",

@ -1,289 +0,0 @@
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<html>
<head>
<title>Java Optimize and Decompile Environment (JODE)</title>
<meta name="date" content="2000-06-30">
<meta name="description" content="JODE - Java Optimize and Decompile Environment.">
<meta name="author" content="Jochen Hoenicke">
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL">
<style type="text/css">
<!--
body { color:#000000; background-color: #FFFFFF; }
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold;
color:#000000; background-color: #EEEEF8; }
.footer { color:#FFFFFF; background-color: #737B9C; }
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; }
//-->
</style>
</head>
<body text=#000000 bgcolor=#FFFFFF>
<table cellpadding=4 cellspacing=1 width=100%
><tr
><td align="left"
><img src="jode-logo.gif" alt="JODE" width=286 height=110
></td
><td align="right"
>Powered by <a href="http://sourceforge.net"><img
src="http://sourceforge.net/sflogo.php?group_id=3790&type=1"
border=0 width=88 height=31 alt="SourceForge"></a><br
>Best viewed with <a
href="http://www.anybrowser.org/campaign/"><img
src="a-logo.gif" border=0 width=88 height=31 alt="Any
Browser"></a><br
></td
></tr
></table>
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav">
<tr><td class="nav">
<a href="./"><B>Home</B></a> |
<a href="http://sourceforge.net/project/?group_id=3790">Project&nbsp;page</a> |
<a href="./applet.html">Applet</a> |
<a href="./download.html">Download</a> |
<a href="./feedback.html">Feedback</a> |
<a href="./usage.html">Documentation</a> |
<a href="./license.html">License</a> |
<a href="./history.html">History</a> |
<a href="./links.html">Links</a> |
<a href="./bluesky.html">Blue&nbsp;Sky</a></td></tr>
</table><br>
<a name="decompiler">
<h1>Using the Decompiler</h1></a>
After you have <a href="./download.html">downloaded</a> the necessary
packages, put them into your <tt>CLASSPATH</tt>:
<ul><li>Under Windows you have to start a MSDOS session and type
something like:
<pre>
set CLASSPATH=C:\download\jode-1.0.93-1.1.jar;C:\swing\swingall.jar
</pre>
</li><li>Under Unix you start a shell and type (for bourne shell):
<pre>export CLASSPATH=/tmp/jode-1.0.93-1.1.jar:/usr/local/swing/swingall.jar</pre>
or for csh:
<pre>setenv CLASSPATH /tmp/jode-1.0.93-1.1.jar:/usr/local/swing/swingall.jar</pre>
</ul>
<br>
There is also a batch file for windows and a script file for unix,
that you can use. You can extract it with the following command:
<pre>
jar -xvf jode-1.0.93-1.1.jar bin/jode.bat <i>resp.</i> bin/jode
</pre>
Edit the file to adapt it to your needs and put it to a convenient
location.
<a name="cmdline"><h3>Command Line Interface</h3></a>
The most powerful way to start <I>JODE</I>'s decompiler is the command
line interface. Some people don't like long command lines; they
should go to the next section. <br>
Start the class <tt>jode.decompiler.Main</tt> with the options. The
following command will give a complete list of the available commands:
<pre>java jode.decompiler.Main --help</pre>
If you have adapted the batch file/script, you can use it like this:
<pre>jode --help</pre>
<a name="awt"><h3>AWT Interface</h3></a>
The AWT Interface looks exactly like the <a href="./applet.html">applet</a>. In fact the applet uses the AWT Interface. You start it
after setting the <tt>CLASSPATH</tt> (see <a href="./usage.html#decompiler">above</a>), with
<pre>java jode.decompiler.Window</pre>
In the classpath line you can enter a number of jar files, zip files
and directories separated by comma(<tt>,</tt>). Then enter the
dot(<tt>.</tt>) separated name of the class you want to decompile.
Press the <code>start</code> button and the decompiled class should
appear. You can save it via the <code>save</code> button.
<a name="swing"><h3>Swing Interface</h3></a>
For the swing interface you need java version 1.2 or the separately
available swing package (see <a href="./links.html#swing">link
page</a>. You can invoke it like this:
<pre>
java jode.swingui.Main --classpath classes.jar
<i>resp.</i>jode swi --classpath classes.jar
</pre>
The swing interface will show the package hierarchie of all classes
in the classpath on the left side. You can now select a class and the
decompiled code will appear on the right side. Via the menu, you may
change the classpath or switch between package hierarchie tree and
class inheritence tree.<br>
The swing interface is very useful to browse through class files if
you don't have the source code. You can also use it to trace bugs in
library code. It is not meant to generate <tt>java</tt> files and so
you won't find a save option there.<br>
<a name="java"><h3>Java Interface</h3></a>
<p>If you want to integrate <i>JODE</i> into your own java program,
you can use the <a
href="Decompiler.java"><code>jode.decompiler.Decompiler</code></a>
class. Note that the GPL only allows you to integrate <i>JODE</i>
into GPL programs. Please tell me if you use <i>JODE</i> in this
way.</p>
<p>You may use this <a
href="ftp://jode.sourceforge.net/pub/jode/jode-embedded.jar">stripped
down jar archive</a> containing all necessary classes.</p>
<a name="optimizer"><h1>Using the Obfuscator</h1>
<p>To use the obfuscator you should first create a script file, say <a
href="myproject.jos"><tt>myproject.jos</tt></a>. Then you can invoke the
obfuscator with:
<pre>
java jode.obfuscator.Main myproject.jos
</pre></p>
<p>The script file should contain the following options: </p>
<p>First select the classpath. You should include everything in the
classpath that you need to run your application. This also includes
the system class files (Sun puts them into <code>classes.zip</code> or
<code>rt.jar</code>))</p>
<pre>
classpath = "c:\\jdk1.2\\jre\\lib\\rt.jar","d:\\project\\java",
"ftp://www.myorg.org/pub/classlib.jar"
</pre>
<p>Specify where you want the obfuscated classes to go. I recommend
to write them directly into a zip file, but you can also give a
directory.</p>
<pre>
dest = "obfuscated.zip"
</pre>
<p>You can make <i>JODE</i> write its translation table. This table
can be used later to undo the name obfuscation, or you can look there
to decrypt exceptions you may get.</p>
<pre>
revtable = "translat.tbl"
</pre>
<p>Select what you want to strip. There are several
possibilities, which can be separated by comma(<tt>,</tt>):</p>
<dl>
<dt>unreach</dt>
<dd>strip unreachable methods and classes.</dd>
<dt>source</dt>
<dd>remove the name of the java file (exceptions will get unreadable).</dd>
<dt>lnt</dt>
<dd>remove the line number table (exceptions will get unreadable).</dd>
<dt>lvt</dt>
<dd>remove the local variable table (debugging doesn't work).</dd>
<dt>inner</dt>
<dd>strip inner class info (reflection doesn't work correctly).</dd>
</dl>
<pre>
strip = "unreach","lvt","inner"
</pre>
<p>Select the packages and classes you want to obfuscate. You should
only include libraries, that you don't ship separately. If you give a
package, all classes and subpackages are loaded. You can also use
<code>*</code> as wild card, that matches everything (including dots).
</p>
<pre>
load = new WildCard { value = "org.myorg.myproject" },
new WildCard { value = "org.myorg.mylib*" },
new WildCard { value = "org.otherorg.shortlib" }
</pre>
<p>Select the methods and classes you want to preserve. This is
the <tt>main</tt> method for applications and the default constructor
<tt>&lt;init&gt;.()V</tt> for applets, resource bundles and other classes
that you load manually at runtime.<br> You have to give the method
name and the type signature to identify your method. <tt>javap
-s</tt> will show you the type signatures for your classes, but you
may also use <tt>*</tt>, to select all methods with that name.</p>
<pre>
preserve = new WildCard { value = "org.myorg.ApplicationClass.main.*" },
new WildCard { value = "org.myorg.AppletClass.&lt;init&gt;.()V" },
new WildCard { value = "org.resources.Bundle*.&lt;init&gt;.()V" },
</pre>
<p>If you want to obfuscate (or just shorten) the identifier you can
specify a renamer. There are currently following renamer
available</p>
<dl><dt>StrongRenamer</dt>
<dd>Renames to the shortest possible name. You can give a charset
that should be used. It uses the same name as much as possible.</dd>
<dt>UniqueRenamer</dt>
<dd>Renames to unique identifier of the form <tt>xxx123</tt>. Useful
to reduce name conflicts, before you decompile an obfuscated package.</dd>
<dt>NameSwapper</dt>
<dd>This renamer just swaps the names. This is a funny obfuscation
option that is not very strong, but very confusing.</dd>
<dt>KeywordRenamer</dt>
<dd>Renames identifiers to keyword. You can give your own list of
keywords as parameters. Resulting code is not decompilable directly,
<b>but it is <i>not</i> legal bytecode either</b>. Some paranoid
web browsers refuse to run applets containing keywords as identifiers
(and they are completely within the Java VM spec).</dd>
</dl>
<pre>
renamer = new StrongRenamer
</pre>
<p>You can also create a renaming table with the same format as the
table written by revtable. The entries in the table get precedence
over renamer. Entries not in the table will get renamed by the
renamer.<p>
<pre>
table = "translat.tbl"
</pre>
<p>Now you can select the analyzer. The purpose of the
analyzer is to mark all reachable methods, find out which methods
needs to get the same name (overloading), and which method names
mustn't change (overload of library methods, e.g. <tt>nextElement</tt>
for <tt>Enumeration</tt>s). There are currently two analyzers.
<dl><dt>SimpleAnalyzer</dt>
<dd>Straight forward analyzer. It is fast and will remove dead code
on method basis.</dd>
<dd><dt>ConstantAnalyzer</dt>
<dd>Strong analyzer that will determine, which fields and instructions
have constant values. It will remove dead code on instruction basis
and replace constant instruction with a load of the constant, or
remove them completely.<br> This analyzer is especially useful to
revert the flow obfuscation of some other obfuscators.</dd>
</dl>
</p>
<pre>
analyzer = new ConstantAnalyzer
</pre>
<p>Pre- and Post transformers transform the bytecode before
resp. after the Analyzer runs. Using this default should be okay.
You may remove the LocalOptimizer, though, if you have problems.</p>
<p>In the future I may add some new post transformers, that do string
encryption, flow obfuscation and similar things. If you want to write
your own Transformers please contact me, since the next version will
change the bytecode interface.</p>
<pre>
post = new LocalOptimizer, new RemovePopAnalyzer
</pre>
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2">
<TR>
<TD align="center"><SPAN class=footer>
All trademarks and copyrights on this page are properties of their respective owners. <br>
Last updated on 3-Jul-2000,
Copyright &copy; 1998-2000 by Jochen Hoenicke.<br>
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN>
</TD>
</TR>
</TABLE>
</BODY>
</HTML>

@ -9,27 +9,28 @@
*/ ?> */ ?>
<a name="decompiler"> <a name="decompiler">
<h1>Using the Decompiler</h1></a> <h1>Using the Decompiler</h1></a>
After you have <?php selflink("download") ?>downloaded</a> the necessary <p>After you have <?php selflink("download") ?>downloaded</a> the jar archive
packages, put them into your <tt>CLASSPATH</tt>: put it into your <tt>CLASSPATH</tt>. The package
<tt>swingall.jar</tt> is also needed if you are using JDK 1.1.</p>
<ul><li>Under Windows you have to start a MSDOS session and type <ul><li>Under Windows you have to start a MSDOS session and type
something like: something like:
<pre> <pre>
set CLASSPATH=C:\download\jode-<?php echo "$version-1.1"?>.jar;C:\swing\swingall.jar set CLASSPATH=C:\download\jode-<?php echo "$version"?>.jar;C:\swing\swingall.jar
</pre> </pre>
</li><li>Under Unix you start a shell and type (for bourne shell):
<pre>export CLASSPATH=/tmp/jode-<?php echo "$version-1.1"?>.jar:/usr/local/swing/swingall.jar</pre> <li>Under Unix you start a shell and type (for bourne shell):
<pre>export CLASSPATH=/tmp/jode-<?php echo "$version"?>.jar:/usr/local/swing/swingall.jar</pre>
or for csh: or for csh:
<pre>setenv CLASSPATH /tmp/jode-<?php echo "$version-1.1"?>.jar:/usr/local/swing/swingall.jar</pre> <pre>setenv CLASSPATH /tmp/jode-<?php echo "$version"?>.jar:/usr/local/swing/swingall.jar</pre>
</ul> </ul>
<br> <br>
There is also a batch file for windows and a script file for unix, There is also a batch file for windows and a script file for unix,
that you can use. You can extract it with the following command: that you can use. You can extract it with the following command:
<pre> <pre>
jar -xvf jode-<?php echo "$version-1.1"?>.jar bin/jode.bat <i>resp.</i> bin/jode jar -xvf jode-<?php echo "$version-jdk1.1"?>.jar bin/jode.bat <i>resp.</i> bin/jode
</pre> </pre>
Edit the file to adapt it to your needs and put it to a convenient Edit the file to adapt it to your paths and put it to a convenient location.
location.
<a name="cmdline"><h3>Command Line Interface</h3></a> <a name="cmdline"><h3>Command Line Interface</h3></a>
@ -42,8 +43,12 @@ following command will give a complete list of the available commands:
<pre>java jode.decompiler.Main --help</pre> <pre>java jode.decompiler.Main --help</pre>
If you have adapted the batch file/script, you can use it like this: If you want to decompile a jar package you can do it this way:
<pre>jode --help</pre>
<pre>java jode.decompiler.Main --dest srcdir program.jar</pre>
If you have installed the batch file/script, you can use it like this:
<pre>jode --dest srcdir program.jar</pre>
<a name="awt"><h3>AWT Interface</h3></a> <a name="awt"><h3>AWT Interface</h3></a>
@ -64,35 +69,36 @@ appear. You can save it via the <code>save</code> button.
For the swing interface you need java version 1.2 or the separately For the swing interface you need java version 1.2 or the separately
available swing package (see <?php selflink("links#swing") ?>link available swing package (see <?php selflink("links#swing") ?>link
page</a>. You can invoke it like this: page</a>. You can invoke it with the following command:
<pre> <pre>
java jode.swingui.Main --classpath classes.jar java jode.swingui.Main classes.jar
<i>resp.</i>jode swi --classpath classes.jar <i>resp.</i> jode swi classes.jar
</pre> </pre>
The swing interface will show the package hierarchie of all classes <p>The swing interface will show the package hierarchie of all classes
in the classpath on the left side. You can now select a class and the in the classpath on the left side. You can now select a class and the
decompiled code will appear on the right side. Via the menu, you may decompiled code will appear on the right side. Via the menu, you may
change the classpath or switch between package hierarchie tree and change the classpath or switch between package hierarchie tree and
class inheritence tree.<br> class inheritence tree.</p>
The swing interface is very useful to browse through class files if <p>The swing interface is very useful to browse through class files if
you don't have the source code. You can also use it to trace bugs in you don't have the source code. You can also use it to trace bugs in
library code. It is not meant to generate <tt>java</tt> files and so library code. It is not meant to generate <tt>java</tt> files and so
you won't find a save option there.<br> you won't find a save option there.</p>
<a name="java"><h3>Java Interface</h3></a> <a name="java"><h3>Java Interface</h3></a>
<p>If you want to integrate <i>JODE</i> into your own java program, <p>If you want to integrate <i>JODE</i> into your own java program,
you can use the <a you can use the <a
href="Decompiler.java"><code>jode.decompiler.Decompiler</code></a> href="http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/jode/jode/jode/decompiler/Decompiler.java?rev=jode_1_1&content-type=text/vnd.viewcvs-markup"
><code>jode.decompiler.Decompiler</code></a>
class. Note that the GPL only allows you to integrate <i>JODE</i> class. Note that the GPL only allows you to integrate <i>JODE</i>
into GPL programs. Please tell me if you use <i>JODE</i> in this into GPL programs. Please tell me if you use <i>JODE</i> in this
way.</p> way.</p>
<p>You may use this <a <p>You should ship <code>jode-1.1-embedded.jar</code> with your program. This jar file is
href="ftp://jode.sourceforge.net/pub/jode/jode-embedded.jar">stripped available in the <? sflink("project/showfiles.php") ?>download area</a>.
down jar archive</a> containing all necessary classes.</p> It works only under JDK&nbsp;1.2 and above.</p>
<a name="optimizer"><h1>Using the Obfuscator</h1> <a name="optimizer"><h1>Using the Obfuscator</h1>

Loading…
Cancel
Save