Add common deobfuscator interface

This commit is contained in:
Adam
2015-07-10 12:37:45 -04:00
parent df11cdaded
commit 26458e7280
10 changed files with 38 additions and 23 deletions

View File

@@ -0,0 +1,6 @@
package info.sigterm.deob;
public interface Deobfuscator
{
public void run(ClassGroup group);
}

View File

@@ -1,7 +1,10 @@
package info.sigterm.deob.deobfuscators;
import java.util.List;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.Code;
import info.sigterm.deob.attributes.code.Instruction;
@@ -15,12 +18,7 @@ import info.sigterm.deob.execution.Execution;
import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.InstructionContext;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class IllegalStateExceptions
public class IllegalStateExceptions implements Deobfuscator
{
/* find if, new, ..., athrow, replace with goto */
private int checkOnce(Execution execution, ClassGroup group)
@@ -120,6 +118,7 @@ public class IllegalStateExceptions
return count;
}
@Override
public void run(ClassGroup group)
{
Execution execution = new Execution(group);

View File

@@ -2,6 +2,7 @@ package info.sigterm.deob.deobfuscators;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.code.Block;
import info.sigterm.deob.attributes.code.Instruction;
@@ -12,7 +13,7 @@ import info.sigterm.deob.attributes.code.instructions.GotoW;
import java.util.ArrayList;
import java.util.List;
public class Jumps
public class Jumps implements Deobfuscator
{
private int checkBlockGraphOnce(ClassGroup group)
{
@@ -83,6 +84,7 @@ public class Jumps
return count;
}
@Override
public void run(ClassGroup g)
{
int count = 0;

View File

@@ -6,21 +6,16 @@ import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Field;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.Code;
import info.sigterm.deob.attributes.code.Instruction;
import info.sigterm.deob.attributes.code.Instructions;
import info.sigterm.deob.attributes.code.instruction.types.ComparisonInstruction;
import info.sigterm.deob.attributes.code.instruction.types.FieldInstruction;
import info.sigterm.deob.attributes.code.instruction.types.GetFieldInstruction;
import info.sigterm.deob.attributes.code.instruction.types.InvokeInstruction;
import info.sigterm.deob.attributes.code.instruction.types.LVTInstruction;
import info.sigterm.deob.attributes.code.instruction.types.PushConstantInstruction;
import info.sigterm.deob.attributes.code.instruction.types.SetFieldInstruction;
import info.sigterm.deob.attributes.code.instructions.IMul;
@@ -29,7 +24,7 @@ import info.sigterm.deob.execution.Frame;
import info.sigterm.deob.execution.InstructionContext;
import info.sigterm.deob.execution.StackContext;
public class ModularArithmeticDeobfuscation
public class ModularArithmeticDeobfuscation implements Deobfuscator
{
private Set<Field> obfuscatedFields; // reliability of these sucks
@@ -676,6 +671,7 @@ public class ModularArithmeticDeobfuscation
return modInverse(BigInteger.valueOf(val), 64).longValue();
}
@Override
public void run(ClassGroup group)
{
Execution execution = new Execution(group);

View File

@@ -4,6 +4,7 @@ import java.util.List;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Field;
import info.sigterm.deob.Interfaces;
import info.sigterm.deob.Method;
@@ -13,7 +14,7 @@ import info.sigterm.deob.pool.Class;
import info.sigterm.deob.signature.Signature;
import info.sigterm.deob.signature.Type;
public class RenameUnique
public class RenameUnique implements Deobfuscator
{
private void renameClass(ClassFile on, ClassFile old, String name)
{
@@ -93,6 +94,7 @@ public class RenameUnique
field.setName(name);
}
@Override
public void run(ClassGroup group)
{
int i = 0;

View File

@@ -2,13 +2,15 @@ package info.sigterm.deob.deobfuscators;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.Code;
import java.util.ArrayList;
public class RuntimeExceptions
public class RuntimeExceptions implements Deobfuscator
{
@Override
public void run(ClassGroup group)
{
int i = 0;

View File

@@ -2,14 +2,16 @@ package info.sigterm.deob.deobfuscators;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.code.Block;
import info.sigterm.deob.attributes.code.Instructions;
import java.util.ArrayList;
public class UnusedBlocks
public class UnusedBlocks implements Deobfuscator
{
@Override
public void run(ClassGroup group)
{
int i = 0;

View File

@@ -4,6 +4,7 @@ import java.util.ArrayList;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Field;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.Code;
@@ -12,7 +13,7 @@ import info.sigterm.deob.attributes.code.instruction.types.FieldInstruction;
import info.sigterm.deob.attributes.code.instruction.types.GetFieldInstruction;
import info.sigterm.deob.attributes.code.instruction.types.SetFieldInstruction;
public class UnusedFields
public class UnusedFields implements Deobfuscator
{
private static boolean isUnused(ClassGroup group, Field field)
{
@@ -61,6 +62,7 @@ public class UnusedFields
return false;
}
@Override
public void run(ClassGroup group)
{
int count = 0;

View File

@@ -2,16 +2,18 @@ package info.sigterm.deob.deobfuscators;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Method;
import info.sigterm.deob.execution.Execution;
import java.util.ArrayList;
public class UnusedMethods
public class UnusedMethods implements Deobfuscator
{
@Override
public void run(ClassGroup group)
{
group.buildClassGraph();
group.buildClassGraph(); // does this use this?
Execution execution = new Execution(group);
execution.populateInitialMethods();

View File

@@ -2,6 +2,7 @@ package info.sigterm.deob.deobfuscators;
import info.sigterm.deob.ClassFile;
import info.sigterm.deob.ClassGroup;
import info.sigterm.deob.Deobfuscator;
import info.sigterm.deob.Method;
import info.sigterm.deob.attributes.Code;
import info.sigterm.deob.attributes.code.Instruction;
@@ -22,7 +23,7 @@ import java.util.Set;
import org.apache.commons.collections4.CollectionUtils;
public class UnusedParameters
public class UnusedParameters implements Deobfuscator
{
private static List<Method> findDependentMethods(NameAndType nat, Set<ClassFile> visited, ClassGroup group, ClassFile cf)
{
@@ -238,8 +239,8 @@ public class UnusedParameters
for (Method m2 : methods)
done.add(m2);
/* removing the parameter can cause collision of overriden methods,
* we should first rename all methods to be unique?
/* removing the parameter can't cause collisions on other (overloaded) methods because prior to this we rename
* all classes/fields/methods to have unique names.
*/
removeParameter(methods, signature, execution, unusedParameter, lvtIndexes[unusedParameter]);
@@ -251,6 +252,7 @@ public class UnusedParameters
return new int[] { count };
}
@Override
public void run(ClassGroup group)
{
Execution execution = new Execution(group);