XXX WIP save

This commit is contained in:
Adam
2016-04-03 21:41:23 -04:00
parent c0a5bc43c2
commit f5b8d681ef
3 changed files with 66 additions and 65 deletions

View File

@@ -136,10 +136,10 @@ public class Execution
System.out.println("Processed " + fcount + " frames"); System.out.println("Processed " + fcount + " frames");
} }
public Collection<InstructionContext> getInstructonContexts(Instruction i) // public Collection<InstructionContext> getInstructonContexts(Instruction i)
{ // {
return contexts.getCollection(i); // return contexts.getCollection(i);
} // }
public void addExecutionVisitor(ExecutionVisitor ev) public void addExecutionVisitor(ExecutionVisitor ev)
{ {

View File

@@ -1,5 +1,11 @@
package net.runelite.deob.deobfuscators; package net.runelite.deob.deobfuscators;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.runelite.asm.ClassFile; import net.runelite.asm.ClassFile;
import net.runelite.asm.ClassGroup; import net.runelite.asm.ClassGroup;
import net.runelite.deob.Deob; import net.runelite.deob.Deob;
@@ -11,17 +17,9 @@ import net.runelite.asm.attributes.code.instruction.types.InvokeInstruction;
import net.runelite.asm.attributes.code.instruction.types.LVTInstruction; import net.runelite.asm.attributes.code.instruction.types.LVTInstruction;
import net.runelite.asm.execution.Execution; import net.runelite.asm.execution.Execution;
import net.runelite.asm.execution.InstructionContext; import net.runelite.asm.execution.InstructionContext;
import net.runelite.asm.signature.Signature;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import net.runelite.asm.execution.StackContext; import net.runelite.asm.execution.StackContext;
import net.runelite.asm.signature.Signature;
import net.runelite.asm.signature.util.VirtualMethods; import net.runelite.asm.signature.util.VirtualMethods;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
public class UnusedParameters implements Deobfuscator public class UnusedParameters implements Deobfuscator

View File

@@ -1,9 +1,6 @@
package net.runelite.deob.deobfuscators.arithmetic; package net.runelite.deob.deobfuscators.arithmetic;
import java.util.Collection;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import net.runelite.asm.ClassGroup; import net.runelite.asm.ClassGroup;
import net.runelite.deob.Deobfuscator; import net.runelite.deob.Deobfuscator;
import net.runelite.asm.attributes.code.Instruction; import net.runelite.asm.attributes.code.Instruction;
@@ -13,40 +10,34 @@ import net.runelite.asm.attributes.code.instructions.IMul;
import net.runelite.asm.attributes.code.instructions.LMul; import net.runelite.asm.attributes.code.instructions.LMul;
import net.runelite.asm.attributes.code.instructions.NOP; import net.runelite.asm.attributes.code.instructions.NOP;
import net.runelite.asm.execution.Execution; import net.runelite.asm.execution.Execution;
import net.runelite.asm.execution.Frame;
import net.runelite.asm.execution.InstructionContext; import net.runelite.asm.execution.InstructionContext;
import net.runelite.asm.execution.StackContext; import net.runelite.asm.execution.StackContext;
public class MultiplyOneDeobfuscator implements Deobfuscator public class MultiplyOneDeobfuscator implements Deobfuscator
{ {
@Override private int count;
public void run(ClassGroup group)
{
group.buildClassGraph();
Execution e = new Execution(group); private void visit(InstructionContext ictx)
e.populateInitialMethods();
e.run();
int count = 0;
for (Frame frame : e.processedFrames)
for (InstructionContext ictx : frame.getInstructions())
{ {
Instruction instruction = ictx.getInstruction(); Instruction instruction = ictx.getInstruction();
if (!(instruction instanceof IMul) && !(instruction instanceof LMul)) if (!(instruction instanceof IMul) && !(instruction instanceof LMul))
continue; {
return;
}
Instructions ins = ictx.getInstruction().getInstructions(); Instructions ins = ictx.getInstruction().getInstructions();
if (ins == null) if (ins == null)
continue; {
return;
}
List<Instruction> ilist = ins.getInstructions(); List<Instruction> ilist = ins.getInstructions();
if (!ilist.contains(ictx.getInstruction())) if (!ilist.contains(ictx.getInstruction()))
continue; // already done {
return; // already done
}
StackContext one = ictx.getPops().get(0); StackContext one = ictx.getPops().get(0);
StackContext two = ictx.getPops().get(1); StackContext two = ictx.getPops().get(1);
@@ -63,10 +54,14 @@ public class MultiplyOneDeobfuscator implements Deobfuscator
} }
if (removeIdx == -1) if (removeIdx == -1)
continue; {
return;
}
if (!MultiplicationDeobfuscator.isOnlyPath(e, ictx, removeIdx == 0 ? one : two)) if (!MultiplicationDeobfuscator.isOnlyPath(e, ictx, removeIdx == 0 ? one : two))
continue; {
return;
}
ictx.removeStack(removeIdx); ictx.removeStack(removeIdx);
ins.replace(ictx.getInstruction(), new NOP(ins)); ins.replace(ictx.getInstruction(), new NOP(ins));
@@ -74,6 +69,14 @@ public class MultiplyOneDeobfuscator implements Deobfuscator
++count; ++count;
} }
@Override
public void run(ClassGroup group)
{
Execution e = new Execution(group);
e.addExecutionVisitor(i -> visit(i));
e.populateInitialMethods();
e.run();
System.out.println("Removed " + count + " 1 multiplications"); System.out.println("Removed " + count + " 1 multiplications");
} }