Skip to content

Commit

Permalink
added integer splitter/boxer
Browse files Browse the repository at this point in the history
  • Loading branch information
Contra committed Feb 14, 2011
1 parent 3bf463d commit 7721103
Show file tree
Hide file tree
Showing 43 changed files with 1,136 additions and 120 deletions.
11 changes: 11 additions & 0 deletions .idea/artifacts/JMOT_jar.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

351 changes: 265 additions & 86 deletions .idea/workspace.xml

Large diffs are not rendered by default.

674 changes: 674 additions & 0 deletions LICENSE.txt

Large diffs are not rendered by default.

Binary file added out/artifacts/JMOT_jar/JMOT.jar
Binary file not shown.
Empty file.
Binary file modified out/production/JMOT/net/contra/obfuscator/Application$1.class
Binary file not shown.
Binary file modified out/production/JMOT/net/contra/obfuscator/Application.class
Binary file not shown.
Binary file modified out/production/JMOT/net/contra/obfuscator/ITransformer.class
Binary file not shown.
Binary file modified out/production/JMOT/net/contra/obfuscator/Settings.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file removed out/production/JMOT/net/contra/obfuscator/util/IO.class
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
3 changes: 3 additions & 0 deletions src/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
Manifest-Version: 1.0
Main-Class: net.contra.obfuscator.Application

6 changes: 4 additions & 2 deletions src/net/contra/obfuscator/Application.java
@@ -1,7 +1,7 @@
package net.contra.obfuscator;

import net.contra.obfuscator.trans.*;
import net.contra.obfuscator.util.LogHandler;
import net.contra.obfuscator.util.misc.LogHandler;

public class Application {
private static final LogHandler Logger = new LogHandler("Application");
Expand Down Expand Up @@ -29,8 +29,10 @@ public static void main(String[] args) {
obber = new MethodNameObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("field-name")) {
obber = new FieldNameObfuscator(args[0]);
} else if (cmd.equalsIgnoreCase("int")) {
} else if (cmd.equalsIgnoreCase("int-complicate")) {
obber = new IntegerComplicator(args[0]);
} else if (cmd.equalsIgnoreCase("int-boxer")) {
obber = new IntegerBoxer(args[0]);
} else {
Logger.Error("Please provide a proper transformer identifier!");
return;
Expand Down
2 changes: 1 addition & 1 deletion src/net/contra/obfuscator/ITransformer.java
@@ -1,6 +1,6 @@
package net.contra.obfuscator;

import net.contra.obfuscator.util.LogHandler;
import net.contra.obfuscator.util.misc.LogHandler;

public interface ITransformer {

Expand Down
9 changes: 7 additions & 2 deletions src/net/contra/obfuscator/Settings.java
Expand Up @@ -3,8 +3,13 @@
public class Settings {
//Application Settings
public static final double Version = 0.14; //Don't Touch
public static final boolean Debug = false;
public static final ObfuscationType ObfuscationLevel = ObfuscationType.Insane;
public static final boolean Debug = true;
public static final ObfuscationType ObfuscationLevel = ObfuscationType.Normal;
public static String FileTag = "-new";

//Integer Boxer Settings
public static final String BoxerName = "box";
public static final String BoxerArg = "s";

//String Obfuscation Settings
public static final String CipherName = "hax";
Expand Down
9 changes: 5 additions & 4 deletions src/net/contra/obfuscator/trans/AttributeObfuscator.java
Expand Up @@ -6,9 +6,10 @@
import com.sun.org.apache.bcel.internal.generic.LocalVariableGen;
import com.sun.org.apache.bcel.internal.generic.MethodGen;
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.util.JarLoader;
import net.contra.obfuscator.util.LogHandler;
import net.contra.obfuscator.util.Misc;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;
import net.contra.obfuscator.util.misc.Misc;


public class AttributeObfuscator implements ITransformer {
Expand Down Expand Up @@ -47,7 +48,7 @@ public void Transform() {
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", "-new.jar"));
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}
}

11 changes: 6 additions & 5 deletions src/net/contra/obfuscator/trans/ClassNameObfuscator.java
Expand Up @@ -3,10 +3,11 @@
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.*;
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.util.BCELMethods;
import net.contra.obfuscator.util.JarLoader;
import net.contra.obfuscator.util.LogHandler;
import net.contra.obfuscator.util.Misc;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.bcel.BCELMethods;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;
import net.contra.obfuscator.util.misc.Misc;

import java.util.HashMap;
import java.util.Map;
Expand Down Expand Up @@ -93,6 +94,6 @@ public void Transform() {
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", "-new.jar"));
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}
}
9 changes: 7 additions & 2 deletions src/net/contra/obfuscator/trans/FieldNameObfuscator.java
Expand Up @@ -4,7 +4,12 @@
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.*;
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.util.*;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.bcel.BCELMethods;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;
import net.contra.obfuscator.util.misc.Misc;
import net.contra.obfuscator.util.misc.RenamedPair;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -76,6 +81,6 @@ public void Transform() {
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", "-new.jar"));
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}
}
97 changes: 97 additions & 0 deletions src/net/contra/obfuscator/trans/IntegerBoxer.java
@@ -0,0 +1,97 @@
package net.contra.obfuscator.trans;

import com.sun.org.apache.bcel.internal.Constants;
import com.sun.org.apache.bcel.internal.classfile.Method;
import com.sun.org.apache.bcel.internal.generic.*;
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.ObfuscationType;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.bcel.BCELMethods;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;


public class IntegerBoxer implements ITransformer {
private final LogHandler Logger = new LogHandler("AttributeObfuscator");
private String Location = "";
private JarLoader LoadedJar;

public IntegerBoxer(String loc) {
Location = loc;
}

public void Load() {
LoadedJar = new JarLoader(Location);
}

public void Transform() {
for (ClassGen cg : LoadedJar.ClassEntries.values()) {
MethodGen boxer = getBoxer(cg);
INVOKESTATIC inv = new INVOKESTATIC(cg.getConstantPool().addMethodref(boxer));
for (Method method : cg.getMethods()) {
MethodGen mg = new MethodGen(method, cg.getClassName(), cg.getConstantPool());
InstructionList list = mg.getInstructionList();
if (list == null) continue;
Logger.Log("Boxing Constant Integers -> Class: " + cg.getClassName() + " Method: " + method.getName());
InstructionHandle[] handles = list.getInstructionHandles();
for (InstructionHandle handle : handles) {
if (handle.getInstruction() instanceof ICONST
|| handle.getInstruction() instanceof BIPUSH
|| handle.getInstruction() instanceof SIPUSH
|| handle.getInstruction() instanceof ILOAD
|| (handle.getInstruction() instanceof LDC && handle.getNext().getInstruction() instanceof IASTORE)) {
int curValue = BCELMethods.getIntegerValue(handle.getInstruction());
InstructionHandle nh;
//If it is an even int, it gets replaced with half it's value and appends
//an int of the key
if (curValue != -9001 && (curValue % 2 == 0)
&& Settings.ObfuscationLevel.getLevel() > ObfuscationType.Normal.getLevel()) { //check if it's even.
int tempkey = curValue / 2;
Logger.Debug("Value: " + curValue + " Key: " + tempkey);
Instruction newIns = BCELMethods.getIntegerLoad(handle.getInstruction(), tempkey);
handle.setInstruction(newIns);
if (tempkey <= 5 && tempkey >= -1) {
nh = list.append(handle, new ICONST(tempkey));
} else {
nh = list.append(handle, newIns);
}
} else {
//Otherwise just append a 0 key and keep the number the same
nh = list.append(handle, new ICONST(0));
}
list.append(nh, inv);
}
}
list.setPositions();
mg.setInstructionList(list);
mg.setMaxLocals();
mg.setMaxStack();
cg.replaceMethod(method, mg.getMethod());
}
if (cg.containsMethod(boxer.getName(), boxer.getSignature()) == null) {
Logger.Log("Injecting Boxer Method -> Class: " + cg.getClassName());
cg.addMethod(boxer.getMethod());
} else {
Logger.Error("Boxer Method Already Exists! -> Class: " + cg.getClassName());
}
}
}

MethodGen getBoxer(ClassGen cg) {
InstructionList il = new InstructionList();
MethodGen method = new MethodGen(Constants.ACC_PUBLIC | Constants.ACC_STATIC, Type.INT, new Type[]{Type.INT, Type.INT},
new String[]{Settings.BoxerArg, Settings.BoxerArg + "i"}, Settings.BoxerName, cg.getClassName(), il, cg.getConstantPool());
il.append(InstructionFactory.createLoad(Type.INT, 0));
il.append(InstructionFactory.createLoad(Type.INT, 1));
il.append(new IADD());
il.append(InstructionFactory.createReturn(Type.INT));
method.setMaxStack();
method.setMaxLocals();
return method;
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}
}

12 changes: 6 additions & 6 deletions src/net/contra/obfuscator/trans/IntegerComplicator.java
Expand Up @@ -5,9 +5,9 @@
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.ObfuscationType;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.BCELMethods;
import net.contra.obfuscator.util.JarLoader;
import net.contra.obfuscator.util.LogHandler;
import net.contra.obfuscator.util.bcel.BCELMethods;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;


public class IntegerComplicator implements ITransformer {
Expand Down Expand Up @@ -60,8 +60,8 @@ public void Transform() {
nlist.append(new IMUL());
}
}
if(Settings.ObfuscationLevel.getLevel() > ObfuscationType.Normal.getLevel()
&& handle.getPrev() != null){
if (Settings.ObfuscationLevel.getLevel() > ObfuscationType.Normal.getLevel()
&& handle.getPrev() != null) {
InstructionList prelist = new InstructionList();
prelist.append(new ICONST(0));
for (int i = 0; i < Settings.Iterations; i++) {
Expand All @@ -84,7 +84,7 @@ public void Transform() {
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", "-new.jar"));
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}
}

9 changes: 7 additions & 2 deletions src/net/contra/obfuscator/trans/MethodNameObfuscator.java
Expand Up @@ -6,7 +6,12 @@
import com.sun.org.apache.bcel.internal.generic.InstructionList;
import com.sun.org.apache.bcel.internal.generic.MethodGen;
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.util.*;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.bcel.BCELMethods;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;
import net.contra.obfuscator.util.misc.Misc;
import net.contra.obfuscator.util.misc.RenamedPair;

import java.util.ArrayList;
import java.util.HashMap;
Expand Down Expand Up @@ -78,6 +83,6 @@ public void Transform() {
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", "-new.jar"));
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}
}
6 changes: 3 additions & 3 deletions src/net/contra/obfuscator/trans/StringObfuscator.java
Expand Up @@ -5,8 +5,8 @@
import com.sun.org.apache.bcel.internal.generic.*;
import net.contra.obfuscator.ITransformer;
import net.contra.obfuscator.Settings;
import net.contra.obfuscator.util.JarLoader;
import net.contra.obfuscator.util.LogHandler;
import net.contra.obfuscator.util.bcel.JarLoader;
import net.contra.obfuscator.util.misc.LogHandler;


public class StringObfuscator implements ITransformer {
Expand Down Expand Up @@ -62,7 +62,7 @@ public void Transform() {
}

public void Dump() {
LoadedJar.Save(Location.replace(".jar", "-new.jar"));
LoadedJar.Save(Location.replace(".jar", Settings.FileTag + ".jar"));
}

String getCiphered(String input, int key) {
Expand Down
@@ -1,4 +1,4 @@
package net.contra.obfuscator.util;
package net.contra.obfuscator.util.bcel;

import com.sun.org.apache.bcel.internal.generic.*;

Expand Down Expand Up @@ -69,6 +69,38 @@ public static Instruction getNewFieldInvoke(Instruction ins, int index) {
}
}

public static boolean isInteger(Instruction ins) {
if (ins instanceof ICONST) {
return true;
} else if (ins instanceof BIPUSH) {
return true;
} else if (ins instanceof SIPUSH) {
return true;
}
return false;
}

public static int getIntegerValue(Instruction ins) {
if (ins instanceof ICONST) {
return ((ICONST) ins).getValue().intValue();
} else if (ins instanceof BIPUSH) {
return ((BIPUSH) ins).getValue().intValue();
} else if (ins instanceof SIPUSH) {
return ((SIPUSH) ins).getValue().intValue();
}
return -9001;
}
public static Instruction getIntegerLoad(Instruction ins, int i) {
if (ins instanceof ICONST) {
return new ICONST(i);
} else if (ins instanceof BIPUSH) {
return new BIPUSH((byte)i);
} else if (ins instanceof SIPUSH) {
return new SIPUSH((short)i);
}
return null;
}

public static boolean isInvoke(Instruction ins) {
if (ins instanceof INVOKESTATIC) {
return true;
Expand Down
@@ -1,8 +1,9 @@
package net.contra.obfuscator.util;
package net.contra.obfuscator.util.bcel;

import com.sun.org.apache.bcel.internal.classfile.ClassParser;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
import com.sun.org.apache.bcel.internal.generic.ClassGen;
import net.contra.obfuscator.util.misc.IO;

import java.io.File;
import java.io.FileOutputStream;
Expand Down
@@ -1,10 +1,10 @@
package net.contra.obfuscator.util;
package net.contra.obfuscator.util.misc;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;

class IO {
public class IO {
public static byte[] GetBytes(InputStream inputStream) {
ByteArrayOutputStream bout = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
Expand Down
@@ -1,4 +1,4 @@
package net.contra.obfuscator.util;
package net.contra.obfuscator.util.misc;

import net.contra.obfuscator.Settings;

Expand Down
@@ -1,4 +1,4 @@
package net.contra.obfuscator.util;
package net.contra.obfuscator.util.misc;

import net.contra.obfuscator.Settings;

Expand Down
@@ -1,4 +1,4 @@
package net.contra.obfuscator.util;
package net.contra.obfuscator.util.misc;

/**
* Created by IntelliJ IDEA.
Expand Down

0 comments on commit 7721103

Please sign in to comment.