JObfuscator — Obfuscation for Java Source Code

Obfuscate your Java source code & algorithms to protect it against reverse engineering analysis, cracking and decompilation. JObfuscator has been used 440 times so far!

Java source code

Obfuscated Java code

Global obfuscation options. When disabled will discard any @Obfuscate annotation.

System.out.println("1");
System.out.println("2");
System.out.println("3");
int JOWCN_FGIWJIGTWJ_JSDAO = 0;
JOWCN_FGIWJIGTWJ_JSDAO = 1148643996;
while (JOWCN_FGIWJIGTWJ_JSDAO != 1421874931) {
  switch(JOWCN_FGIWJIGTWJ_JSDAO) {
    case 797943348:
      System.out.println("3");
      JOWCN_FGIWJIGTWJ_JSDAO += 623931583;
      break;
    case 1148643996:
      System.out.println("1");
      JOWCN_FGIWJIGTWJ_JSDAO -= 911757835;
      break;
    case 236886161:
      System.out.println("2");
      JOWCN_FGIWJIGTWJ_JSDAO -= -561057187;
      break;
}

Read about code execution flow.

int myNum = 5;
float myFloatNum = 5.99f;
char myLetter = 'D';
boolean myBool = true;
String myText = "Java Obfuscator";
int ap9axcpArl_nyapT__QpnQOl_ = 5;
float var_3897 = 5.99f;
char aAqktfgaaaqRjhiouqlSwoqgob = 'D';
boolean nVdbxytrOhipcleakh = true;
String MUQJO_OGIEHC = "Java Obfuscator";

All references to the renamed variables are automatically fixed.

public int calc(double numArray[]) {...}
public int SqcFsxe(double[] numArray) {...}

All references are automatically fixed. main() entrypoint name remains intact. Methods annotated with @Override keyword are not renamed.

public static int methodNum1(int param)
{...}

public static int methodNum2(int param)
{...}

public static int methodNum3(int param)
{...}
public static int methodNum2(int param)
{...}

public static int methodNum3(int param)
{...}

public static int methodNum1(int param)
{...}

The order of Java methods in a source file is not important.

public static int method(int param) {
  int a = 1;
  int b = a + 2;
  int c = 0;
  if (b > 3) return c;

  return 4;
}
public static int method(int param) {
  int a = (int) (681.57415 - Math.cbrt(315229127.95597));
  int b = a + (int) (2.76739 - Math.acos(0.71973));
  int c = (int) (-1.20690 + Math.tan(0.87887));
  if (b > (int) (-1.85887 + Math.log10(72255.55488)))
    return c;
  return (int) Math.min(6525.74776, 4.00000);
}

Over 15 floating point math functions used from the java.lang.Math.* class.

System.out.println("Java Obfuscator Online");
String var_127 = "";
int[] var_1774 = { 0xFB5F, 0xF9EF, 0xF89F, 0xF9EF,
                   0xFDFF, 0xFB0F, 0xF9DF, 0xF99F,
                   0xF8AF, 0xF8CF, 0xF9CF, 0xF9EF,
                   0xF8BF, 0xF90F, 0xF8DF, 0xFDFF,
                   0xFB0F, 0xF91F, 0xF93F, 0xF96F,
                   0xF91F, 0xF9AF };
for (int hGrz = 0, x = 0; hGrz < 22; hGrz++) {
  x = var_1774[hGrz];
  x ^= 0xFFFF;
  x = ((x << 12) | ((x & 0xFFFF) >> 4)) & 0xFFFF;
  var_127 += (char) (x & 0xFFFF);
}

System.out.println(var_127);

The polymorphic string encryption engine is taken from our StringEncrypt solution.

public static int method(int param) {
  int a = 1;
  int b = a + 2;
  int c = 0;
  if (b > 3) return c;

  return 4;
}
public static int method(int param) {
  int[] IFNMDK = { 0, 3, 2, 4, 1 };
  int a = IFNMDK[4];
  int b = a + IFNMDK[2];
  int c = IFNMDK[0];
  if (b > IFNMDK[1])
    return c;
  return IFNMDK[3];
}

It makes the analysis harder because it requires an indexed table lookup for every numeric value. As an extra obfuscation, the generated arrays are randomly declared as double arrays e.g. double[] IFNMDK = { 0.49128, 3.33891, 2.00013, 4.32255, 1.99981 };

public static double method(double param) {
  double a = 1.1;
  double b = a + 2.2;
  double c = 0.0;
  if (b > 3.3) return c;

  return 4.4;
}
public static double method(double param) {
  double[] xnn_dji_34 = { 0.0, 3.3, 2.2, 4.4, 1.1 };
  double a = xnn_dji_34[4];
  double b = a + xnn_dji_34[2];
  double c = xnn_dji_34[0];
  if (b > xnn_dji_34[1])
    return c;
  return xnn_dji_34[3];
}

It makes the analysis harder because it requires an indexed table lookup for every numeric value.


Want a free activation code?

Here are the ways that can get you a free activation code:

Pencil

Write a post

Write a blog post or an article about JObfuscator with some screenshots, code examples and a link to the product site.

Twitter

Tweet about it

Tweet about JObfuscator to your fans with a link to the product page — use the following hashtags #jobfuscator #java #obfuscator & #obfuscation.

Pencil

Report a bug

Report a bug and if I can confirm it you will get a free activation code as a thank you.

Twitter

Suggest an obfuscation idea

If you have an idea for improving the current obfuscation methods, or a new technique, please contact me with some code samples.

Use the contact form to talk to me.

Questions?

If you would like to ask me about JObfuscator, or something's not clear, mail me. I'll be happy to answer all of your questions.