Fix inliner

This commit is contained in:
Adam
2015-08-14 15:01:11 -04:00
parent f3bdcf954e
commit 09c4b108dd
2 changed files with 37 additions and 32 deletions

View File

@@ -2,10 +2,12 @@ package info.sigterm.deob;
import info.sigterm.deob.deobfuscators.ConstantParameter;
import info.sigterm.deob.deobfuscators.IllegalStateExceptions;
import info.sigterm.deob.deobfuscators.RenameUnique;
import info.sigterm.deob.deobfuscators.MethodInliner;
import info.sigterm.deob.deobfuscators.RuntimeExceptions;
import info.sigterm.deob.deobfuscators.UnreachedCode;
import info.sigterm.deob.deobfuscators.UnusedFields;
import info.sigterm.deob.deobfuscators.UnusedMethods;
import info.sigterm.deob.deobfuscators.UnusedParameters;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
@@ -62,37 +64,37 @@ public class Deob
bdur = System.currentTimeMillis() - bstart;
System.out.println("constant param took " + bdur/1000L + " seconds");
// // remove unhit blocks
// bstart = System.currentTimeMillis();
// new UnreachedCode().run(group);
// //new UnusedBlocks().run(group);
// bdur = System.currentTimeMillis() - bstart;
// System.out.println("unused blocks took " + bdur/1000L + " seconds");
// remove unhit blocks
bstart = System.currentTimeMillis();
new UnreachedCode().run(group);
//new UnusedBlocks().run(group);
bdur = System.currentTimeMillis() - bstart;
System.out.println("unused blocks took " + bdur/1000L + " seconds");
// remove unused parameters
// bstart = System.currentTimeMillis();
// new UnusedParameters().run(group);
// bdur = System.currentTimeMillis() - bstart;
// System.out.println("unused params took " + bdur/1000L + " seconds");
bstart = System.currentTimeMillis();
new UnusedParameters().run(group);
bdur = System.currentTimeMillis() - bstart;
System.out.println("unused params took " + bdur/1000L + " seconds");
// remove jump obfuscation
//new Jumps().run(group);
// remove unused fields
// bstart = System.currentTimeMillis();
// new UnusedFields().run(group);
// bdur = System.currentTimeMillis() - bstart;
// System.out.println("unused fields took " + bdur/1000L + " seconds");
//
// // remove unused methods, again?
// bstart = System.currentTimeMillis();
// new UnusedMethods().run(group);
// bdur = System.currentTimeMillis() - bstart;
// System.out.println("unused methods took " + bdur/1000L + " seconds");
bstart = System.currentTimeMillis();
new UnusedFields().run(group);
bdur = System.currentTimeMillis() - bstart;
System.out.println("unused fields took " + bdur/1000L + " seconds");
// remove unused methods, again?
bstart = System.currentTimeMillis();
new UnusedMethods().run(group);
bdur = System.currentTimeMillis() - bstart;
System.out.println("unused methods took " + bdur/1000L + " seconds");
//new ModularArithmeticDeobfuscation().run(group);
//new MethodInliner().run(group);
new MethodInliner().run(group);
saveJar(group, args[1]);

View File

@@ -186,6 +186,9 @@ public class MethodInliner implements Deobfuscator
methodInstructions.getInstructions().add(idx + 1, nop);
++idx;
methodInstructions.buildJumpGraph();
invokeMethodInstructions.buildJumpGraph();
for (Instruction fromI : invokeIns.from)
{
assert fromI.jump.contains(invokeIns);
@@ -200,9 +203,6 @@ public class MethodInliner implements Deobfuscator
methodInstructions.remove(invokeIns);
methodInstructions.buildJumpGraph();
invokeMethodInstructions.buildJumpGraph();
for (Instruction i : invokeMethodInstructions.getInstructions())
{
// move instructions over.
@@ -233,13 +233,16 @@ public class MethodInliner implements Deobfuscator
Instruction oldI = i;
i = lvt.setVariableIndex(newIndex);
i.jump.addAll(oldI.jump);
i.from.addAll(oldI.from);
for (Instruction i2 : oldI.from)
i2.replace(oldI, i);
oldI.from.clear();
if (oldI != i)
{
i.jump.addAll(oldI.jump);
i.from.addAll(oldI.from);
for (Instruction i2 : oldI.from)
i2.replace(oldI, i);
oldI.from.clear();
}
}
methodInstructions.getInstructions().add(idx++, i);