diff --git a/src/main/java/info/sigterm/deob/Deob.java b/src/main/java/info/sigterm/deob/Deob.java index 9d6543dd65..69d06e4320 100644 --- a/src/main/java/info/sigterm/deob/Deob.java +++ b/src/main/java/info/sigterm/deob/Deob.java @@ -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]); diff --git a/src/main/java/info/sigterm/deob/deobfuscators/MethodInliner.java b/src/main/java/info/sigterm/deob/deobfuscators/MethodInliner.java index 683b384b11..4608a7343c 100644 --- a/src/main/java/info/sigterm/deob/deobfuscators/MethodInliner.java +++ b/src/main/java/info/sigterm/deob/deobfuscators/MethodInliner.java @@ -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);