Software Protection & Licensing
EXE Packer & Virtual DLL Binder
Java Source Obfuscator
AutoIt Source Obfuscation
Assembler Code Obfuscation
Polymorphic Encryption Engine
Auto Clicker for Social Media
String Encryption for Developers
Vehicle Data Decryption Library
Generate Radio Codes & Resell It
Renault & Dacia Radio Code Generator
Ford M Serial Radio Code Generator
Ford V Serial Radio Code Generator
Ford TravelPilot Device PIN Calculator
Radio Player Unlock Code Generator
Chrysler Panasonic TM9 Radio Generator
Uconnect Harman Kardon Radio Code
Visteon Radio Player Generator
DAIICHI MOPAR Radio Code Generator
Radio Code Generator for Fiat Continental
Generate Eclipse ESN Unlock Code
Generate Car Radio Unlock Code
Immobiliser PIN from Glove Box Code
Online Hash Generator
Hide message in image
Convert epoch timestamps
FTP password recovery tool
Config encoder & decoder
Decode Gadu-Gadu passwords
Reversing & Source Code Recovery
Advertising & Interface Design
Reversing, Malware Analysis
Free Source Codes
Domain Portfolio
Words from our customers
Contact Information
Obfuscate your Java source code & algorithms to protect it against reverse engineering analysis, cracking and decompilation. JObfuscator has been used 39056 times so far!
Without the activation code, JObfuscator will process source code with 1500 characters max. length and the only available option will be "Rename variable names". Buy an activation code to remove all limitations and get access to all of the features.
@Obfuscate
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.
main()
@Override
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.
integer
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.
java.lang.Math.*
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[] 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 };
double
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.
Here are the ways that can get you a free activation code:
Write a blog post or an article about JObfuscator with some screenshots, code examples and a link to the product site.
Tweet about JObfuscator to your fans with a link to the product page — use the following hashtags #jobfuscator #java #obfuscator & #obfuscation.
#jobfuscator
#java
#obfuscator
#obfuscation
Report a bug and if I can confirm it you will get a free activation code as a thank you.
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.
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.
Once in a while I will send a free newsletter with:
If you're interested in software protection technologies, cryptography & reverse engineering — give it a try!
* You can unsubscribe at anytime