What is JLockTM?

JLockTM is a Java class file encrypter. It transparently encrypts Java class files and at run-time decrypts the code, so that the JVM can interpret the class file as a valid Java byte-code.

The way JLockTM works is very different from other obfuscator applications. Obfuscators usually replace the name of the methods and member variables. By doing that, they make it more difficult to reverse engineer the obfuscated byte code to its original format. By renaming methods to some invalid names (such as Java keywords), the obfuscators make it difficult for reverse engineer tools to decompile the byte code to compilable Java source code. However, they do not protect the source code. What they do is just making it more difficult to reverse engineer the obfuscated code.

JLockTM takes a completely different approach. It fully encrypts the byte code so that from JVM's point of view, the encrypted code is no longer a valid Java byte-code. At run-time, when the class files need to be loaded, JLockTM transparently decrypts class files and delivers valid Java byte-code to class loader to load the class.

JLockTM operation is completely transparent. Java developers do not need to do anything when they are developing their code. After the code is finished, a GUI based application is used to encrypt those class files that need to be protected. At run-time, JLockTM will automatically take care of decrypting the encrypted byte-codes. The encryption is based on a standard 256-bit encryption mechanism.

JLockTM Features

  • Strong encryption of Java byte-code.
  • Transparent encryption/decryption.
  • Class level protection. You can protect a Java class even if you do not have access to its source code.
  • Support accessing Java classes dynamically, or statically.
  • Support loading encrypted classes by Class.forName, and Beans.instantiate.
  • Support custom class loading.
  • GUI based project definition.
  • Support encryption of files under a folder.
  • Support encryption of files inside archive files (Jar, Zip).
  • Use of native code to perform encryption/decryption to improve performance and protection.
  • Class replacement protection. If an encrypted class is replaced by a non-encrypted class, JLock refuses to load that class.