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"> |
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||||
<html> |
<html> |
||||||
<head> |
<head> |
||||||
<TITLE>GNU General Public License - GNU Project - Free Software Foundation (FSF)</TITLE> |
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||||
<meta name="robots" content="noindex"> |
<meta name="date" content="2000-06-30"> |
||||||
<meta name="date" content="1999-10-24"> |
<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> |
</head> |
||||||
|
|
||||||
<body> |
<BODY bgcolor=#FFFFFF topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"> |
||||||
<table cellpadding=4 cellspacing=1 width=100%> |
<table cellpadding=4 cellspacing=1 width=100%> |
||||||
<tr> |
<tr><td> |
||||||
<td></td> |
</td> |
||||||
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
<td> <img src="jode-logo.gif" alt="JODE" width=286 height=110></td> |
||||||
</tr> |
</tr> |
||||||
<tr> |
<tr> |
||||||
<td valign="top"> |
<td valign="top"> |
||||||
<B><a href="http://www.informatik.uni-oldenburg.de/~delwi">Homepage</a></B> |
<table cellspacing=0 cellpadding=3 width=100% border=0 bgcolor=eeeef8> |
||||||
<br><br> |
<tr bgcolor="7272cc"> |
||||||
<a href="jode.html"> |
<td align="center"><font color="ffffff"><b>Jode</b></font></td></tr> |
||||||
<B>Jode</B></a> |
<tr><td align="right"> |
||||||
<ul> |
<a href="./"><B>Home</B></a><br> |
||||||
<li><a href="applet.html">Test It Online</a></li> |
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a><br> |
||||||
<li><a href="download.html">Download</a></li> |
<br> |
||||||
<li><a href="usage.html">Usage</a></li> |
<a href="./applet.html">Applet</a><br> |
||||||
<li>License</li> |
<a href="./download.html">Download</a><br> |
||||||
<li><a href="history.html">History</a></li> |
<a href="./usage.html">Documentation</a><br> |
||||||
<li><a href="links.html">Links</a></li> |
<a href="./license.html">License</a><br> |
||||||
<li><a href="bluesky.html">Blue Sky</a></li> |
<a href="./history.html">History</a><br> |
||||||
</ul> |
<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> |
||||||
<td> |
<td valign="top"> |
||||||
<h2>License</h2> |
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||||
|
|
||||||
<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> |
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or |
This program is free software; you can redistribute it and/or modify |
||||||
modify it under the terms of the GNU General Public License |
it under the terms of the <a |
||||||
as published by the Free Software Foundation; either version 2 |
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
||||||
of the License, or (at your option) any later version. |
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, |
This program is distributed in the hope that it will be useful, |
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
but <b>without any warranty</b>; without even the implied warranty of |
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the |
||||||
GNU General Public License for more details. |
GNU General Public License for more details. |
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
</td></tr> |
||||||
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> |
|
||||||
</table> |
</table> |
||||||
<hr> |
<TABLE width="100%" border="0" cellspacing="0" cellpadding="2" bgcolor="737b9c"> |
||||||
|
<TR> |
||||||
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
<TD align="center"><FONT color="#ffffff"><SPAN class="titlebar"> |
||||||
http://www.informatik.uni-oldenburg.de/~delwi/jode/history.html</A>, last |
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||||
updated on <em>24-Okt-1999</em>.</p> |
Last updated on 8-May-2000, |
||||||
|
Copyright © 1998-2000 by Jochen Hoenicke.</SPAN></FONT> |
||||||
</body> |
</TD> |
||||||
</html> |
</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