JCloak is a Java bytecode obfuscator, it blocks reverse engineering of Java byte code.
The reasons Java is more open to attack than traditional C++ programs are:
- Un-obfuscated java bytecode contains
all the text of every symbol name in the source.
- Java bytecode is higher level than regular machine code.
JCloak blocks reverse engineering of java bytecode
by reducing the symbol information stored in the class files. While this does not prevent decompilation,
it renders the decompiler's output unintelligible.
Most of the shareware and free obfuscators operate only on the private symbols, the
obfuscator included with Inprise (Borland) JBuilder operates like this. This will do little
to obfuscate your Java code.
other obfuscators scramble or 'optimize' the control flow generated by the Java compiler in an attempt
to confuse the decompiler. This strategy works quite well on simple decompilers such as Mocha.
The problems with this method is:
- It often generates additional branching
which can slow your program down.
- The bytecode often will simply not run
on just-in-time or compile to exe vitural machines like HotSpot
- The bytecode verifiers in the browser Java virtual machines are particularly picky. The bytecode
verifier must be able to analyze and validate all the paths through a method or a VerifyError is
JCloak achieves a high level of obfuscation by operating on all the symbols in your program
while preserving the compiler generated byte code.
- The original "100% Pure Javatm" bytecode obfuscator
JCloak is certified "100% Pure Java". This gives
our users full confidence that the program will run on any compliant Java platform. Force 5 Software is committed
to keeping JCloak 100% Pure.
- Complete packaging solution, jar, zip and cab support.
JCloak can package your program in all the Java
archive formats. JAR and Zip files can be generated for deploying on Netscape or the Sun Java runtime. In
addition CAB files can be generated for Microsoft Internet Explorer.
- Reduces Applet size 30% or more.
By compressing the symbol information, and by removing "dead" code, JCloak can reduce the size of your Applet significantly. In some cases
over a 30% reduction in size of the Applet class files has be achieved. JCloak produces the minimal number of obfuscated symbol names
to further reduce class file size.
- Exclusive "Divide & Conquer" system.
JCloak's exclusive "Divide & Conquer" algorithm allows JCloak to obfuscate most of the symbols in
your program. Even the public symbols can be obfuscated by JCloak.
Divide & Conquer works by completely
examining actual bytecode symbol references in your classes
and partially analyzing the JDK classes that
your program inherits from or references.
- Powerful command line interface
JCloak integrates seamlessly into your command line build procedures. JCloak reads a project file that can contain substitution
variables. You specify substitution variables on the JCloak command line that are substituted in the path strings in the project file.
The JCloak project file format is fully documented and backward compatible from version to version of JCloak.
- Automatic Handling for Dynamically Loaded Classes
JCloak can be set to automatically detect that a class is dynamically loaded, that is created via Class.forName(). JCloak preserves
the class names for the dynamically loaded classes.
- Automatic Serialization Handling
JCloak automatically preserves the methods and fields required for Java Serialization.
- Support for Incremental Obfuscation
JCloak supports incremental obfuscation, that is preserving a symbol map from a previous obfuscation run for use in a subsequent obfuscation
run. This allows versioning and shipping unbundled products as well as supporting versioning of serialized classes.