<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Efficient Java tools- Code Obfuscators and Protectors</title><link>http://www.javaperformancetool.com/Code_Obfuscators_and_Protectors/</link><description>JavaPerformanceTool.com is a directory listing the Java tools, libraries and plug-ins for productive development of robust Java/J2EE products. </description><item><title>JODE</title> <link> http://jode.sourceforge.net/</link><description>&lt;p&gt;  The  optimizer transforms class  files in various ways with can be controlled by a script file. It supports the  following operations:&lt;/p&gt;
&lt;ul type=&quot;disc&quot;&gt;
&lt;li&gt;Renaming       class, method, field and local names to shorter, obfuscated, or unique       names or according to a given translation table &lt;/li&gt;
&lt;li&gt;Removing       debugging information &lt;/li&gt;
&lt;li&gt;Removing       dead code (classes, fields, methods) and constant fields &lt;/li&gt;
&lt;li&gt;Optimizing       local variable allocation &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt; &lt;br /&gt;
:Jode  is available in the download area in source or binary form. For compiling the  source code, you need several other packages, check the links page. You need a  unix like environment for compilation. The simplest way to get it, especially  for non unix users, is in precompiled form, though. There are two jar archives  in the download area:&lt;/p&gt;
&lt;ul type=&quot;disc&quot;&gt;
&lt;li&gt;jode-1.1-JDK1.1.jar       is for JDK&amp;nbsp;1.1. If you want to use the swing interface, you have to       download swing separately, all other packages are already included in the       archive. &lt;/li&gt;
&lt;li&gt;jode-1.1.jar       is for JDK&amp;nbsp;1.2 or better. It should run without any other package. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Feature are:&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Command Line  Interface&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;
The most powerful way to start &lt;em&gt;JODE&lt;/em&gt;'s  decompiler is the command line interface. Some people don't like long command  lines; they should go to the next section. &lt;br /&gt;
Start the class jode.decompiler.Main  with the options. The following command will give a complete list of the  available commands: &lt;/p&gt;
&lt;ul type=&quot;disc&quot;&gt;
&lt;li&gt;java jode.decompiler.Main --help&lt;/li&gt;
&lt;li&gt;If you want to decompile a jar package you can do it       this way: &lt;/li&gt;
&lt;li&gt;java jode.decompiler.Main --dest srcdir program.jar&lt;/li&gt;
&lt;li&gt;If you have installed the batch file/script, you can       use it like this: &lt;/li&gt;
&lt;li&gt;jode --dest srcdir program.jar&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Swing Interface&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;
For the swing interface you need java  version 1.2 or the separately available swing package . You can invoke it with  the following command: &lt;br /&gt;
java  jode.swingui.Main classes.jar&lt;br /&gt;
&lt;em&gt;resp.&lt;/em&gt; jode swi classes.jar&lt;br /&gt;
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. 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 java  files and so you won't find a save option there.&lt;br /&gt;
&lt;strong&gt;Java Interface&lt;/strong&gt;&lt;strong&gt; &lt;/strong&gt;&lt;br /&gt;
If  you want to integrate &lt;em&gt;JODE&lt;/em&gt; into your own java program, you can use the  jode. Decompiler.decomplier class. Note that the LGPL allows dynamic linking as  long as you don't change Jode itself. Please tell me if you use &lt;em&gt;JODE&lt;/em&gt; in  this way.&lt;/p&gt;</description><pubDate>Sun, 08 Nov 2009 20:32:24 GMT</pubDate></item><item><title>ProGuard</title> <link> http://proguard.sourceforge.net/</link><description>&lt;p&gt;&lt;strong&gt;Feature  are:&lt;/strong&gt;&lt;/p&gt;
&lt;ul type=&quot;disc&quot;&gt;
&lt;li&gt;Creating       more compact code, for smaller code archives, faster transfer across       networks, faster loading, and smaller memory footprints. &lt;/li&gt;
&lt;li&gt;Making       programs and libraries harder to reverse-engineer. &lt;/li&gt;
&lt;li&gt;Listing       dead code, so it can be removed from the source code. &lt;/li&gt;
&lt;li&gt;Retargeting       and preverifying existing class files for Java 6, to take full advantage       of Java 6's faster class loading. &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ProGuard  is fast. It only takes seconds to process programs and libraries of several  megabytes. The results section presents actual figures for a number of  applications. ProGuard's main advantage  compared to other Java obfuscators is probably its compact template-based  configuration. A few intuitive command line options or a simple configuration  file are usually sufficient. For instance, the following configuration option  preserves all applets in a jar: &lt;/p&gt;
&lt;pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -keep public class * extends java.applet.Applet&lt;/pre&gt;
&lt;p&gt;ProGuard  is a command-line tool with an optional graphical user interface. It also comes  with plugins for Ant and for the JME Wireless Toolkit. ProGuard is probably the most popular java shrinker, optimizer,  and obfuscator world-wide. It is being used by developers at companies and  organizations like Sun, IBM, HP, Siemens, Nokia, Google, and NATO. It is the  default tool in many development environments like Sun's Wireless Toolkit,  Netbeans, EclipseME, and more.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Benefits are:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;  ProGuard typically reads the &lt;strong&gt;input jars&lt;/strong&gt; (or wars,  ears, zips, or directories). It then shrinks, optimizes, obfuscates, and  preverifies them. Optionally, multiple optimization passes can be performed,  each typically followed by another shrinking step. ProGuard writes the  processed results to one or more &lt;strong&gt;output jars&lt;/strong&gt; (or wars, ears, zips, or  directories). The input may contain resource files, whose names and contents  can optionally be updated to reflect the obfuscated class names. ProGuard  requires the &lt;strong&gt;library jars&lt;/strong&gt; (or wars, ears, zips, or directories) of the  input jars to be specified. These are essentially the libraries that you would  need for compiling the code. ProGuard uses them to reconstruct the class  dependencies that are necessary for proper processing. The library jars  themselves always remain unchanged. You should still put them in the class path  of your final application. &lt;/p&gt;
&lt;p&gt;  In order to determine which code has to be preserved and  which code can be discarded or obfuscated, you have to specify one or more &lt;em&gt;entry  points&lt;/em&gt; to your code. These entry points are typically classes with main  methods, applets, midlets, etc. &lt;/p&gt;
&lt;ul type=&quot;disc&quot;&gt;
&lt;li&gt;In       the &lt;strong&gt;shrinking step&lt;/strong&gt;, ProGuard starts from these seeds and       recursively determines which classes and class members are used. All other       classes and class members are discarded. &lt;/li&gt;
&lt;li&gt;In       the &lt;strong&gt;optimization step&lt;/strong&gt;, ProGuard further optimizes the code. Among       other optimizations, classes and methods that are not entry points can be       made private, static, or final, unused parameters can be removed, and some       methods may be inlined. &lt;/li&gt;
&lt;li&gt;In       the &lt;strong&gt;obfuscation step&lt;/strong&gt;, ProGuard renames classes and class members       that are not entry points. In this entire process, keeping the entry       points ensures that they can still be accessed by their original names. &lt;/li&gt;
&lt;li&gt;The &lt;strong&gt;preverification step&lt;/strong&gt; is the only step that doesn't have to know the       entry points. &lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Sun, 08 Nov 2009 20:26:22 GMT</pubDate></item></channel></rss>