package net.contra.obfuscator;
import net.contra.obfuscator.trans.deob.AllatoriDeobfuscator;
import net.contra.obfuscator.trans.deob.JShrinkDeobfuscator;
import net.contra.obfuscator.trans.ob.*;
import net.contra.obfuscator.util.misc.LogHandler;
public class Application {
private static final LogHandler logger = new LogHandler("Application");
public static void main(String[] args) {
logger.log(String.format("JMOT v%s by Contra", Settings.VERSION));
logger.log("Visit RECoders.org for Info");
logger.log("Please read LICENSE.txt for licensing information.");
if (args.length < 2) {
logger.error("Please provide at least two arguments!");
return;
}
logger.log("Running with Obfuscation Level: " + Settings.OBFUSCATION_LEVEL.getName());
setParameters();
logger.log("Beginning Process");
try {
String cmd = args[1];
ITransformer obber = null;
//Obfuscation Stuff
if (cmd.equalsIgnoreCase("string")) {
obber = new StringObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("attribute")) {
obber = new AttributeObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("class-name")) {
obber = new ClassNameObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("method-name")) {
obber = new MethodNameObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("field-name")) {
obber = new FieldNameObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("int-complicate")) {
obber = new IntegerComplicator(args[0]);
} else if (cmd.equalsIgnoreCase("int-boxer")) {
obber = new IntegerBoxer(args[0]);
//Deobfuscation stuff
} else if (cmd.equalsIgnoreCase("allatori")) {
obber = new AllatoriDeobfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("jshrink")) {
obber = new JShrinkDeobfuscator(args[0]);
} else {
logger.error("Please provide a proper transformer identifier!");
Application.close();
}
assert obber != null;
obber.logger.log("Loading JarFile. Target: " + args[0]);
obber.load();
obber.logger.log("Transforming Classes");
obber.transform();
obber.logger.log("Saving JarFile");
obber.save();
} catch (Exception e) {
logger.error("Error Completing Obfuscation!");
e.printStackTrace();
return;
}
logger.log("Process Completed!");
}
public static void setParameters() {
switch (Settings.OBFUSCATION_LEVEL) {
case Light:
Settings.CIPHER_KEYS = new int[]{127};
Settings.ITERATIONS = 0;
break;
case Normal:
Settings.CIPHER_KEYS = new int[]{81, 127};
Settings.ITERATIONS = 1;
break;
case Heavy:
Settings.CIPHER_KEYS = new int[]{85, 127, 200};
Settings.ITERATIONS = 3;
break;
case Insane:
Settings.CIPHER_KEYS = new int[]{11, 22, 33, 44, 55, 66, 77, 88};
Settings.ITERATIONS = 15;
break;
default:
Settings.CIPHER_KEYS = new int[]{127};
Settings.ITERATIONS = 0;
break;
}
}
public static void close(){
System.out.println("Application is closing...");
System.exit(1337);
}
}