git-svn-id: https://svn.code.sf.net/p/jode/code/branches/branch_1_1@1316 379699f6-c40d-0410-875b-85095c16579ebranch_1_1
parent
0246d1e5c3
commit
7fca8d09e9
After Width: | Height: | Size: 894 B |
@ -1,101 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<h1>The <i>JODE</i> Applet</h1> |
||||
|
||||
<p>Please be patience, loading the applet may take some time.</p> |
||||
|
||||
<center> |
||||
<applet code="jode/Applet.class" archive="jode-applet.jar" width=540 height=400> |
||||
<param name=pagecolor value="ffffff"> |
||||
<param name=classpath value="http://jode.sourceforge.net/load.php/http%3a//www.informatik.uni-oldenburg.de/~mw/plasma.jar"> |
||||
<param name=class value="PlasmaApplet"> |
||||
<p>Sorry you need a java enabled browser to test a java applet ;-)</p> |
||||
<p>Don't read the rest, it only contains information about the applet.</p> |
||||
</applet> |
||||
</center><br> |
||||
|
||||
<p> Press the start button to decompile <a |
||||
href="http://www.informatik.uni-oldenburg.de/~mw/plasma.html">Michael's |
||||
Plasma applet</a> (and give the decompiler some time to download the |
||||
jar file). </p> |
||||
|
||||
You may change the classpath to point to a zip or jar file of your |
||||
choice, using a similar syntax. Use <code>%3a</code> instead of a |
||||
colon `:' in the url. You can also point it to a directory containing |
||||
the class-files (include a slash `/' at the end in this case), but |
||||
this is not recommended, since it is <i>very</i> slow. You may give |
||||
multiple entries in the class path field separated by a comma.<br><br> |
||||
|
||||
You can't use this applet for local files; the class files must be on |
||||
a server that is accessible from sourceforge. You can try to give |
||||
local filenames directly without the load.php wrapper, but that is |
||||
probably forbidden by your browser. Most browser only allow loading |
||||
files from the same server as the applet, and this is the reason why |
||||
you have to use such a cryptic URL.<br><br> |
||||
|
||||
Save probably doesn't work, because it is forbidden by your browser.<br><br> |
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -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="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<h1>Blue Sky</h1> |
||||
|
||||
<p>This section contains features that I think would be great to have, |
||||
but are also very hard to implement. The name of the section is |
||||
inspired, by <a |
||||
href="http://www.mozilla.org/blue-sky/">Mozilla</a>.</p> |
||||
|
||||
<p>Currently this are all my own ideas. But if you send me an idea |
||||
for an interesting feature, I will add it to this list.</p> |
||||
|
||||
<h2><i>Out</i>line inlined methods</h2> |
||||
|
||||
<p>If java gets called with `<code>-O</code>' switch, it inlines methods, |
||||
that are private, final, or static and contain no loops. When |
||||
decompiling this it sometimes produces really ugly code. The right |
||||
way to solve this would be to <i>out</i>line the code again. This is |
||||
possible but requires to find the inlined method. </p> |
||||
|
||||
<p>The name `outline' was suggested by <a |
||||
href="http://www.informatik.uni-oldenburg.de/~mw">Michael</a>. |
||||
</p> |
||||
|
||||
<h2>Better names of local variables</h2> |
||||
|
||||
<p>The local variable naming is very stupid. Even with pretty it just |
||||
names the variable after the type with a unifying number appended. A |
||||
method containing very much objects of the same type looks very |
||||
ugly. </p> |
||||
|
||||
<p>My plan is looking at the assignments. If we have locals in |
||||
assignments |
||||
<pre> |
||||
int l_1 = array.length |
||||
String l_2 = object.getName() |
||||
</pre> |
||||
we could name them "length" and "name". If we |
||||
have assignments: |
||||
<pre> |
||||
MenuItem local_1 = new MenuItem("Open"); |
||||
MenuItem local_2 = new MenuItem("Save"); |
||||
</pre> |
||||
good names would be <code>miOpen</code> and <code>miSave</code>. </p> |
||||
|
||||
<p>It is currently possible to assign a <i>(hint name,type)</i> pair |
||||
to a local. If the type matches, the local will be named after |
||||
<i>hint name</i>. This could be extended by giving them several |
||||
weighted hints and constructing the name in an intelligent way. </p> |
||||
|
||||
<h2>Better deobfuscation features</h2> |
||||
<p>First there should be a good Renamer: Methods that simply |
||||
return a field value should be renamed to get<i>FieldName</i>. |
||||
Fields should be named after their type, maybe also by assignments |
||||
(see section about local variable names).</p> |
||||
|
||||
<p>The deobfuscator should detect inner and anonymous variables, |
||||
synthetic methods and so on, and rename them accordingly.</p> |
||||
|
||||
<h2>Handling of Class.forName in obfuscator</h2> |
||||
<p>The obfuscator should detect Class.forName constructs (and |
||||
similarly for methods and fields) and if their parameters are constant |
||||
it should change the parameter according to the rename function. </p> |
||||
|
||||
<h2>Merging javadoc comments</h2> |
||||
<p>It would be nice if the decompiler could merge the javadoc comments |
||||
into the class file. More and more people use javadoc to comment the |
||||
public api of their java classes. It shouldn't be too difficult to |
||||
copy them back into the java code. </p> |
||||
|
||||
<p>This doesn't need to be built into the decompiler. A script that takes |
||||
the javadoc pages and the decompiled code can easily merge them.</p> |
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,99 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<h1>Download</h1> |
||||
|
||||
<p>Jode is available in the download section. Click <a href="http://sourceforge.net/project/filelist.php?group_id=3790">here</a> to download the latest |
||||
released source code of <i>JODE</i> |
||||
|
||||
<p>If you download the source code, you need several other packages to |
||||
build <i>JODE</i>, check the <a href="./links..html">links |
||||
page</a>. </p> |
||||
|
||||
<p>The simplest way to get it, especially for non unix users, is in |
||||
precompiled form, though. I have two jar archives at the <a |
||||
href="ftp://jode.sourceforge.net/pub/jode">xftp 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.1-1.1.jar">jode-1.1-1.1.jar</a> is for JDK 1.1. It contains |
||||
the collection classes from the GNU Classpath project. If you want to |
||||
use the swing interface, you have to download swing separately. </li> |
||||
|
||||
<li> <a href="ftp://jode.sourceforge.net/pub/jode/jode-1.1-1.2.jar">jode-1.1-1.2.jar</a> is for JDK 1.2 or better. </li> </ul> |
||||
</p> |
||||
|
||||
<h1>CVS Repository</h1> |
||||
|
||||
<p>You can get the latest sources from the <a href="http://sourceforge.net/cvs/?group_id=3790">CVS repository</a>. |
||||
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. </p> |
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -0,0 +1,66 @@ |
||||
<?php require("header.inc"); ?>
|
||||
|
||||
<h1>FAQ - Frequently Asked Questions</h1> |
||||
|
||||
This is a list of some questions that pop up from time to time. |
||||
|
||||
<h2>Decompiler issues</h2> |
||||
|
||||
<h3>The decompiler crashes with a VerifyException, what can I do?</h3> |
||||
|
||||
<p>The class isn't verifiable, probably because there is not enough |
||||
information about used classes. See the question about the |
||||
classpath.</p> |
||||
|
||||
<p>This could also be caused by malicious bytecode, or because there |
||||
is a bug in Jode's verifier.</p> |
||||
|
||||
<h3>What should be included in the classpath?</h3> |
||||
|
||||
<p>Jode needs to know the full class hierarchie to guess the types. |
||||
This includes not only the classes in the program, but also the |
||||
libraries used by the java program, even the Java runtime library. |
||||
You should set the classpath to include all these classes.</p> |
||||
|
||||
<p>If you don't specify the classpath on the command line, Jode uses |
||||
the same as your Java Virtual Machine.</p> |
||||
|
||||
<p>As last resort, if Jode can't find a class in the classpath it uses |
||||
reflection to ask the Virtual Machine. This works quite well, but |
||||
loading classes can have side effects, e.g. when AWT classes are |
||||
loaded, an AWT thread is created, even though Jode doesn't need |
||||
it.</p> |
||||
|
||||
<h2>Obfuscator issues</h2> |
||||
|
||||
<h3>What should be included in the classpath?</h3> |
||||
|
||||
<p>The program, all libraries, the Java runtime library. Don't omit a |
||||
library even when you don't want to obfuscate it.</p> |
||||
|
||||
<h3>What should I preserve</h3> |
||||
|
||||
<p>The most common mistake is to preserve a class. In most cases this |
||||
is not what you want. This only makes sure the class won't be |
||||
renamed, it doesn't prevent it from being stripped. Instead you |
||||
should preserve methods and constructors. The constructor is just a |
||||
method with the special name <tt><init&rt;</tt>. </p> |
||||
|
||||
<p> Another common mistake is to omit the type |
||||
signature, e.g. to preserve <tt>Class.main</tt> instead of |
||||
<tt>Class.main.([Ljava/lang/String;)V</tt>. That doesn't work. If |
||||
you don't want to care about the format of the type signature use a |
||||
wildcard as in <tt>Class.main.*</tt>. </p> |
||||
|
||||
<h3>What is a type signature</h3> |
||||
|
||||
<p>The type signature is a machine readable representation of a java |
||||
type that is used all over in java bytecode. The JDK ships a command |
||||
named <tt>javap</tt>. With <tt>java -s</tt> you can lists the fields |
||||
and methods of a class with their type signatures.</p> |
||||
|
||||
<p> If you are interested in the format of type signatures read the |
||||
Java Virtual Machine Specification, Chapter 4.3 Descriptors</p> |
||||
|
||||
<?php require("footer.inc"); ?> |
||||
|
@ -1,88 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<h1>History</h1> |
||||
|
||||
<p>Someday I found <code>guavad</code>, a disassembler for java byte |
||||
code (it does similar things like <code>javap -c</code>). I used |
||||
it on a class file, and found that it was possible to reconstruct the |
||||
original java code. First I did it by hand on some small routines, |
||||
but I soon realized that it was a rather stupid task. So I wrote a |
||||
small <a href="dasm_to_java.perl"><code>perl</code> script</a> that |
||||
did this process automatically. At the end of the next day I had my |
||||
first working decompiler.</p> |
||||
|
||||
<p>Now while the <code>perl</code> script is working, it is not easy |
||||
to use. You have to decompile the code first with a disassembler, cut |
||||
out the code of a single method, and run the perl script on it. I |
||||
decided to get the bytecode directly out of the class files and do |
||||
this all automatically. I decided to write it in <code>java</code> |
||||
now, because it suited best.</p> |
||||
|
||||
<p>Just for the records: the java code is now more than 50 times |
||||
bigger than the original perl script and is still growing.</p> |
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
||||
|
@ -1,132 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
|
||||
|
||||
<P><i>JODE</i> is a java package containing a decompiler and an |
||||
optimizer for java. This package is <a href="./license..html">freely available</a> under the GNU GPL.<p> |
||||
|
||||
<P>The decompiler reads in <tt>class</tt> files 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. However, <i>JODE</i> does its job quite |
||||
well, so you should give it a try and <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>JODE 1.1 is out. With support for javac v8 (jdk 1.3). </li> |
||||
<li><i>JODE</i> is now hosted by <a href="http://sourceforge.net/">SourceForge</a>.</li> |
||||
<li>Now long lines are automatically broken.</li> |
||||
<li><b>Inner and anonymous</b> classes are automatically decompiled.</li> |
||||
<li>The optimizer (aka obfuscator) can be customized via a small |
||||
config file</li> |
||||
</ul> |
||||
|
||||
<h2>Known bugs of the decompiler</h2> |
||||
|
||||
<p>Some jdk1.3 synthetic access functions aren't understood. The |
||||
produced source contains access$xxx functions, but it still compiles.</p> |
||||
|
||||
<p>There may be other bugs, that cause Exceptions or invalid code. |
||||
If you have such a problems don't hesitate to issue a bug report. |
||||
Please include the <code>class</code> file if possible.</p> |
||||
|
||||
<h2>Limitations</h2> |
||||
|
||||
<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> |
||||
|
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,81 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<h1>License</h1> |
||||
<p><i>JODE</i> is Copyright © 1998-2000 by Jochen Hoenicke. <br><br> |
||||
|
||||
<p>This program is free software; you can redistribute it and/or modify |
||||
it under the terms of the <a |
||||
href="http://www.gnu.org/copyleft/gpl.html">GNU General Public |
||||
License</a> as published by the Free Software Foundation; either |
||||
version 2 of the License, or (at your option) any later version.</p> |
||||
|
||||
<p>This program is distributed in the hope that it will be useful, |
||||
but <b>without any warranty</b>; without even the implied warranty of |
||||
<b>merchantability</b> or <b>fitness for a particular purpose</b>. See the |
||||
GNU General Public License for more details.</p> |
||||
|
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
@ -1,129 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<h1><i>JODE</i> Links</h1> |
||||
<h3>Other decompilers</h3> |
||||
<ul> |
||||
<li><a href="http://dmoz.org/Computers/Programming/Languages/Java/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>gnu.java.util.collections</code>). This |
||||
script is now part of GNU classpath. For your convenience I have put a |
||||
precompiled <a |
||||
href="http://www.informatik.uni-oldenburg.de/~delwi/jode/collections.jar">jar |
||||
file</a> on this server. |
||||
</dd> |
||||
</dl> |
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
||||
|
@ -1,295 +0,0 @@ |
||||
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN"> |
||||
<html> |
||||
<head> |
||||
<title>Java Optimize and Decompile Environment (JODE)</title> |
||||
<meta name="date" content="2001-05-27"> |
||||
<meta name="description" content="JODE - Java Optimize and Decompile Environment."> |
||||
<meta name="author" content="Jochen Hoenicke"> |
||||
<meta name="keywords" content="jode, java, decompiler, obfuscator, deobfuscator, reverse engineering, free, GPL"> |
||||
<style type="text/css"> |
||||
<!-- |
||||
body { color:#000000; background-color: #FFFFFF; } |
||||
.nav { font-family: Helvetica, Arial, sans-serif; font-weight: bold; |
||||
color:#000000; background-color: #EEEEF8; } |
||||
.footer { color:#FFFFFF; background-color: #737B9C; } |
||||
.boldlink { font-weight:bold; text-decoration: none; color:#FFFFFF; } |
||||
//--> |
||||
</style> |
||||
</head> |
||||
|
||||
<body text=#000000 bgcolor=#FFFFFF> |
||||
|
||||
<table cellpadding=4 cellspacing=1 width=100% |
||||
><tr |
||||
><td align="left" |
||||
><img src="jode-logo.gif" alt="JODE" width=286 height=110 |
||||
></td |
||||
><td align="right" |
||||
>Powered by <a href="http://sourceforge.net"><img |
||||
src="http://sourceforge.net/sflogo.html?group_id=3790&type=1" |
||||
border=0 width=88 height=31 alt="SourceForge"></a><br |
||||
>Best viewed with <a |
||||
href="http://www.anybrowser.org/campaign/"><img |
||||
src="a-logo.gif" border=0 width=88 height=31 alt="Any |
||||
Browser"></a><br |
||||
></td |
||||
></tr |
||||
></table> |
||||
|
||||
|
||||
<table cellspacing=0 cellpadding=3 border=0 bgcolor=#EEEEF8 class="nav"> |
||||
<tr><td class="nav"> |
||||
<a href="./"><B>Home</B></a> | |
||||
<a href="http://sourceforge.net/project/?group_id=3790">Project page</a> | |
||||
<a href="./applet..html">Applet</a> | |
||||
<a href="./download..html">Download</a> | |
||||
<a href="./faq..html">FAQ</a> | |
||||
<a href="./feedback..html">Feedback</a> | |
||||
<a href="./usage..html">Documentation</a> | |
||||
<a href="./license..html">License</a> | |
||||
<a href="./history..html">History</a> | |
||||
<a href="./links..html">Links</a> | |
||||
<a href="./bluesky..html">Blue Sky</a></td></tr> |
||||
</table><br> |
||||
|
||||
<a name="decompiler"> |
||||
<h1>Using the Decompiler</h1></a> |
||||
<p>After you have <a href="./download..html">downloaded</a> the jar archive |
||||
put it into your <tt>CLASSPATH</tt>. The package |
||||
<tt>swingall.jar</tt> is also needed if you are using JDK 1.1.</p> |
||||
|
||||
<ul><li>Under Windows you have to start a MSDOS session and type |
||||
something like: |
||||
<pre> |
||||
set CLASSPATH=C:\download\jode-1.1.jar;C:\swing\swingall.jar |
||||
</pre> |
||||
|
||||
<li>Under Unix you start a shell and type (for bourne shell): |
||||
<pre>export CLASSPATH=/tmp/jode-1.1.jar:/usr/local/swing/swingall.jar</pre> |
||||
or for csh: |
||||
<pre>setenv CLASSPATH /tmp/jode-1.1.jar:/usr/local/swing/swingall.jar</pre> |
||||
</ul> |
||||
<br> |
||||
There is also a batch file for windows and a script file for unix, |
||||
that you can use. You can extract it with the following command: |
||||
<pre> |
||||
jar -xvf jode-1.1-jdk1.1.jar bin/jode.bat <i>resp.</i> bin/jode |
||||
</pre> |
||||
Edit the file to adapt it to your paths and put it to a convenient location. |
||||
|
||||
<a name="cmdline"><h3>Command Line Interface</h3></a> |
||||
|
||||
The most powerful way to start <I>JODE</I>'s decompiler is the command |
||||
line interface. Some people don't like long command lines; they |
||||
should go to the next section. <br> |
||||
|
||||
Start the class <tt>jode.decompiler.Main</tt> with the options. The |
||||
following command will give a complete list of the available commands: |
||||
|
||||
<pre>java jode.decompiler.Main --help</pre> |
||||
|
||||
If you want to decompile a jar package you can do it this way: |
||||
|
||||
<pre>java jode.decompiler.Main --dest srcdir program.jar</pre> |
||||
|
||||
If you have installed the batch file/script, you can use it like this: |
||||
<pre>jode --dest srcdir program.jar</pre> |
||||
|
||||
<a name="awt"><h3>AWT Interface</h3></a> |
||||
|
||||
The AWT Interface looks exactly like the <a href="./applet..html">applet</a>. In fact the applet uses the AWT Interface. You start it |
||||
after setting the <tt>CLASSPATH</tt> (see <a href="./usage..html#decompiler">above</a>), with |
||||
|
||||
<pre>java jode.decompiler.Window</pre> |
||||
|
||||
In the classpath line you can enter a number of jar files, zip files |
||||
and directories separated by comma(<tt>,</tt>). Then enter the |
||||
dot(<tt>.</tt>) separated name of the class you want to decompile. |
||||
Press the <code>start</code> button and the decompiled class should |
||||
appear. You can save it via the <code>save</code> button. |
||||
|
||||
<a name="swing"><h3>Swing Interface</h3></a> |
||||
|
||||
For the swing interface you need java version 1.2 or the separately |
||||
available swing package (see <a href="./links..html#swing">link |
||||
page</a>. You can invoke it with the following command: |
||||
<pre> |
||||
java jode.swingui.Main classes.jar |
||||
<i>resp.</i> jode swi classes.jar |
||||
</pre> |
||||
|
||||
<p>The swing interface will show the package hierarchie of all classes |
||||
in the classpath on the left side. You can now select a class and the |
||||
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.</p> |
||||
|
||||
<p>The swing interface is very useful to browse through class files if |
||||
you don't have the source code. You can also use it to trace bugs in |
||||
library code. It is not meant to generate <tt>java</tt> files and so |
||||
you won't find a save option there.</p> |
||||
|
||||
<a name="java"><h3>Java Interface</h3></a> |
||||
|
||||
<p>If you want to integrate <i>JODE</i> into your own java program, |
||||
you can use the <a |
||||
href="Decompiler.java"><code>jode.decompiler.Decompiler</code></a> |
||||
class. Note that the GPL only allows you to integrate <i>JODE</i> |
||||
into GPL programs. Please tell me if you use <i>JODE</i> in this |
||||
way.</p> |
||||
|
||||
<p>You may use this <a |
||||
href="ftp://jode.sourceforge.net/pub/jode/jode-embedded.jar">stripped |
||||
down jar archive</a> containing all necessary classes.</p> |
||||
|
||||
<a name="optimizer"><h1>Using the Obfuscator</h1> |
||||
|
||||
<p>To use the obfuscator you should first create a script file, say <a |
||||
href="myproject.jos"><tt>myproject.jos</tt></a>. Then you can invoke the |
||||
obfuscator with: |
||||
<pre> |
||||
java jode.obfuscator.Main myproject.jos |
||||
</pre></p> |
||||
|
||||
<p>The script file should contain the following options: </p> |
||||
|
||||
<p>First select the classpath. You should include everything in the |
||||
classpath that you need to run your application. This also includes |
||||
the system class files (Sun puts them into <code>classes.zip</code> or |
||||
<code>rt.jar</code>))</p> |
||||
<pre> |
||||
classpath = "c:\\jdk1.2\\jre\\lib\\rt.jar","d:\\project\\java", |
||||
"ftp://www.myorg.org/pub/classlib.jar" |
||||
</pre> |
||||
|
||||
<p>Specify where you want the obfuscated classes to go. I recommend |
||||
to write them directly into a zip file, but you can also give a |
||||
directory.</p> |
||||
<pre> |
||||
dest = "obfuscated.zip" |
||||
</pre> |
||||
|
||||
<p>You can make <i>JODE</i> write its translation table. This table |
||||
can be used later to undo the name obfuscation, or you can look there |
||||
to decrypt exceptions you may get.</p> |
||||
<pre> |
||||
revtable = "translat.tbl" |
||||
</pre> |
||||
|
||||
<p>Select what you want to strip. There are several |
||||
possibilities, which can be separated by comma(<tt>,</tt>):</p> |
||||
<dl> |
||||
<dt>unreach</dt> |
||||
<dd>strip unreachable methods and classes.</dd> |
||||
<dt>source</dt> |
||||
<dd>remove the name of the java file (exceptions will get unreadable).</dd> |
||||
<dt>lnt</dt> |
||||
<dd>remove the line number table (exceptions will get unreadable).</dd> |
||||
<dt>lvt</dt> |
||||
<dd>remove the local variable table (debugging doesn't work).</dd> |
||||
<dt>inner</dt> |
||||
<dd>strip inner class info (reflection doesn't work correctly).</dd> |
||||
</dl> |
||||
<pre> |
||||
strip = "unreach","lvt","inner" |
||||
</pre> |
||||
|
||||
<p>Select the packages and classes you want to obfuscate. You should |
||||
only include libraries, that you don't ship separately. If you give a |
||||
package, all classes and subpackages are loaded. You can also use |
||||
<code>*</code> as wild card, that matches everything (including dots). |
||||
</p> |
||||
<pre> |
||||
load = new WildCard { value = "org.myorg.myproject" }, |
||||
new WildCard { value = "org.myorg.mylib*" }, |
||||
new WildCard { value = "org.otherorg.shortlib" } |
||||
</pre> |
||||
|
||||
<p>Select the methods and classes you want to preserve. This is |
||||
the <tt>main</tt> method for applications and the default constructor |
||||
<tt><init>.()V</tt> for applets, resource bundles and other classes |
||||
that you load manually at runtime.<br> You have to give the method |
||||
name and the type signature to identify your method. <tt>javap |
||||
-s</tt> will show you the type signatures for your classes, but you |
||||
may also use <tt>*</tt>, to select all methods with that name.</p> |
||||
<pre> |
||||
preserve = new WildCard { value = "org.myorg.ApplicationClass.main.*" }, |
||||
new WildCard { value = "org.myorg.AppletClass.<init>.()V" }, |
||||
new WildCard { value = "org.resources.Bundle*.<init>.()V" }, |
||||
</pre> |
||||
|
||||
<p>If you want to obfuscate (or just shorten) the identifier you can |
||||
specify a renamer. There are currently following renamer |
||||
available</p> |
||||
<dl><dt>StrongRenamer</dt> |
||||
<dd>Renames to the shortest possible name. You can give a charset |
||||
that should be used. It uses the same name as much as possible.</dd> |
||||
<dt>UniqueRenamer</dt> |
||||
<dd>Renames to unique identifier of the form <tt>xxx123</tt>. Useful |
||||
to reduce name conflicts, before you decompile an obfuscated package.</dd> |
||||
<dt>NameSwapper</dt> |
||||
<dd>This renamer just swaps the names. This is a funny obfuscation |
||||
option that is not very strong, but very confusing.</dd> |
||||
<dt>KeywordRenamer</dt> |
||||
<dd>Renames identifiers to keyword. You can give your own list of |
||||
keywords as parameters. Resulting code is not decompilable directly, |
||||
<b>but it is <i>not</i> legal bytecode either</b>. Some paranoid |
||||
web browsers refuse to run applets containing keywords as identifiers |
||||
(and they are completely within the Java VM spec).</dd> |
||||
</dl> |
||||
<pre> |
||||
renamer = new StrongRenamer |
||||
</pre> |
||||
|
||||
<p>You can also create a renaming table with the same format as the |
||||
table written by revtable. The entries in the table get precedence |
||||
over renamer. Entries not in the table will get renamed by the |
||||
renamer.<p> |
||||
<pre> |
||||
table = "translat.tbl" |
||||
</pre> |
||||
|
||||
<p>Now you can select the analyzer. The purpose of the |
||||
analyzer is to mark all reachable methods, find out which methods |
||||
needs to get the same name (overloading), and which method names |
||||
mustn't change (overload of library methods, e.g. <tt>nextElement</tt> |
||||
for <tt>Enumeration</tt>s). There are currently two analyzers. |
||||
<dl><dt>SimpleAnalyzer</dt> |
||||
<dd>Straight forward analyzer. It is fast and will remove dead code |
||||
on method basis.</dd> |
||||
|
||||
<dd><dt>ConstantAnalyzer</dt> |
||||
<dd>Strong analyzer that will determine, which fields and instructions |
||||
have constant values. It will remove dead code on instruction basis |
||||
and replace constant instruction with a load of the constant, or |
||||
remove them completely.<br> This analyzer is especially useful to |
||||
revert the flow obfuscation of some other obfuscators.</dd> |
||||
</dl> |
||||
</p> |
||||
<pre> |
||||
analyzer = new ConstantAnalyzer |
||||
</pre> |
||||
|
||||
<p>Pre- and Post transformers transform the bytecode before |
||||
resp. after the Analyzer runs. Using this default should be okay. |
||||
You may remove the LocalOptimizer, though, if you have problems.</p> |
||||
<p>In the future I may add some new post transformers, that do string |
||||
encryption, flow obfuscation and similar things. If you want to write |
||||
your own Transformers please contact me, since the next version will |
||||
change the bytecode interface.</p> |
||||
<pre> |
||||
post = new LocalOptimizer, new RemovePopAnalyzer |
||||
</pre> |
||||
<TABLE class=footer width="100%" border="0" cellspacing="0" cellpadding="2"> |
||||
<TR> |
||||
<TD align="center"><SPAN class=footer> |
||||
All trademarks and copyrights on this page are properties of their respective owners. <br> |
||||
Last updated on 27-May-2001, |
||||
Copyright © 1998-2001 by Jochen Hoenicke. |
||||
Canonic URL is <a class=boldlink href="http://jode.sourceforge.net/">http://jode.sourceforge.net/</a></SPAN> |
||||
</TD> |
||||
</TR> |
||||
</TABLE> |
||||
|
||||
</BODY> |
||||
</HTML> |
Loading…
Reference in new issue