git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@1239 379699f6-c40d-0410-875b-85095c16579ebranch_1_1
parent
7a3d90542b
commit
edc69e287a
@ -0,0 +1,36 @@ |
||||
<?php require("header.inc"); ?> |
||||
<h1>The <i>JODE</i> Applet</h1> |
||||
|
||||
Please be patience, loading the applet may take some time.<br><br> |
||||
|
||||
<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> |
||||
|
||||
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). <br><br> |
||||
|
||||
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> |
||||
<?php require("footer.inc"); ?> |
@ -0,0 +1,72 @@ |
||||
<?php require("header.inc"); ?> |
||||
<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> |
||||
<?php require("footer.inc"); ?> |
@ -0,0 +1,92 @@ |
||||
<!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"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<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> |
||||
</td> |
||||
<td valign="top"> |
||||
<h2>Download</h2> |
||||
|
||||
The latest source code of <i>JODE</i> is available at the <a href="http://sourceforge.net/project/?group_id=3790">project page</a>. |
||||
You need several other packages to build <i>JODE</i>, check the <a href="./links.html">links page</a>. <br><br> |
||||
|
||||
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 already |
||||
contains Getopt and 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. It already |
||||
contains Getopt, so you don't need any other package.</li> </ul> |
||||
|
||||
<h2>CVS Repository</h2> |
||||
|
||||
You can get the latest sources from the <a href="http://sourceforge.net/cvs/?group_id=3790">CVS repository</a>. |
||||
Follow the instruction on that page; use <code>jode</code> as |
||||
<i>modulename</i>. Then change to the directory jode and run |
||||
|
||||
<pre>aclocal && automake -a && autoconf</pre> |
||||
|
||||
Afterwards follow the instruction in the INSTALL file. |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,94 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="robots" content="noindex"> |
||||
<meta name="date" content="1999-10-24"> |
||||
</head> |
||||
|
||||
<body> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr> |
||||
<td></td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<B><a href="http://www.informatik.uni-oldenburg.de/~delwi">Homepage</a></B> |
||||
<br><br> |
||||
<a href="jode.html"> |
||||
<B>Jode</B></a> |
||||
<ul> |
||||
<li><a href="applet.html">Test It Online</a></li> |
||||
<li>Download</li> |
||||
<li><a href="usage.html">Usage</a></li> |
||||
<li><a href="license.html">License</a></li> |
||||
<li><a href="history.html">History</a></li> |
||||
<li><a href="links.html">Links</a></li> |
||||
<li><a href="bluesky.html">Blue Sky</a></li> |
||||
</ul> |
||||
</td> |
||||
<td> |
||||
<h2>Download</h2> |
||||
The simplest way is to get it in precompiled form. I have two jar |
||||
archives: |
||||
|
||||
<ul> |
||||
<li><a href="jode-@VERSION@-1.1.jar">jode-@VERSION@-1.1.jar</a> is for |
||||
JDK 1.1. It already contains Getopt and 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="jode-@VERSION@-1.2.jar">jode-@VERSION@-1.2.jar</a> is for |
||||
JDK 1.2. It already contains Getopt, so you don't need any other |
||||
package.</li> |
||||
</ul> |
||||
|
||||
<a href="jode-@VERSION@.tar.gz">jode-@VERSION@.tar.gz</a> is the source |
||||
code. You need many unix tools to compile this file. It also works |
||||
under windows with <a |
||||
href="http://sourceware.cygnus.com/cygwin/">cygwin</a> and unzip.</li> |
||||
|
||||
<h2>Other packages you may need</h2> |
||||
|
||||
<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/index.htm">http://java.sun.com/products/jdk/1.1/index.htm</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/index.html">http://java.sun.com/products/jdk/1.2/index.html</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>org.gnu.java.util.collections</code>). You can |
||||
download the <a href="collections.tar.gz">source code</a> (including |
||||
the script), or <a href="collections.jar">a precompiled jar file</a>. |
||||
</dd> |
||||
</dl> |
||||
</td> |
||||
</table> |
||||
|
||||
<hr> |
||||
|
||||
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
||||
http://www.informatik.uni-oldenburg.de/~delwi/jode/download.html</A>, last |
||||
updated on <em>24-Okt-1999</em>.</p> |
||||
|
||||
</body> |
||||
</html> |
||||
|
@ -0,0 +1,40 @@ |
||||
<?php require("header.inc"); ?> |
||||
<h2>Download</h2> |
||||
|
||||
The latest source code of <i>JODE</i> is available at the <?php |
||||
sflink("project/") ?>project page</a>. |
||||
You need several other packages to build <i>JODE</i>, check the <?php |
||||
selflink("links") ?>links page</a>. <br><br> |
||||
|
||||
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. |
||||
|
||||
<?php |
||||
function jarlink($what) { |
||||
global $version; |
||||
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 1.1. It already
|
||||
contains Getopt and the collection classes from the GNU Classpath |
||||
project. If you want to use the swing interface, you have to download |
||||
swing separately. </li> |
||||
|
||||
<li> <?php jarlink("-1.2") ?> is for JDK 1.2. It already
|
||||
contains Getopt, so you don't need any other package.</li> </ul> |
||||
|
||||
<h2>CVS Repository</h2> |
||||
|
||||
You can get the latest sources from the <?php sflink("cvs/") ?> |
||||
CVS repository</a>. |
||||
Follow the instruction on that page; use <code>jode</code> as |
||||
<i>modulename</i>. Then change to the directory jode and run |
||||
|
||||
<pre>aclocal && automake -a && autoconf</pre> |
||||
|
||||
Afterwards follow the instruction in the INSTALL file. |
||||
<?php require("footer.inc"); ?> |
@ -0,0 +1,14 @@ |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 30-Jun-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -0,0 +1,42 @@ |
||||
<?php |
||||
$version="1.0.93"; |
||||
|
||||
function selflink($link) { |
||||
echo "<a href=\"./"; |
||||
if ($link != "jode") { |
||||
if (ereg("#", $link)) { |
||||
$link = ereg_replace("#", ".php#", $link); |
||||
} else { |
||||
$link .= ".php"; |
||||
} |
||||
echo "$link"; |
||||
} |
||||
echo "\">"; |
||||
} |
||||
|
||||
function sflink($link) { |
||||
echo "<a href=\"http://sourceforge.net/$link?group_id=3790\">"; |
||||
} |
||||
?><!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"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
<?php /* <CENTER><img src="constructionint.gif" alt="Under Construction, "><br> |
||||
beware broken links</CENTER> */ ?> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<?php require("menu.inc"); ?> |
||||
</td> |
||||
<td valign="top"> |
@ -0,0 +1,23 @@ |
||||
<?php require("header.inc"); ?> |
||||
<h2>History</h2> |
||||
|
||||
<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> |
||||
<?php require("footer.inc"); ?> |
||||
|
@ -0,0 +1,131 @@ |
||||
<!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"> |
||||
</head> |
||||
|
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<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> |
||||
</td> |
||||
<td valign="top"> |
||||
|
||||
|
||||
<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> |
||||
</td></tr> |
||||
</table> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -0,0 +1,69 @@ |
||||
<?php require("header.inc"); ?>
|
||||
|
||||
<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 <?php selflink("license") ?>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: <? selflink("applet") ?>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 <?php sflink("cvs/") ?>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> |
||||
<?php require("footer.inc"); ?> |
@ -1,137 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="description" content="The home page of jode, my Java decompiler."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompile, decompiler, |
||||
java-decompiler, reverse engineering, free, GPL"> |
||||
<meta name="robots" content="index"> |
||||
<meta name="robots" content="nofollow"> |
||||
<meta name="date" content="2000-01-24"> |
||||
</head> |
||||
|
||||
<body> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr> |
||||
<td></td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<B><a href="http://www.informatik.uni-oldenburg.de/~delwi">Homepage</a></B> |
||||
<br><br> |
||||
<a |
||||
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode.html"> |
||||
<B>Jode (WWW)</B></a> |
||||
<ul> |
||||
<li><a href="applet.html">Test It Online</a></li> |
||||
<li><a href="download.html">Download</a></li> |
||||
<li><a href="usage.html">Usage</a></li> |
||||
<li><a href="license.html">License</a></li> |
||||
<li><a href="history.html">History</a></li> |
||||
<li><a href="links.html">Links</a></li> |
||||
<li><a href="bluesky.html">Blue Sky</a></li> |
||||
</ul> |
||||
</td> |
||||
<td> |
||||
<P><i>JODE</i> is a java package containing a decompiler and an |
||||
optimizer (aka obfuscator ;-) for java. This package was totally |
||||
written in my spare time and is available for free (see <a |
||||
href="license.html">license</a>).<p> |
||||
|
||||
<P>The decompiler takes <tt>class</tt> files as input and produces |
||||
something similar to the original <tt>java</tt> file. Of course this |
||||
can't be perfect: There is no way to produce the comments or the names |
||||
of local variables (except when compiled with debuging) and there are |
||||
often more ways to write the same thing. But <i>JODE</i> does its job |
||||
quite well, so you should give it a try: <a href="applet.html">start |
||||
the applet</a>.</P> |
||||
|
||||
<P>The optimizer transforms <tt>class</tt> files in various ways with |
||||
can be controlled by a script file. It supports the following |
||||
operations:</p> |
||||
<ul> |
||||
<li>Renaming class, method, field and local names to shorter or unique |
||||
names or according to a given translation table</li> |
||||
<li>Removing debugging information</li> |
||||
<li>Removing dead code (classes, fields, methods) and constant |
||||
fields</li> |
||||
<li>Optimizing local variable allocation</li> |
||||
</ul> |
||||
|
||||
<h2>News</h2> |
||||
|
||||
<ul> |
||||
<li>I can now decompile <b>inner and anonymous</b> classes.</li> |
||||
<li>The optimizer (aka obfuscator) can now be customized via a small |
||||
config file</li> |
||||
<li>Jode is now <tt>autoconf</tt>igured.</li> |
||||
<li>I use the <a href="http://www.urbanophile.com/arenn/hacking/download.html#getopt">getopt</a> package</li> |
||||
</ul> |
||||
|
||||
<h3>Older News</h3> |
||||
<ul> |
||||
<li>There is a <a href="usage.html#swing">swing</a> interface</li> |
||||
<li>Jode handles zip and jar archives as both input and output.</li> |
||||
</ul> |
||||
|
||||
<h2>Known Bugs</h2> |
||||
|
||||
<p>Small bugs, that should be fixed in the next release:</p> |
||||
<ul> |
||||
<li>If there is more than one assignment to a final local variable |
||||
(they can be conditionally, so that only one is actually excuted), |
||||
jode refuses to mark it as final. This can make decompilation of |
||||
method scoped classes wrong. </li> |
||||
|
||||
<li>There's probably a bug in LocalOptimizer (part of the obfuscator). |
||||
It is triggered very seldom, and may produces incorrect code. If your |
||||
application doesn't work after obfuscation, or is refused by the |
||||
bytecode verifier, try again without the LocalOptimizer. If this was |
||||
the reason send me your class file ;-) |
||||
</li> |
||||
</ul> |
||||
|
||||
<p>Now follows a list of oddities, that will probably never get |
||||
completely fixed.</p> |
||||
|
||||
<p>If not all dependent classes can be found, the verifier (which is |
||||
run before decompilation starts) may exit with a type error. You |
||||
can decompile it with <tt>--verify=off</tt>, but take the warning |
||||
serious, that the types may be incorrect. There's sometimes no way |
||||
to guess the right type, if you don't have access the full class |
||||
hierarchie.<br> |
||||
|
||||
This is not a bug in the verifier: java will complain the same way, |
||||
if it is run with bytecode verification turned on. And if you don't |
||||
have the dependent classes, you can't compile the code again.</p> |
||||
|
||||
<p>There may be situations, where the code doesn't understand complex |
||||
expressions. In this case many ugly temporary variables are used, but |
||||
the code should still be compileable. This does especially happen |
||||
when you compile with <tt>`-O'</tt> flag and javac has inlined some |
||||
methods. </p> |
||||
|
||||
<p>Sometimes this program may exit with an <code>Exception</code> or |
||||
produce incorrect code. Most time the code can't be compiled, so that |
||||
it can be easily spotted. If you have one of these problems (except |
||||
those that occur on some of the <code>jode.test</code> files, I would |
||||
be very interested in a bug report (including the <code>class</code> |
||||
file, if possible).</p> |
||||
|
||||
<p>Sometimes <i>JODE</i> generates some GOTO expression and labels. |
||||
This shouldn't happen any more with code produced by javac or jikes. |
||||
But some flow obfuscator may provoke this. In that case you can run |
||||
the Obfuscator first (to optimize away the flow obfuscation ;-).</p> |
||||
</td> |
||||
</table> |
||||
|
||||
<hr> |
||||
|
||||
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
||||
http://www.informatik.uni-oldenburg.de/~delwi/jode/jode.html</A>, last |
||||
updated on <em>24-Jan-2000</em>.</p> |
||||
|
||||
</body> |
||||
</html> |
@ -1,532 +1,76 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<TITLE>GNU General Public License - GNU Project - Free Software Foundation (FSF)</TITLE> |
||||
<meta name="robots" content="noindex"> |
||||
<meta name="date" content="1999-10-24"> |
||||
<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"> |
||||
</head> |
||||
|
||||
<body> |
||||
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||
<table cellpadding=4 cellspacing=1 width=100%> |
||||
<tr> |
||||
<td></td> |
||||
<tr><td> |
||||
</td> |
||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||
</tr> |
||||
<tr> |
||||
<td valign="top"> |
||||
<B><a href="http://www.informatik.uni-oldenburg.de/~delwi">Homepage</a></B> |
||||
<br><br> |
||||
<a href="jode.html"> |
||||
<B>Jode</B></a> |
||||
<ul> |
||||
<li><a href="applet.html">Test It Online</a></li> |
||||
<li><a href="download.html">Download</a></li> |
||||
<li><a href="usage.html">Usage</a></li> |
||||
<li>License</li> |
||||
<li><a href="history.html">History</a></li> |
||||
<li><a href="links.html">Links</a></li> |
||||
<li><a href="bluesky.html">Blue Sky</a></li> |
||||
</ul> |
||||
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||
<tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="./"><B>Home</B></a><br> |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||
<br> |
||||
<a href="./applet.html">Applet</a><br> |
||||
<a href="./download.html">Download</a><br> |
||||
<a href="./usage.html">Documentation</a><br> |
||||
<a href="./license.html">License</a><br> |
||||
<a href="./history.html">History</a><br> |
||||
<a href="./links.html">Links</a><br> |
||||
<a href="./bluesky.html">Blue Sky</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Feedback</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="http://sourceforge.net/bugs/?group_id=3790">Bug Tracking</a><br> |
||||
<a href="http://sourceforge.net/forum/?group_id=3790">Public Forums</a><br> |
||||
<a href="http://lists.sourceforge.net/mailman/listinfo/jode-users">Mailing List</a><br> |
||||
<a href="http://sourceforge.net/sendmessage.html?touser=18252">Private Mail</a><tr bgcolor="7272cc"> |
||||
<td align="center"><font color="ffffff"><b>Download</b></font></td></tr> |
||||
<tr><td align="right"> |
||||
<a href="ftp://jode.sourceforge.net/pub/jode/">FTP server</a><br> |
||||
<a href="http://sourceforge.net/project/filelist.html?group_id=3790">Source releases</a></td></tr> |
||||
<tr bgcolor="ffffff"><td align="center"><br>Powered by <br> |
||||
<a href="http://sourceforge.net"><img src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" border=0 width=88 height=31 alt="SourceForge"></a><br> |
||||
<br>Best viewed with <br> |
||||
<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> |
||||
</td> |
||||
<td> |
||||
<h2>License</h2> |
||||
|
||||
<p><i>JODE</i> is Copyright 1998,1999 by Jochen Hoenicke. It is |
||||
released under GNU GPL. That basically means, that you can copy or |
||||
modify this code, as long as you put all your modification under the |
||||
GPL again. Here is the complete license:</p> |
||||
|
||||
<H2>Table of Contents</H2> |
||||
<UL> |
||||
<LI><A NAME="TOC1" HREF="#SEC1">GNU GENERAL PUBLIC LICENSE</A> |
||||
<UL> |
||||
<LI><A NAME="TOC2" HREF="#SEC2">Preamble</A> |
||||
<LI><A NAME="TOC3" HREF="#SEC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A> |
||||
<LI><A NAME="TOC4" HREF="#SEC4">How to Apply These Terms to Your New Programs</A> |
||||
|
||||
</UL> |
||||
</UL> |
||||
|
||||
<P> |
||||
|
||||
<HR> |
||||
|
||||
<P> |
||||
|
||||
|
||||
|
||||
<H2><A NAME="SEC1" HREF="#TOC1">GNU GENERAL PUBLIC LICENSE</A></H2> |
||||
<P> |
||||
Version 2, June 1991 |
||||
|
||||
</P> |
||||
|
||||
<PRE> |
||||
Copyright (C) 1989, 1991 Free Software Foundation, Inc. |
||||
59 Temple Place - Suite 330, Boston, MA 02111-1307, USA |
||||
|
||||
Everyone is permitted to copy and distribute verbatim copies |
||||
of this license document, but changing it is not allowed. |
||||
</PRE> |
||||
|
||||
|
||||
|
||||
<H2><A NAME="SEC2" HREF="#TOC2">Preamble</A></H2> |
||||
|
||||
<P> |
||||
The licenses for most software are designed to take away your |
||||
freedom to share and change it. By contrast, the GNU General Public |
||||
License is intended to guarantee your freedom to share and change free |
||||
software--to make sure the software is free for all its users. This |
||||
General Public License applies to most of the Free Software |
||||
Foundation's software and to any other program whose authors commit to |
||||
using it. (Some other Free Software Foundation software is covered by |
||||
the GNU Library General Public License instead.) You can apply it to |
||||
your programs, too. |
||||
|
||||
</P> |
||||
<P> |
||||
When we speak of free software, we are referring to freedom, not |
||||
price. Our General Public Licenses are designed to make sure that you |
||||
have the freedom to distribute copies of free software (and charge for |
||||
this service if you wish), that you receive source code or can get it |
||||
if you want it, that you can change the software or use pieces of it |
||||
in new free programs; and that you know you can do these things. |
||||
|
||||
</P> |
||||
<P> |
||||
To protect your rights, we need to make restrictions that forbid |
||||
anyone to deny you these rights or to ask you to surrender the rights. |
||||
These restrictions translate to certain responsibilities for you if you |
||||
distribute copies of the software, or if you modify it. |
||||
|
||||
</P> |
||||
<P> |
||||
For example, if you distribute copies of such a program, whether |
||||
gratis or for a fee, you must give the recipients all the rights that |
||||
you have. You must make sure that they, too, receive or can get the |
||||
source code. And you must show them these terms so they know their |
||||
rights. |
||||
|
||||
</P> |
||||
<P> |
||||
We protect your rights with two steps: (1) copyright the software, and |
||||
(2) offer you this license which gives you legal permission to copy, |
||||
distribute and/or modify the software. |
||||
|
||||
</P> |
||||
<P> |
||||
Also, for each author's protection and ours, we want to make certain |
||||
that everyone understands that there is no warranty for this free |
||||
software. If the software is modified by someone else and passed on, we |
||||
want its recipients to know that what they have is not the original, so |
||||
that any problems introduced by others will not reflect on the original |
||||
authors' reputations. |
||||
|
||||
</P> |
||||
<P> |
||||
Finally, any free program is threatened constantly by software |
||||
patents. We wish to avoid the danger that redistributors of a free |
||||
program will individually obtain patent licenses, in effect making the |
||||
program proprietary. To prevent this, we have made it clear that any |
||||
patent must be licensed for everyone's free use or not licensed at all. |
||||
|
||||
</P> |
||||
<P> |
||||
The precise terms and conditions for copying, distribution and |
||||
modification follow. |
||||
|
||||
</P> |
||||
|
||||
|
||||
<H2><A NAME="SEC3" HREF="#TOC3">TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION</A></H2> |
||||
|
||||
|
||||
<P> |
||||
|
||||
<STRONG>0.</STRONG> |
||||
This License applies to any program or other work which contains |
||||
a notice placed by the copyright holder saying it may be distributed |
||||
under the terms of this General Public License. The "Program", below, |
||||
refers to any such program or work, and a "work based on the Program" |
||||
means either the Program or any derivative work under copyright law: |
||||
that is to say, a work containing the Program or a portion of it, |
||||
either verbatim or with modifications and/or translated into another |
||||
language. (Hereinafter, translation is included without limitation in |
||||
the term "modification".) Each licensee is addressed as "you". |
||||
<P> |
||||
|
||||
Activities other than copying, distribution and modification are not |
||||
covered by this License; they are outside its scope. The act of |
||||
running the Program is not restricted, and the output from the Program |
||||
is covered only if its contents constitute a work based on the |
||||
Program (independent of having been made by running the Program). |
||||
Whether that is true depends on what the Program does. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>1.</STRONG> |
||||
You may copy and distribute verbatim copies of the Program's |
||||
source code as you receive it, in any medium, provided that you |
||||
conspicuously and appropriately publish on each copy an appropriate |
||||
copyright notice and disclaimer of warranty; keep intact all the |
||||
notices that refer to this License and to the absence of any warranty; |
||||
and give any other recipients of the Program a copy of this License |
||||
along with the Program. |
||||
<P> |
||||
|
||||
You may charge a fee for the physical act of transferring a copy, and |
||||
you may at your option offer warranty protection in exchange for a fee. |
||||
<P> |
||||
|
||||
<STRONG>2.</STRONG> |
||||
You may modify your copy or copies of the Program or any portion |
||||
of it, thus forming a work based on the Program, and copy and |
||||
distribute such modifications or work under the terms of Section 1 |
||||
above, provided that you also meet all of these conditions: |
||||
<P> |
||||
|
||||
<UL> |
||||
|
||||
<LI><STRONG>a)</STRONG> |
||||
You must cause the modified files to carry prominent notices |
||||
stating that you changed the files and the date of any change. |
||||
|
||||
<P> |
||||
<LI><STRONG>b)</STRONG> |
||||
You must cause any work that you distribute or publish, that in |
||||
whole or in part contains or is derived from the Program or any |
||||
part thereof, to be licensed as a whole at no charge to all third |
||||
parties under the terms of this License. |
||||
|
||||
<P> |
||||
<LI><STRONG>c)</STRONG> |
||||
If the modified program normally reads commands interactively |
||||
when run, you must cause it, when started running for such |
||||
interactive use in the most ordinary way, to print or display an |
||||
announcement including an appropriate copyright notice and a |
||||
notice that there is no warranty (or else, saying that you provide |
||||
a warranty) and that users may redistribute the program under |
||||
these conditions, and telling the user how to view a copy of this |
||||
License. (Exception: if the Program itself is interactive but |
||||
does not normally print such an announcement, your work based on |
||||
the Program is not required to print an announcement.) |
||||
</UL> |
||||
|
||||
These requirements apply to the modified work as a whole. If |
||||
identifiable sections of that work are not derived from the Program, |
||||
and can be reasonably considered independent and separate works in |
||||
themselves, then this License, and its terms, do not apply to those |
||||
sections when you distribute them as separate works. But when you |
||||
distribute the same sections as part of a whole which is a work based |
||||
on the Program, the distribution of the whole must be on the terms of |
||||
this License, whose permissions for other licensees extend to the |
||||
entire whole, and thus to each and every part regardless of who wrote it. |
||||
<P> |
||||
|
||||
Thus, it is not the intent of this section to claim rights or contest |
||||
your rights to work written entirely by you; rather, the intent is to |
||||
exercise the right to control the distribution of derivative or |
||||
collective works based on the Program. |
||||
<P> |
||||
|
||||
In addition, mere aggregation of another work not based on the Program |
||||
with the Program (or with a work based on the Program) on a volume of |
||||
a storage or distribution medium does not bring the other work under |
||||
the scope of this License. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>3.</STRONG> |
||||
You may copy and distribute the Program (or a work based on it, |
||||
under Section 2) in object code or executable form under the terms of |
||||
Sections 1 and 2 above provided that you also do one of the following: |
||||
|
||||
|
||||
<!-- we use this doubled UL to get the sub-sections indented, --> |
||||
<!-- while making the bullets as unobvious as possible. --> |
||||
<UL> |
||||
|
||||
<LI><STRONG>a)</STRONG> |
||||
Accompany it with the complete corresponding machine-readable |
||||
source code, which must be distributed under the terms of Sections |
||||
1 and 2 above on a medium customarily used for software interchange; or, |
||||
|
||||
<P> |
||||
<LI><STRONG>b)</STRONG> |
||||
Accompany it with a written offer, valid for at least three |
||||
years, to give any third party, for a charge no more than your |
||||
cost of physically performing source distribution, a complete |
||||
machine-readable copy of the corresponding source code, to be |
||||
distributed under the terms of Sections 1 and 2 above on a medium |
||||
customarily used for software interchange; or, |
||||
|
||||
<P> |
||||
<LI><STRONG>c)</STRONG> |
||||
Accompany it with the information you received as to the offer |
||||
to distribute corresponding source code. (This alternative is |
||||
allowed only for noncommercial distribution and only if you |
||||
received the program in object code or executable form with such |
||||
an offer, in accord with Subsection b above.) |
||||
</UL> |
||||
|
||||
The source code for a work means the preferred form of the work for |
||||
making modifications to it. For an executable work, complete source |
||||
code means all the source code for all modules it contains, plus any |
||||
associated interface definition files, plus the scripts used to |
||||
control compilation and installation of the executable. However, as a |
||||
special exception, the source code distributed need not include |
||||
anything that is normally distributed (in either source or binary |
||||
form) with the major components (compiler, kernel, and so on) of the |
||||
operating system on which the executable runs, unless that component |
||||
itself accompanies the executable. |
||||
<P> |
||||
|
||||
If distribution of executable or object code is made by offering |
||||
access to copy from a designated place, then offering equivalent |
||||
access to copy the source code from the same place counts as |
||||
distribution of the source code, even though third parties are not |
||||
compelled to copy the source along with the object code. |
||||
<P> |
||||
|
||||
<STRONG>4.</STRONG> |
||||
You may not copy, modify, sublicense, or distribute the Program |
||||
except as expressly provided under this License. Any attempt |
||||
otherwise to copy, modify, sublicense or distribute the Program is |
||||
void, and will automatically terminate your rights under this License. |
||||
However, parties who have received copies, or rights, from you under |
||||
this License will not have their licenses terminated so long as such |
||||
parties remain in full compliance. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>5.</STRONG> |
||||
You are not required to accept this License, since you have not |
||||
signed it. However, nothing else grants you permission to modify or |
||||
distribute the Program or its derivative works. These actions are |
||||
prohibited by law if you do not accept this License. Therefore, by |
||||
modifying or distributing the Program (or any work based on the |
||||
Program), you indicate your acceptance of this License to do so, and |
||||
all its terms and conditions for copying, distributing or modifying |
||||
the Program or works based on it. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>6.</STRONG> |
||||
Each time you redistribute the Program (or any work based on the |
||||
Program), the recipient automatically receives a license from the |
||||
original licensor to copy, distribute or modify the Program subject to |
||||
these terms and conditions. You may not impose any further |
||||
restrictions on the recipients' exercise of the rights granted herein. |
||||
You are not responsible for enforcing compliance by third parties to |
||||
this License. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>7.</STRONG> |
||||
If, as a consequence of a court judgment or allegation of patent |
||||
infringement or for any other reason (not limited to patent issues), |
||||
conditions are imposed on you (whether by court order, agreement or |
||||
otherwise) that contradict the conditions of this License, they do not |
||||
excuse you from the conditions of this License. If you cannot |
||||
distribute so as to satisfy simultaneously your obligations under this |
||||
License and any other pertinent obligations, then as a consequence you |
||||
may not distribute the Program at all. For example, if a patent |
||||
license would not permit royalty-free redistribution of the Program by |
||||
all those who receive copies directly or indirectly through you, then |
||||
the only way you could satisfy both it and this License would be to |
||||
refrain entirely from distribution of the Program. |
||||
<P> |
||||
|
||||
If any portion of this section is held invalid or unenforceable under |
||||
any particular circumstance, the balance of the section is intended to |
||||
apply and the section as a whole is intended to apply in other |
||||
circumstances. |
||||
<P> |
||||
|
||||
It is not the purpose of this section to induce you to infringe any |
||||
patents or other property right claims or to contest validity of any |
||||
such claims; this section has the sole purpose of protecting the |
||||
integrity of the free software distribution system, which is |
||||
implemented by public license practices. Many people have made |
||||
generous contributions to the wide range of software distributed |
||||
through that system in reliance on consistent application of that |
||||
system; it is up to the author/donor to decide if he or she is willing |
||||
to distribute software through any other system and a licensee cannot |
||||
impose that choice. |
||||
<P> |
||||
|
||||
This section is intended to make thoroughly clear what is believed to |
||||
be a consequence of the rest of this License. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>8.</STRONG> |
||||
If the distribution and/or use of the Program is restricted in |
||||
certain countries either by patents or by copyrighted interfaces, the |
||||
original copyright holder who places the Program under this License |
||||
may add an explicit geographical distribution limitation excluding |
||||
those countries, so that distribution is permitted only in or among |
||||
countries not thus excluded. In such case, this License incorporates |
||||
the limitation as if written in the body of this License. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>9.</STRONG> |
||||
The Free Software Foundation may publish revised and/or new versions |
||||
of the General Public License from time to time. Such new versions will |
||||
be similar in spirit to the present version, but may differ in detail to |
||||
address new problems or concerns. |
||||
<P> |
||||
|
||||
Each version is given a distinguishing version number. If the Program |
||||
specifies a version number of this License which applies to it and "any |
||||
later version", you have the option of following the terms and conditions |
||||
either of that version or of any later version published by the Free |
||||
Software Foundation. If the Program does not specify a version number of |
||||
this License, you may choose any version ever published by the Free Software |
||||
Foundation. |
||||
|
||||
<P> |
||||
|
||||
|
||||
<STRONG>10.</STRONG> |
||||
If you wish to incorporate parts of the Program into other free |
||||
programs whose distribution conditions are different, write to the author |
||||
to ask for permission. For software which is copyrighted by the Free |
||||
Software Foundation, write to the Free Software Foundation; we sometimes |
||||
make exceptions for this. Our decision will be guided by the two goals |
||||
of preserving the free status of all derivatives of our free software and |
||||
of promoting the sharing and reuse of software generally. |
||||
|
||||
|
||||
|
||||
<P><STRONG>NO WARRANTY</STRONG></P> |
||||
|
||||
<P> |
||||
|
||||
<STRONG>11.</STRONG> |
||||
BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY |
||||
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN |
||||
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES |
||||
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED |
||||
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
||||
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS |
||||
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE |
||||
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, |
||||
REPAIR OR CORRECTION. |
||||
|
||||
<P> |
||||
|
||||
<STRONG>12.</STRONG> |
||||
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING |
||||
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR |
||||
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, |
||||
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING |
||||
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED |
||||
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY |
||||
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER |
||||
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE |
||||
POSSIBILITY OF SUCH DAMAGES. |
||||
|
||||
<P> |
||||
|
||||
|
||||
<H2>END OF TERMS AND CONDITIONS</H2> |
||||
|
||||
|
||||
|
||||
<H2><A NAME="SEC4" HREF="#TOC4">How to Apply These Terms to Your New Programs</A></H2> |
||||
|
||||
<P> |
||||
If you develop a new program, and you want it to be of the greatest |
||||
possible use to the public, the best way to achieve this is to make it |
||||
free software which everyone can redistribute and change under these terms. |
||||
|
||||
</P> |
||||
<P> |
||||
To do so, attach the following notices to the program. It is safest |
||||
to attach them to the start of each source file to most effectively |
||||
convey the exclusion of warranty; and each file should have at least |
||||
the "copyright" line and a pointer to where the full notice is found. |
||||
|
||||
</P> |
||||
|
||||
<PRE> |
||||
<VAR>one line to give the program's name and an idea of what it does.</VAR> |
||||
Copyright (C) <VAR>yyyy</VAR> <VAR>name of author</VAR> |
||||
<td valign="top"> |
||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||
|
||||
This program is free software; you can redistribute it and/or |
||||
modify it under the terms of the GNU General Public License |
||||
as published by the Free Software Foundation; either version 2 |
||||
of the License, or (at your option) any later version. |
||||
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.<br><br> |
||||
|
||||
This program is distributed in the hope that it will be useful, |
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||
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. |
||||
|
||||
You should have received a copy of the GNU General Public License |
||||
along with this program; if not, write to the Free Software |
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. |
||||
</PRE> |
||||
|
||||
<P> |
||||
Also add information on how to contact you by electronic and paper mail. |
||||
|
||||
</P> |
||||
<P> |
||||
If the program is interactive, make it output a short notice like this |
||||
when it starts in an interactive mode: |
||||
|
||||
</P> |
||||
|
||||
<PRE> |
||||
Gnomovision version 69, Copyright (C) <VAR>yyyy</VAR> <VAR>name of author</VAR> |
||||
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details |
||||
type `show w'. This is free software, and you are welcome |
||||
to redistribute it under certain conditions; type `show c' |
||||
for details. |
||||
</PRE> |
||||
|
||||
<P> |
||||
The hypothetical commands <SAMP>`show w'</SAMP> and <SAMP>`show c'</SAMP> should show |
||||
the appropriate parts of the General Public License. Of course, the |
||||
commands you use may be called something other than <SAMP>`show w'</SAMP> and |
||||
<SAMP>`show c'</SAMP>; they could even be mouse-clicks or menu items--whatever |
||||
suits your program. |
||||
|
||||
</P> |
||||
<P> |
||||
You should also get your employer (if you work as a programmer) or your |
||||
school, if any, to sign a "copyright disclaimer" for the program, if |
||||
necessary. Here is a sample; alter the names: |
||||
|
||||
</P> |
||||
|
||||
<PRE> |
||||
Yoyodyne, Inc., hereby disclaims all copyright |
||||
interest in the program `Gnomovision' |
||||
(which makes passes at compilers) written |
||||
by James Hacker. |
||||
|
||||
<VAR>signature of Ty Coon</VAR>, 1 April 1989 |
||||
Ty Coon, President of Vice |
||||
</PRE> |
||||
|
||||
<P> |
||||
This General Public License does not permit incorporating your program into |
||||
proprietary programs. If your program is a subroutine library, you may |
||||
consider it more useful to permit linking proprietary applications with the |
||||
library. If this is what you want to do, use the GNU Library General |
||||
Public License instead of this License. |
||||
</td> |
||||
</td></tr> |
||||
</table> |
||||
<hr> |
||||
|
||||
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
||||
http://www.informatik.uni-oldenburg.de/~delwi/jode/history.html</A>, last |
||||
updated on <em>24-Okt-1999</em>.</p> |
||||
|
||||
</body> |
||||
</html> |
||||
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||
<TR> |
||||
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 8-May-2000, |
||||
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
||||
|
@ -0,0 +1,15 @@ |
||||
<?php require("header.inc"); ?> |
||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||
|
||||
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.<br><br> |
||||
|
||||
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. |
||||
|
||||
<?php require("footer.inc"); ?> |
@ -0,0 +1,62 @@ |
||||
<?php require("header.inc") ?> |
||||
<h1><i>JODE</i> Links</h1> |
||||
<h3>Other decompilers</h3> |
||||
<ul> |
||||
<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> |
||||
<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/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>org.gnu.java.util.collections</code>). You can |
||||
download the <a href="http://www.informatik.uni-oldenburg.de/~delwi/jode/collections.tar.gz">source code</a> (including |
||||
the script), or <a href="collections.jar">a precompiled jar file</a>. |
||||
</dd> |
||||
</dl> |
||||
<?php require("footer.inc"); ?> |
||||
|
@ -0,0 +1,115 @@ |
||||
<?php |
||||
$menu = array( |
||||
"Jode", |
||||
array("<B>Home</B>" , "selflink", "jode", |
||||
"Project page" , "sflink", "project/", |
||||
"-", "-", "-", |
||||
"Applet" , "selflink", "applet", |
||||
"Download" , "selflink", "download", |
||||
"Documentation", "selflink", "usage", |
||||
"License" , "selflink", "license", |
||||
"History" , "selflink", "history", |
||||
"Links" , "selflink", "links", |
||||
"Blue Sky" , "selflink", "bluesky"), |
||||
"Feedback", |
||||
array("Bug Tracking" , "sflink", "bugs/", |
||||
"Public Forums" , "sflink", "forum/", |
||||
"Mailing List" , "link", |
||||
"http://lists.sourceforge.net/mailman/listinfo/jode-users", |
||||
"Private Mail" , "link", |
||||
"http://sourceforge.net/sendmessage.php?touser=18252"), |
||||
"Download", |
||||
array("FTP server", "link", "ftp://jode.sourceforge.net/pub/jode/", |
||||
"Source releases", "sflink", "project/filelist.php")); |
||||
|
||||
$images = array( |
||||
"Powered by ", "http://sourceforge.net/sflogo.php?group_id=3790&type=1", |
||||
"SourceForge", "http://sourceforge.net", |
||||
"Best viewed with ", "a-logo.gif", |
||||
"Any Browser", "http://www.anybrowser.org/campaign/"); |
||||
|
||||
if (eregi("^Lynx", $HTTP_USER_AGENT)) { |
||||
|
||||
reset($menu); |
||||
while (list($dummy, $header) = each($menu)) { |
||||
list($dummy, $subitems) = each($menu); |
||||
|
||||
echo "<b>$header:</b>\n"; |
||||
reset($subitems); |
||||
while (list($dummy, $name) = each($subitems)) { |
||||
list($dummy, $type) = each($subitems); |
||||
list($dummy, $link) = each($subitems); |
||||
if ($type == "selflink") { |
||||
selflink($link); |
||||
} else if ($type == "sflink") { |
||||
sflink($link); |
||||
} else if ($type == "-") { |
||||
echo "<br>\n"; |
||||
continue; |
||||
} else if ($type == "link") { |
||||
echo "<a href=\"$link\">"; |
||||
} |
||||
$name = ereg_replace(" ", " ", $name); |
||||
echo "$name</a>"; |
||||
if (current($subitems)) { |
||||
echo " |\n"; |
||||
} |
||||
} |
||||
echo "<br>\n\n"; |
||||
} |
||||
echo "<right>\n"; |
||||
reset($images); |
||||
while (list($dummy, $label) = each($images)) { |
||||
list($dummy, $src) = each($images); |
||||
list($dummy, $alt) = each($images); |
||||
list($dummy, $link) = each($images); |
||||
echo "$label<a href=\"$link\"><img src=\"$src\" border=0"; |
||||
echo " width=88 height=31 alt=\"$alt\"></a>\n"; |
||||
} |
||||
echo "</right>\n"; |
||||
} else { |
||||
echo "<table cellspacing=0 cellpadding=3 width=100%"; |
||||
echo " border=0 bgcolor=eeeef8>\n"; |
||||
|
||||
reset($menu); |
||||
while (list($dummy, $header) = each($menu)) { |
||||
list($dummy, $subitems) = each($menu); |
||||
echo "<tr bgcolor=\"7272cc\">\n<td align=\"center\">"; |
||||
echo "<font color=\"ffffff\"><b>$header</b></font></td></tr>\n"; |
||||
echo "<tr><td align=\"right\">\n"; |
||||
reset($subitems); |
||||
while (list($dummy, $name) = each($subitems)) { |
||||
list($dummy, $type) = each($subitems); |
||||
list($dummy, $link) = each($subitems); |
||||
if ($type == "selflink") { |
||||
selflink($link); |
||||
} else if ($type == "sflink") { |
||||
sflink($link); |
||||
} else if ($type == "-") { |
||||
echo "<br>\n"; |
||||
continue; |
||||
} else if ($type == "link") { |
||||
echo "<a href=\"$link\">"; |
||||
} |
||||
$name = ereg_replace(" ", " ", $name); |
||||
echo "$name</a>"; |
||||
if (current($subitems)) { |
||||
echo "<br>\n"; |
||||
} |
||||
} |
||||
} |
||||
echo "</td></tr>\n"; |
||||
echo "<tr bgcolor=\"ffffff\"><td align=\"center\">"; |
||||
|
||||
reset($images); |
||||
while (list($dummy, $label) = each($images)) { |
||||
list($dummy, $src) = each($images); |
||||
list($dummy, $alt) = each($images); |
||||
list($dummy, $link) = each($images); |
||||
echo "<br>$label<br>\n"; |
||||
echo "<a href=\"$link\"><img src=\"$src\" border=0"; |
||||
echo " width=88 height=31 alt=\"$alt\"></a><br>\n"; |
||||
} |
||||
echo "</td></tr></table>\n"; |
||||
} |
||||
?> |
@ -0,0 +1,230 @@ |
||||
<?php require("header.inc") ?> |
||||
<?php /* MOVE TO menu.inc |
||||
<a href="#decompiler">Decompiler</a><br> |
||||
<a href="#cmdline">Command Line</a><br> |
||||
<a href="#awt">AWT Interface</a><br> |
||||
<a href="#swing">Swing Interface</a><br> |
||||
<a href="#java">Java Interface</a><br> |
||||
<a href="#optimizer">Obfuscator</a><br> |
||||
*/ ?> |
||||
<a name="decompiler"> |
||||
<h1>Using the Decompiler</h1></a> |
||||
After you have <?php selflink("download") ?>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-xxx.jar;C:\swing\swingall.jar |
||||
</pre> |
||||
</li><li>Under Unix you start a shell and type (for bourne shell): |
||||
<pre>export CLASSPATH=/tmp/jode-xxx.jar:/usr/local/swing/swingall.jar</pre> |
||||
or for csh: |
||||
<pre>setenv CLASSPATH /tmp/jode-xxx.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. Adapt the CLASSPATH in the file and put it to a |
||||
convenient location. |
||||
<pre> |
||||
jar -xvf jode-xxx.jar bin/jode.bat <i>resp.</i> bin/jode |
||||
</pre> |
||||
|
||||
<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> |
||||
|
||||
<a name="awt"><h3>AWT Interface</h3></a> |
||||
|
||||
The AWT Interface looks exactly like the <?php selflink("applet") ?> |
||||
applet</a>. In fact the applet uses the AWT Interface. You start it |
||||
after setting the <tt>CLASSPATH</tt> (see <?php |
||||
selflink("usage#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 <?php selflink("links#swing") ?>link
|
||||
page</a>. You can invoke it like this: |
||||
<pre> |
||||
java jode.swingui.Main --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> |
||||
|
||||
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 contact me if you use <i>JODE</i> in this |
||||
way.<br> |
||||
|
||||
You may use this <a |
||||
href="ftp://jode.sourceforge.net/pub/jode/jode-embedded.jar">stripped |
||||
down jar archive</a> containing all necessary classes. |
||||
|
||||
<a name="optimizer"><h1>Using the Obfuscator</h1> |
||||
|
||||
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>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> |
||||
<?php require("footer.inc") ?> |
Loading…
Reference in new issue