git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@1351 379699f6-c40d-0410-875b-85095c16579emaster
parent
9e5dca11ad
commit
0243eb4f23
@ -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 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 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 © 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,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 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 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 © 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 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 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 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 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 © 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> |
|
@ -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><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 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 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 © 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,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 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 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 -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 © 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 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 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 © 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,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 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 Sky</a></td></tr> |
|
||||||
</table><br> |
|
||||||
|
|
||||||
<h1>License</h1> |
|
||||||
<p><i>JODE</i> is Copyright © 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 © 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 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 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 © 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,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 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 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><init>.()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.<init>.()V" }, |
|
||||||
new WildCard { value = "org.resources.Bundle*.<init>.()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 © 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> |
|
Loading…
Reference in new issue