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

  1. What is an Obfuscator?
  2. Why would I Need an Obfuscator?
  3. How does JCloak Work?
  4. What Support is Included with JCloak?
  5. How do I Submit a Bug Report?
  6. Does JCloak Adhere to Javasoft Standards?
  7. How does JCloak Differ from Other Obfuscation Tools?
  8. Does JCloak Obfuscate JDK 1.1.x Bytecode?
  9. Does JCloak Support Java 2?

What is an Obfuscator?

Obfuscate def. To make so confused or opaque so as to be difficult to perceive or understand: "A great effort was made to obscure or obfuscate the truth." (Robert Conquest)

An Obfuscator is an entity that makes some object difficult to perceive or understand. JCloak is such an "entity" in that it renders your Java bytecode difficult or impossible to understand.

Why would I Need an Obfuscator?

You need an obfuscator like JCloak to protect your applets from being reverse engineered. You also need it to protect the algorithms in your libraries from being copied. Like some customers, you may be required to use JCloak by the US Department of State and the National Security Agency in order to be granted export licenses for your products.

We use JCloak at Force 5 Software to protect itself. If you care about your intellectual property, you need JCloak.


How does JCloak Work?

JCloak determines the complete set of symbol references made by your applet. It then generates a new unique and unintelligible name for each symbol name. JCloak operates on each bytecode instruction in your class file, replacing the original symbol names with the generated ones, so as to render the class files unintelligible to any decompiler.


What Support is Included with JCloak?

Customers who register and license JCloak are entitled to free product support for one year from the date of purchase. The customer is entitled to all maintenance releases of JCloak free of charge. Upgrade programs will be available at a significant discount to existing customers for any major release of JCloak.

How do I Submit a Bug Report?

To submit a bug report, email support@force5.com. Include all console output from JCloak and any relevant class files.


Does JCloak Adhere to Javasoft Standards?

Yes, JCloak generates a standard class file as defined by the Java Virtual Machine specification. Byte code generated by JCloak will run on any JVM. Furthermore, JCloak is the first Java bytecode obfuscator to be certified "100% Pure Java".


How does JCloak Differ from Other Obfuscation Tools?

JCloak operates across all the classes in your applet. JCloak doesn't just obfuscate private members, it also obfuscates any member that is not referenced by a class outside of your applet. JCloak uses a unique method of separating and analyzing the classes referenced by your application, library or applet to determine what is safe to obfuscate, which is accomplished by reading and processing the actual bytecode instructions. In addition, JCloak supports custom control of what classes, fields and methods are obfuscated, including full support for advanced JDK 1.1 features such as RMI, reflection and serialization.

JCloak offers all this, and expert support without a significant markup in price.


Does JCloak Support Java 2?

Yes. JCloak was the first Java obfuscator to support Java 2. JCloak V3 generates bytecode that is compatible with Java 1.0, 1.1 and Java 2. JCloak provides the most complete support for Java 2 including:

  1. Support for the javac -java2 option.
  2. Support for Java 2 format RMI
  3. Purity of generated bytecode for compatibility with HotSpottm and Java 2 Plugin verifiers.


Does JCloak Obfuscate JDK 1.1.x Bytecode?

Yes. with JDK 1.1, Javasoft made minor changes to the class files to support inner classes. JCloak will safely obfuscate inner classes along with any other classes. JCloak detects compiler-generated or 'synthetic' fields and uses of the new reflection API, and automatically excludes the reflected classes from obfuscation.

JCloak can support JavaBeans by being instructed to exclude methods and classes matching the design patterns specified in the Java Beans 1.01 API specification. In addition, custom patterns can be specified to accommodate Beans that support introspection via a BeanInfo derived class.