Zelix KlassMaster - Java Obfuscator

Java Name Obfuscation

Name Obfuscation is the changing of meaningful class, field and method names to meaningless strings. This makes the decompiled source harder to understand but the overall flow of the code is not obscured.

Although Zelix KlassMaster™ can do much more to than just change class, field and method names, it nonetheless performs excellent name obfuscation. Unlike some other obfuscators, it has been engineered to handle extremely complicated inheritance and interface implementation relationships. Also, Zelix KlassMaster's name obfuscation is absolutely irreversible. Some other obfuscators embed old to new name look up tables in your bytecode. That opens the door to their name obfuscation being reversible.

The new names that Zelix KlassMaster™ generates are extremely short so it reduces the size of your bytecode. See the examples below. Note that in the name obfuscated bytecode, the package, class, field and method names have been renamed and the original local variable names have been removed. Unfortunately, the control flow and method calls are still clearly visible. That is why you need Zelix KlassMaster's Flow Obfuscation, String Encryption, Reference Obfuscation, Method Parameter Changing and Method Parameter Obfuscation.

Original Source Next Section

package test;

import java.util.*;

class Demo {

   private List buffer = new ArrayList<>();

   /**
   * Return the position of the specified String
   * in the list. Remove the String once if it
   * has been found. Return -1 if the String
   * isn't found. */
   int getStringPos(String string) {
      for(int ctr=0; ctr < list.size(); ctr++) {
         String curString = list.get(ctr);
         if (curString.equals(string)) {
            list.remove(ctr);
            return ctr;
         }
      }
      return -1;
   }
}

Name obfuscated (1st Generation Obfuscation) then decompiled First Section

package a;

import java.util.*;

class a {

    private List = new ArrayList<>();

    int a(String s) {
        for(int i = 0; i < a.size(); i++) {
            String s1 = a.get(i);
            if(s1.equals(s)) {
                a.remove(i);
                return i;
            }
        }
        return -1;
    }
}