A B O U T F5 S A L E S P R O D U C T S S U P P O R T D O W N L O A D
White paper


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:
  1. Un-obfuscated java bytecode contains all the text of every symbol name in the source.
  2. 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.

A few 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:

  1. It often generates additional branching which can slow your program down.
  2. The bytecode often will simply not run on just-in-time or compile to exe vitural machines like HotSpot or TowerJ.
  3. 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 thrown.

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.