git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@1169 379699f6-c40d-0410-875b-85095c16579ebranch_1_1
parent
7e6a592c69
commit
cf5477df8a
@ -1,5 +1,12 @@ |
|||||||
## Input file for automake to generate the Makefile.in used by configure
|
## Input file for automake to generate the Makefile.in used by configure
|
||||||
|
|
||||||
EXTRA_DIST = \
|
EXTRA_DIST = \
|
||||||
jode.html jode-applet.html jode-obfuscator.html jode-unix.html \
|
applet.html.in \ |
||||||
jode-useapplet.html jode-win.html
|
download.html.in \ |
||||||
|
frame.html \ |
||||||
|
history.html \ |
||||||
|
jode.html \ |
||||||
|
license.html \ |
||||||
|
usage.html \ |
||||||
|
myproject.jos \ |
||||||
|
jode-logo.gif |
||||||
|
@ -0,0 +1,95 @@ |
|||||||
|
<!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>Test It Online</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> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<h1>The <i>JODE</i> Applet</h1> |
||||||
|
|
||||||
|
<applet code="jode/JodeApplet.class" archive="jode-applet.jar" width=540 height=400> |
||||||
|
<param name=classpath |
||||||
|
value="http://www.informatik.uni-oldenburg.de/~mw/plasma.jar"> |
||||||
|
<param name=class value="PlasmaApplet"> |
||||||
|
</applet><br><br>http://www.informatik.uni-oldenburg.de |
||||||
|
|
||||||
|
Press the start button to decompile <a |
||||||
|
href="http://www.informatik.uni-oldenburg.de/~mw/">Michael</a>'s <a |
||||||
|
href="http://www.informatik.uni-oldenburg.de/~mw/plasma">Plasma |
||||||
|
applet</a>. You may change the classpath and class name to point to a |
||||||
|
class file of your choice. But note that most browsers doesn't allow |
||||||
|
loading files from a different server.<br><br> |
||||||
|
|
||||||
|
Save probably doesn't work, because it is forbidden by the browser.<br><br> |
||||||
|
|
||||||
|
You may give multiple entries in the class path field separated by a |
||||||
|
comma. The components may be local or remote zip or jar files or |
||||||
|
directories. Note that browsers forbid accesses to different hosts or |
||||||
|
local files that are not in a subdirectory of the applet |
||||||
|
directory.<br><br> |
||||||
|
|
||||||
|
|
||||||
|
<h1>Removing security restrictions with Internet Explorer</h1> |
||||||
|
|
||||||
|
<p>This information was submitted by <a |
||||||
|
href="mailto:PopescuM@health.missouri.edu">Mihail Popescu |
||||||
|
<PopescuM@health.missouri.edu></a>. Please note that this will |
||||||
|
<i>give all applets on our web server full access to your computer</i>, |
||||||
|
so use it at your own risk.</p> |
||||||
|
|
||||||
|
<p>Go to the View/Internet Options... dialog<br> |
||||||
|
Select the "Security" tab</p> |
||||||
|
<ul> |
||||||
|
<li>Set "Zone:" to "Trusted sites zone"</li> |
||||||
|
<li>Click "Add Sites..." |
||||||
|
<ul><li>Add http://www.informatik.uni-oldenburg.de</li> |
||||||
|
<li>Uncheck "Requires server verificaton..."</li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul></li> |
||||||
|
<li>Check "Custom (for expert users)"</li> |
||||||
|
<li>Click "Settings..." |
||||||
|
<ul><li>Under Java/Java permissions, check "Custom"</li> |
||||||
|
<li>Click "Java Custom Settings" |
||||||
|
<ul><li>Select "Edit Permissions" tab</li> |
||||||
|
<li>Under "Unsigned Content"/"Run Unsigned Content", make sure |
||||||
|
"Run in sandbox" is checked and then check all the "Enable" |
||||||
|
buttons under "Additional Unsigned Permissions"</li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul></li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul></li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
</table> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
||||||
|
http://www.informatik.uni-oldenburg.de/~delwi/jode/applet.html</A>, last |
||||||
|
updated on <em>24-Okt-1999</em>.</p> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,95 @@ |
|||||||
|
<!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>Test It Online</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> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<h1>The <i>JODE</i> Applet</h1> |
||||||
|
|
||||||
|
<applet code="jode/JodeApplet.class" archive="jode-applet.jar" width=540 height=400> |
||||||
|
<param name=classpath |
||||||
|
value="http://www.informatik.uni-oldenburg.de/~mw/plasma.jar"> |
||||||
|
<param name=class value="PlasmaApplet"> |
||||||
|
</applet><br><br>http://www.informatik.uni-oldenburg.de |
||||||
|
|
||||||
|
Press the start button to decompile <a |
||||||
|
href="http://www.informatik.uni-oldenburg.de/~mw/">Michael</a>'s <a |
||||||
|
href="http://www.informatik.uni-oldenburg.de/~mw/plasma">Plasma |
||||||
|
applet</a>. You may change the classpath and class name to point to a |
||||||
|
class file of your choice. But note that most browsers doesn't allow |
||||||
|
loading files from a different server.<br><br> |
||||||
|
|
||||||
|
Save probably doesn't work, because it is forbidden by the browser.<br><br> |
||||||
|
|
||||||
|
You may give multiple entries in the class path field separated by a |
||||||
|
comma. The components may be local or remote zip or jar files or |
||||||
|
directories. Note that browsers forbid accesses to different hosts or |
||||||
|
local files that are not in a subdirectory of the applet |
||||||
|
directory.<br><br> |
||||||
|
|
||||||
|
|
||||||
|
<h1>Removing security restrictions under Internet Explorer</h1> |
||||||
|
|
||||||
|
<p>This information was submitted by <a |
||||||
|
href="mailto:PopescuM@health.missouri.edu">Mihail Popescu |
||||||
|
<PopescuM@health.missouri.edu></a>. Please note that this will |
||||||
|
<i>give all applets on our web server full access to your computer</i>, |
||||||
|
so use it at your own risk.</p> |
||||||
|
|
||||||
|
<p>Go to the View/Internet Options... dialog<br> |
||||||
|
Select the "Security" tab</p> |
||||||
|
<ul> |
||||||
|
<li>Set "Zone:" to "Trusted sites zone"</li> |
||||||
|
<li>Click "Add Sites..." |
||||||
|
<ul><li>Add http://www.informatik.uni-oldenburg.de</li> |
||||||
|
<li>Uncheck "Requires server verificaton..."</li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul></li> |
||||||
|
<li>Check "Custom (for expert users)"</li> |
||||||
|
<li>Click "Settings..." |
||||||
|
<ul><li>Under Java/Java permissions, check "Custom"</li> |
||||||
|
<li>Click "Java Custom Settings" |
||||||
|
<ul><li>Select "Edit Permissions" tab</li> |
||||||
|
<li>Under "Unsigned Content"/"Run Unsigned Content", make sure |
||||||
|
"Run in sandbox" is checked and then check all the "Enable" |
||||||
|
buttons under "Additional Unsigned Permissions"</li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul></li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul></li> |
||||||
|
<li>Click "OK"</li> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
</table> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
||||||
|
http://www.informatik.uni-oldenburg.de/~delwi/jode/applet.html</A>, last |
||||||
|
updated on <em>24-Okt-1999</em>.</p> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
@ -0,0 +1,87 @@ |
|||||||
|
<!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> |
||||||
|
</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 gnu.getopt, but you need to |
||||||
|
download the <a |
||||||
|
href="http://java.sun.com/beans/infobus/#DOWNLOAD_COLLECTIONS">collection |
||||||
|
classes</a>. If you want to use the swing interface, you have to |
||||||
|
download <a href="http://java.sun.com/products/jfc/index.html#download-swing">swing</a> separately. </li> <li><a |
||||||
|
href="jode-@VERSION@-1.2.jar">jode-@VERSION@-1.2.jar</a> is for |
||||||
|
JDK 1.2. It already contains gnu.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>Collection classes and Swing for JDK 1.1:<dt> |
||||||
|
<dd> |
||||||
|
<a href="http://java.sun.com/beans/infobus/#DOWNLOAD_COLLECTIONS">http://java.sun.com/beans/infobus/#DOWNLOAD_COLLECTIONS</a> |
||||||
|
<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>Getopt:</dt> |
||||||
|
<dd> |
||||||
|
<a href="http://www.urbanophile.com/arenn/hacking/download.html#getopt">http://www.urbanophile.com/arenn/hacking/download.html#getopt</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,59 @@ |
|||||||
|
<!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><a href="download.html">Download</a></li> |
||||||
|
<li><a href="usage.html">Usage</a></li> |
||||||
|
<li><a href="license.html">License</a></li> |
||||||
|
<li>History</li> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<h2>Why did I wrote it?</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, and that I could |
||||||
|
write a <a href="dasm_to_java.perl"><code>perl</code> script</a> |
||||||
|
that does the same. At the end of the next day I had a working |
||||||
|
decompiler.</p> |
||||||
|
|
||||||
|
<p>Now while it was working, it was not easy to use. You had to |
||||||
|
decompile the code first with a disassembler, cut the method, you |
||||||
|
wanted to decompile and then run the perl script on it. So I decided |
||||||
|
to get some information 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> |
||||||
|
</td> |
||||||
|
</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> |
@ -1,39 +0,0 @@ |
|||||||
<html> |
|
||||||
<head> |
|
||||||
<title>Jode Test Applet</title> |
|
||||||
</head> |
|
||||||
|
|
||||||
|
|
||||||
<body> |
|
||||||
<a href="jode.html">Up</a> |
|
||||||
|
|
||||||
<h1>Test Applet</h1> |
|
||||||
|
|
||||||
<applet code="jode/JodeApplet.class" archive="jode-applet.jar" width=640 height=400> |
|
||||||
<param name=classpath |
|
||||||
value="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode_cls.zip"> |
|
||||||
<param name=class value="jode.JodeApplet"> |
|
||||||
</applet><br><br> |
|
||||||
|
|
||||||
Press the start button to decompile this applet. You may change the |
|
||||||
class path and class name to point to a class file of your choice. |
|
||||||
But note that most browsers doesn't allow loading files from a |
|
||||||
different server.<br><br> |
|
||||||
|
|
||||||
Save probably doesn't work, because it is forbidden by the browser.<br><br> |
|
||||||
|
|
||||||
You may give multiple entries in the class path field separated by a |
|
||||||
comma. The components may be local or remote zip or jar files or |
|
||||||
directories. Note that browsers forbid accesses to different hosts or |
|
||||||
local files that are not in a subdirectory of the applet |
|
||||||
directory.<br><br> |
|
||||||
|
|
||||||
BTW: If you just want to read the source, you may <a |
|
||||||
href="http://www.informatik.uni-oldenburg.de/~delwi/jode">browse it |
|
||||||
online</a> <code>:-)</code><br><br> |
|
||||||
|
|
||||||
You can download this, look <a href="jode-useapplet.html">here</a> for |
|
||||||
a description. |
|
||||||
|
|
||||||
</body> |
|
||||||
</html> |
|
After Width: | Height: | Size: 5.7 KiB |
@ -1,15 +0,0 @@ |
|||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
|
||||||
<html> |
|
||||||
<head> |
|
||||||
<title>Using the obfuscator</title> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<a href="jode.html">Up</a> |
|
||||||
|
|
||||||
The obfuscator currently takes a lot of options (I plan to use an |
|
||||||
extra file containing the options). You should therefore create a |
|
||||||
script (or batch file under Windows) that invokes the obfuscator.<br> |
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
</body> |
|
@ -1,97 +0,0 @@ |
|||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
|
||||||
<html> |
|
||||||
<head> |
|
||||||
<title>Using the decompiler under Unix</title> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<a href="jode.html">Up</a> |
|
||||||
|
|
||||||
|
|
||||||
<h1>Step by Step</h1> |
|
||||||
|
|
||||||
You need java version 1.1 or higher. In the following description I |
|
||||||
assume you have the JDK 1.1, residing in <code>/usr/lib/java</code>. |
|
||||||
For other installations you have to adopt the paths. Also I use the |
|
||||||
bourne shell syntax. |
|
||||||
|
|
||||||
<ol> |
|
||||||
<li> Set the classpath. It should include the jode_cls.zip as well as |
|
||||||
the directory where the class files you want to decompile resides. |
|
||||||
You can also specify a zip file instead of a directory. It is |
|
||||||
also a good idea to include the zip resp. jar file containing the |
|
||||||
basic <code>java.*</code> class files. |
|
||||||
<pre> |
|
||||||
export CLASSPATH=$HOME/jode_cls.zip:$HOME/download:/usr/lib/java/lib/classes.zip |
|
||||||
</pre> |
|
||||||
</li> |
|
||||||
<li> Now you can start the graphical interface as following (Note the |
|
||||||
case of the parameter) |
|
||||||
<pre> |
|
||||||
java jode.JodeWindow |
|
||||||
</pre> |
|
||||||
</li> |
|
||||||
<li> The classpath field should already contain the classpath you set |
|
||||||
above. The class field contains <code>jode.JodeWindow</code> and |
|
||||||
you may push start immediately to decompile this class. |
|
||||||
</li> |
|
||||||
<li> If you want to decompile your own <code>.class</code> file, enter |
|
||||||
the name of the file without <code>.class</code> extension and |
|
||||||
push the start button. Change the class path if it doesn't point |
|
||||||
to the right directory. |
|
||||||
</li> |
|
||||||
<li> After decompiling, you can save the file using the save button. |
|
||||||
</li> |
|
||||||
</ol> |
|
||||||
|
|
||||||
<h1>Packaged classes</h1> |
|
||||||
|
|
||||||
If the class file belongs to a package (like jode.JodeWindow) you |
|
||||||
have to give the full qualified class name (the package names |
|
||||||
separated by a dot followed by the class name). The class path should |
|
||||||
point to the directory containing the package sub directories in this |
|
||||||
case. <br><br> |
|
||||||
|
|
||||||
<h1>Command line utility</h1> |
|
||||||
|
|
||||||
There is also a command line utility which is much more powerful, but |
|
||||||
also more difficult to use. You can start it (after setting the |
|
||||||
classpath) with |
|
||||||
<pre> |
|
||||||
java jode.Decompiler |
|
||||||
</pre> |
|
||||||
and get a list of the supported parameters. To decompile the whole |
|
||||||
decompiler you can use these magic lines: |
|
||||||
<pre> |
|
||||||
mkdir src |
|
||||||
CLASSPATH=jode_cls.zip java jode.Decompiler --dest src \ |
|
||||||
`unzip -v jode_cls.zip|grep .class|cut -c59-|sed s/.class//|sed s?/?.?g` |
|
||||||
</pre> |
|
||||||
|
|
||||||
<h1>Obfuscator</h1> |
|
||||||
|
|
||||||
So you want to protect your classes from decompiling? Well that is |
|
||||||
your choice. You may use my obfuscator. The class files are |
|
||||||
decompileable again (except when using -strong option, but this is |
|
||||||
reversable by obfuscating again), but at least the information about |
|
||||||
the names of identifiers are completely lost. <br><br> |
|
||||||
|
|
||||||
The obfuscator is quite difficult to use (this is why I hided this |
|
||||||
section here) and there is only a short description of the command |
|
||||||
line parameters: |
|
||||||
<pre> |
|
||||||
CLASSPATH=jode_cls.zip java jode.Obfuscator |
|
||||||
</pre> |
|
||||||
|
|
||||||
As a hint, to obfuscate the obfuscator use the following command line: |
|
||||||
<pre> |
|
||||||
CLASSPATH=jode_cls.zip java jode.Obfuscator \ |
|
||||||
-cp jode_cls.zip:/usr/lib/java/lib/classes.zip -d obfuscated.zip \ |
|
||||||
-weak -revtable translate.tbl -swaporder \ |
|
||||||
-preserve jode.Obfuscator.main jode |
|
||||||
</pre> |
|
||||||
|
|
||||||
The options <code>-unique</code> and <code>-table</code> can be |
|
||||||
helpful to deobfuscate obfuscated code. |
|
||||||
</body> |
|
||||||
|
|
||||||
|
|
@ -1,49 +0,0 @@ |
|||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
|
||||||
<html> |
|
||||||
<head> |
|
||||||
<title>Using the decompiler as applet (locally)</title> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<a href="jode.html">Up</a> |
|
||||||
|
|
||||||
<h1>Step by Step</h1> |
|
||||||
|
|
||||||
If you want to use the applet version you need a recent Internet |
|
||||||
Explorer or Netscape which supports java 1.1. You can also use the |
|
||||||
appletviewer of the java development kit. |
|
||||||
|
|
||||||
<ol> |
|
||||||
<li> Copy <a |
|
||||||
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode-applet.html" |
|
||||||
>jode-applet.html</a> into a local directory. |
|
||||||
</li> |
|
||||||
<li> Copy <a |
|
||||||
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/jode_cls.zip" |
|
||||||
>jode_cls.zip</a> to the <b>same</b> directory. |
|
||||||
</li> |
|
||||||
<li> Copy the <code>.class</code> file or <code>zip</code> file, you |
|
||||||
want to decompile, to that directory. |
|
||||||
</li> |
|
||||||
<li> Load the html file into Netscape or Internet Explorer. |
|
||||||
</li> |
|
||||||
<li> Set the classpath simply to `<code>.</code>' (without quotes). |
|
||||||
You may also specify a zip or jar file here. Note that applet and |
|
||||||
class files must be in the same directory due to security policy. <br> |
|
||||||
You can also change the default classpath in the html file. |
|
||||||
</li> |
|
||||||
<li> Enter the name of the class without <code>.class</code> |
|
||||||
extension. |
|
||||||
</li> |
|
||||||
<li> Press start button in applet. </li> |
|
||||||
<li> Press save button to save the decompiled code. </li> |
|
||||||
</ol> |
|
||||||
|
|
||||||
<h1>Packaged classes</h1> |
|
||||||
|
|
||||||
If the class file belongs to a package (like jode.JodeWindow) you |
|
||||||
have to give the full qualified class name (the package names |
|
||||||
separated by a dot followed by the class name). The class path should |
|
||||||
point to the directory containing the package sub directories in this |
|
||||||
case. |
|
||||||
|
|
||||||
</body> |
|
@ -1,62 +0,0 @@ |
|||||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
|
||||||
<html> |
|
||||||
<head> |
|
||||||
<title>Using the decompiler under Windows</title> |
|
||||||
</head> |
|
||||||
<body> |
|
||||||
<a href="jode.html">Up</a> |
|
||||||
|
|
||||||
<h1>Step by Step</h1> |
|
||||||
|
|
||||||
You need java version 1.1 or higher. I suggest using the Sun JDK or |
|
||||||
JRE 1.1 or 1.2. In the following description I assume Sun JDK 1.2, |
|
||||||
for other virtual machines the paths and the name of the java |
|
||||||
interpreter (<code>c:\jdk1.2\java</code>) may differ. <br><br> |
|
||||||
|
|
||||||
<ol> |
|
||||||
<li> Set the classpath. It should include the jode_cls.zip as well as |
|
||||||
the directory where the class files you want to decompile resides. |
|
||||||
You can also specify a zip file instead of a directory. It is |
|
||||||
also a good Idea to include the zip resp. jar file containing the |
|
||||||
basic <code>java.*</code> class files. |
|
||||||
<pre> |
|
||||||
set CLASSPATH=c:\temp\jode_cls.zip;c:\temp;c:\jdk1.2\jre\lib\rt.jar |
|
||||||
</pre> |
|
||||||
</li> |
|
||||||
<li> Now you can start the graphical interface as following (Note the |
|
||||||
case of the parameter) |
|
||||||
<pre> |
|
||||||
c:\jdk1.2\java jode.JodeWindow |
|
||||||
</pre> |
|
||||||
</li> |
|
||||||
<li> The classpath field should already contain the classpath you set |
|
||||||
above. The class field contains <code>jode.JodeWindow</code> and |
|
||||||
you may push start immediately to decompile this class. |
|
||||||
</li> |
|
||||||
<li> If you want to decompile your own <code>.class</code> file, enter |
|
||||||
the name of the file without <code>.class</code> extension and |
|
||||||
push the start button. Change the class path if it doesn't point |
|
||||||
to the right directory. |
|
||||||
</li> |
|
||||||
<li> After decompiling, you can save the file using the save button. |
|
||||||
</li> |
|
||||||
</ol> |
|
||||||
|
|
||||||
<h1>Packaged classes</h1> |
|
||||||
|
|
||||||
If the class file belongs to a package (like jode.JodeWindow) you |
|
||||||
have to give the full qualified class name (the package names |
|
||||||
separated by a dot followed by the class name). The class path should |
|
||||||
point to the directory containing the package sub directories in this |
|
||||||
case. <br><br> |
|
||||||
|
|
||||||
<h1>Command line utility</h1> |
|
||||||
|
|
||||||
There is also a command line utility which is much more powerful, but |
|
||||||
also more difficult to use. You can start it (after setting the |
|
||||||
classpath) with |
|
||||||
<pre> |
|
||||||
c:\jdk1.2\java jode.Decompiler |
|
||||||
</pre> |
|
||||||
and get a list of the supported parameters. |
|
||||||
</body> |
|
@ -0,0 +1,530 @@ |
|||||||
|
<!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"> |
||||||
|
</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><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> |
||||||
|
</ul> |
||||||
|
</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> |
||||||
|
|
||||||
|
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 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 |
||||||
|
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> |
||||||
|
</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> |
@ -0,0 +1,28 @@ |
|||||||
|
# This is a sample script file to obfuscate my project |
||||||
|
|
||||||
|
strip = "unreach","lvt","inner" |
||||||
|
|
||||||
|
load = new WildCard { value = "org.myorg.myproject" }, |
||||||
|
new WildCard { value = "org.myorg.mylib*" }, |
||||||
|
new WildCard { value = "org.otherorg.shortlib" } |
||||||
|
|
||||||
|
preserve = new WildCard { value = "org.myorg.application.main.*" }, |
||||||
|
new WildCard { value = "org.myorg.applet.<init>.()V" }, |
||||||
|
new WildCard { value = "org.resources.bundle*.<init>.()V" }, |
||||||
|
new MultiIdentifierMatcher { |
||||||
|
and = new WildCard { value = "org.myorg.publiclib.*" }, |
||||||
|
new ModifierMatcher { access = "PUBLIC" } |
||||||
|
} |
||||||
|
|
||||||
|
renamer = ney KeywordRenamer { |
||||||
|
backup = new StrongRenamer { |
||||||
|
charsetStart = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" |
||||||
|
charsetPart = |
||||||
|
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_" |
||||||
|
charsetPackage = "abcdefghijklmnopqrstuvwxyz" |
||||||
|
charsetClass = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
analyzer = new SimpleAnalyzer |
||||||
|
post = new LocalOptimizer, new RemovePopAnalyzer |
@ -0,0 +1,201 @@ |
|||||||
|
<!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><a href="download.html">Download</a></li> |
||||||
|
<li>Usage<br> |
||||||
|
<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="#optimizer">Obfuscator</a><br> |
||||||
|
</li><br> |
||||||
|
<li><a href="license.html">License</a></li> |
||||||
|
<li><a href="history.html">History</a></li> |
||||||
|
</ul> |
||||||
|
</td> |
||||||
|
<td> |
||||||
|
<a name="decompiler"> |
||||||
|
<h1>Using the Decompiler</h1></a> |
||||||
|
After you have <a href="download.html">downloaded</a> the necessary |
||||||
|
packages, put them into your <tt>CLASSPATH</tt>: |
||||||
|
|
||||||
|
<ul><li>Under Windows you have to start a MSDOS session and type |
||||||
|
something like: |
||||||
|
<pre> |
||||||
|
set CLASSPATH=C:\download\jode-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> |
||||||
|
|
||||||
|
<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</tt> with the options. The |
||||||
|
following command will give a complete list of the available commands: |
||||||
|
|
||||||
|
<pre>java jode.Decompiler --help</pre> |
||||||
|
|
||||||
|
<a name="awt"><h3>AWT Interface</h3></a> |
||||||
|
|
||||||
|
The AWT Interface looks exactly like the <a |
||||||
|
href="applet.html">applet</a>. In fact the applet uses the AWT |
||||||
|
Interface. You start it after setting the <tt>CLASSPATH</tt> (see <a |
||||||
|
href="#decompiler">above</a>), with |
||||||
|
<pre>java jode.JodeWindow</pre> |
||||||
|
|
||||||
|
In the classpath line you can enter a number of jar files, zip files |
||||||
|
and directories separated by comma(<tt>,</tt>). Then enter the |
||||||
|
dot(<tt>.</tt>) separated name of the class you want to decompile. |
||||||
|
Press the <code>start</code> button and the decompiled class should |
||||||
|
appear. You can save it via the <code>save</code> button. |
||||||
|
|
||||||
|
<a name="swing"><h3>Swing Interface</h3></a> |
||||||
|
|
||||||
|
For the swing interface you need java version 1.2 or the separately |
||||||
|
available swing package (see <a href="download.html#swing">download |
||||||
|
page</a>. <br> |
||||||
|
|
||||||
|
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 nice, if you just want to work how |
||||||
|
something works, and you don't have the source code. It is especially |
||||||
|
useful to trace bugs through 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="optimizer"><h1>Using the Obfuscator</h1> |
||||||
|
|
||||||
|
To use the obfuscator you have to create a script file, say <a |
||||||
|
href="myproject.jos"><tt>myproject.jos</tt></a>, with |
||||||
|
the following contents (You have to adapt it to match your project, of |
||||||
|
course). It should contain the following options: |
||||||
|
|
||||||
|
<p>First 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.</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.application.main.*" }, |
||||||
|
new WildCard { value = "org.myorg.applet.<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, |
||||||
|
but it is legal bytecode.</dd> |
||||||
|
</dl> |
||||||
|
<pre> |
||||||
|
renamer = new KeywordRenamer |
||||||
|
</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 constant, or remove them |
||||||
|
completely.<br> This analyzer is especially useful to revert Zelix |
||||||
|
Klassmaster's flow obfuscation.</dd> |
||||||
|
</dl> |
||||||
|
</p> |
||||||
|
<pre> |
||||||
|
analyzer = new SimpleAnalyzer |
||||||
|
</pre> |
||||||
|
|
||||||
|
<p>Pre- and Post transformers transform the bytecode before |
||||||
|
resp. after the Analyzer runs. Using this defaults should be |
||||||
|
okay.</p> |
||||||
|
<pre> |
||||||
|
post = new LocalOptimizer, new RemovePopAnalyzer |
||||||
|
</pre> |
||||||
|
|
||||||
|
</td> |
||||||
|
</table> |
||||||
|
|
||||||
|
<hr> |
||||||
|
|
||||||
|
<p><A HREF="mailto:Jochen.Hoenicke@Informatik.Uni-Oldenburg.DE"> |
||||||
|
http://www.informatik.uni-oldenburg.de/~delwi/jode/usage.html</A>, last |
||||||
|
updated on <em>24-Okt-1999</em>.</p> |
||||||
|
|
||||||
|
</body> |
||||||
|
</html> |
||||||
|
|
Loading…
Reference in new issue