Fix inliner
This commit is contained in:
@@ -2,10 +2,12 @@ package info.sigterm.deob;
|
|||||||
|
|
||||||
import info.sigterm.deob.deobfuscators.ConstantParameter;
|
import info.sigterm.deob.deobfuscators.ConstantParameter;
|
||||||
import info.sigterm.deob.deobfuscators.IllegalStateExceptions;
|
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.RuntimeExceptions;
|
||||||
import info.sigterm.deob.deobfuscators.UnreachedCode;
|
import info.sigterm.deob.deobfuscators.UnreachedCode;
|
||||||
|
import info.sigterm.deob.deobfuscators.UnusedFields;
|
||||||
import info.sigterm.deob.deobfuscators.UnusedMethods;
|
import info.sigterm.deob.deobfuscators.UnusedMethods;
|
||||||
|
import info.sigterm.deob.deobfuscators.UnusedParameters;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.DataInputStream;
|
import java.io.DataInputStream;
|
||||||
@@ -62,37 +64,37 @@ public class Deob
|
|||||||
bdur = System.currentTimeMillis() - bstart;
|
bdur = System.currentTimeMillis() - bstart;
|
||||||
System.out.println("constant param took " + bdur/1000L + " seconds");
|
System.out.println("constant param took " + bdur/1000L + " seconds");
|
||||||
|
|
||||||
// // remove unhit blocks
|
// remove unhit blocks
|
||||||
// bstart = System.currentTimeMillis();
|
bstart = System.currentTimeMillis();
|
||||||
// new UnreachedCode().run(group);
|
new UnreachedCode().run(group);
|
||||||
// //new UnusedBlocks().run(group);
|
//new UnusedBlocks().run(group);
|
||||||
// bdur = System.currentTimeMillis() - bstart;
|
bdur = System.currentTimeMillis() - bstart;
|
||||||
// System.out.println("unused blocks took " + bdur/1000L + " seconds");
|
System.out.println("unused blocks took " + bdur/1000L + " seconds");
|
||||||
|
|
||||||
// remove unused parameters
|
// remove unused parameters
|
||||||
// bstart = System.currentTimeMillis();
|
bstart = System.currentTimeMillis();
|
||||||
// new UnusedParameters().run(group);
|
new UnusedParameters().run(group);
|
||||||
// bdur = System.currentTimeMillis() - bstart;
|
bdur = System.currentTimeMillis() - bstart;
|
||||||
// System.out.println("unused params took " + bdur/1000L + " seconds");
|
System.out.println("unused params took " + bdur/1000L + " seconds");
|
||||||
|
|
||||||
// remove jump obfuscation
|
// remove jump obfuscation
|
||||||
//new Jumps().run(group);
|
//new Jumps().run(group);
|
||||||
|
|
||||||
// remove unused fields
|
// remove unused fields
|
||||||
// bstart = System.currentTimeMillis();
|
bstart = System.currentTimeMillis();
|
||||||
// new UnusedFields().run(group);
|
new UnusedFields().run(group);
|
||||||
// bdur = System.currentTimeMillis() - bstart;
|
bdur = System.currentTimeMillis() - bstart;
|
||||||
// System.out.println("unused fields took " + bdur/1000L + " seconds");
|
System.out.println("unused fields took " + bdur/1000L + " seconds");
|
||||||
//
|
|
||||||
// // remove unused methods, again?
|
// remove unused methods, again?
|
||||||
// bstart = System.currentTimeMillis();
|
bstart = System.currentTimeMillis();
|
||||||
// new UnusedMethods().run(group);
|
new UnusedMethods().run(group);
|
||||||
// bdur = System.currentTimeMillis() - bstart;
|
bdur = System.currentTimeMillis() - bstart;
|
||||||
// System.out.println("unused methods took " + bdur/1000L + " seconds");
|
System.out.println("unused methods took " + bdur/1000L + " seconds");
|
||||||
|
|
||||||
//new ModularArithmeticDeobfuscation().run(group);
|
//new ModularArithmeticDeobfuscation().run(group);
|
||||||
|
|
||||||
//new MethodInliner().run(group);
|
new MethodInliner().run(group);
|
||||||
|
|
||||||
saveJar(group, args[1]);
|
saveJar(group, args[1]);
|
||||||
|
|
||||||
|
|||||||
@@ -186,6 +186,9 @@ public class MethodInliner implements Deobfuscator
|
|||||||
methodInstructions.getInstructions().add(idx + 1, nop);
|
methodInstructions.getInstructions().add(idx + 1, nop);
|
||||||
++idx;
|
++idx;
|
||||||
|
|
||||||
|
methodInstructions.buildJumpGraph();
|
||||||
|
invokeMethodInstructions.buildJumpGraph();
|
||||||
|
|
||||||
for (Instruction fromI : invokeIns.from)
|
for (Instruction fromI : invokeIns.from)
|
||||||
{
|
{
|
||||||
assert fromI.jump.contains(invokeIns);
|
assert fromI.jump.contains(invokeIns);
|
||||||
@@ -200,9 +203,6 @@ public class MethodInliner implements Deobfuscator
|
|||||||
|
|
||||||
methodInstructions.remove(invokeIns);
|
methodInstructions.remove(invokeIns);
|
||||||
|
|
||||||
methodInstructions.buildJumpGraph();
|
|
||||||
invokeMethodInstructions.buildJumpGraph();
|
|
||||||
|
|
||||||
for (Instruction i : invokeMethodInstructions.getInstructions())
|
for (Instruction i : invokeMethodInstructions.getInstructions())
|
||||||
{
|
{
|
||||||
// move instructions over.
|
// move instructions over.
|
||||||
@@ -233,13 +233,16 @@ public class MethodInliner implements Deobfuscator
|
|||||||
Instruction oldI = i;
|
Instruction oldI = i;
|
||||||
i = lvt.setVariableIndex(newIndex);
|
i = lvt.setVariableIndex(newIndex);
|
||||||
|
|
||||||
i.jump.addAll(oldI.jump);
|
if (oldI != i)
|
||||||
i.from.addAll(oldI.from);
|
{
|
||||||
|
i.jump.addAll(oldI.jump);
|
||||||
|
i.from.addAll(oldI.from);
|
||||||
|
|
||||||
for (Instruction i2 : oldI.from)
|
for (Instruction i2 : oldI.from)
|
||||||
i2.replace(oldI, i);
|
i2.replace(oldI, i);
|
||||||
|
|
||||||
oldI.from.clear();
|
oldI.from.clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
methodInstructions.getInstructions().add(idx++, i);
|
methodInstructions.getInstructions().add(idx++, i);
|
||||||
|
|||||||
Reference in New Issue
Block a user