From 1853bb1be1f5d3b1b12abed68fd345f5e91d9145 Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 22 Aug 2015 12:18:24 -0400 Subject: [PATCH] Field moving works --- src/main/java/net/runelite/deob/Deob.java | 120 +++++++++--------- .../runelite/deob/attributes/Attributes.java | 4 +- .../net/runelite/deob/attributes/Code.java | 6 + .../deob/attributes/code/Exceptions.java | 7 +- .../deob/deobfuscators/FieldMover.java | 2 + .../deob/deobfuscators/UnusedParameters.java | 10 +- 6 files changed, 79 insertions(+), 70 deletions(-) diff --git a/src/main/java/net/runelite/deob/Deob.java b/src/main/java/net/runelite/deob/Deob.java index a58c7d35ca..fe4d4addaa 100644 --- a/src/main/java/net/runelite/deob/Deob.java +++ b/src/main/java/net/runelite/deob/Deob.java @@ -46,72 +46,72 @@ public class Deob // bdur = System.currentTimeMillis() - bstart; // System.out.println("rename unique took " + bdur/1000L + " seconds"); - // remove except RuntimeException - bstart = System.currentTimeMillis(); - new RuntimeExceptions().run(group); - bdur = System.currentTimeMillis() - bstart; - System.out.println("runtime exception took " + bdur/1000L + " seconds"); - - // remove unused methods - bstart = System.currentTimeMillis(); - new UnusedMethods().run(group); - bdur = System.currentTimeMillis() - bstart; - System.out.println("unused methods took " + bdur/1000L + " seconds"); - - new UnreachedCode().run(group); - - // remove illegal state exceptions, frees up some parameters - bstart = System.currentTimeMillis(); - new IllegalStateExceptions().run(group); - bdur = System.currentTimeMillis() - bstart; - System.out.println("illegal state exception took " + bdur/1000L + " seconds"); - - // remove constant logically dead parameters - bstart = System.currentTimeMillis(); - new ConstantParameter().run(group); - 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 unused parameters - 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"); - - - new MethodInliner().run(group); - -// new ModularArithmeticDeobfuscation().run(group); +// // remove except RuntimeException +// bstart = System.currentTimeMillis(); +// new RuntimeExceptions().run(group); +// bdur = System.currentTimeMillis() - bstart; +// System.out.println("runtime exception took " + bdur/1000L + " seconds"); // +// // remove unused methods +// bstart = System.currentTimeMillis(); +// new UnusedMethods().run(group); +// bdur = System.currentTimeMillis() - bstart; +// System.out.println("unused methods took " + bdur/1000L + " seconds"); +// +// new UnreachedCode().run(group); +// +// // remove illegal state exceptions, frees up some parameters +// bstart = System.currentTimeMillis(); +// new IllegalStateExceptions().run(group); +// bdur = System.currentTimeMillis() - bstart; +// System.out.println("illegal state exception took " + bdur/1000L + " seconds"); +// +// // remove constant logically dead parameters +// bstart = System.currentTimeMillis(); +// new ConstantParameter().run(group); +// 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 unused parameters +// 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"); +// +// +// new MethodInliner().run(group); +// // new MethodMover().run(group); - - //new FieldMover().run(group); // // new FieldInliner().run(group); + new FieldMover().run(group); + //new UnusedClass().run(group); + +// new ModularArithmeticDeobfuscation().run(group); saveJar(group, args[1]); diff --git a/src/main/java/net/runelite/deob/attributes/Attributes.java b/src/main/java/net/runelite/deob/attributes/Attributes.java index 648a0113fd..e91300e2e5 100644 --- a/src/main/java/net/runelite/deob/attributes/Attributes.java +++ b/src/main/java/net/runelite/deob/attributes/Attributes.java @@ -38,11 +38,9 @@ public class Attributes method = m; } - public Attributes(Code c) throws IOException + public Attributes(Code c) { code = c; - - load(); } public Method getMethod() diff --git a/src/main/java/net/runelite/deob/attributes/Code.java b/src/main/java/net/runelite/deob/attributes/Code.java index 97f9e45b4d..4dc11129a9 100644 --- a/src/main/java/net/runelite/deob/attributes/Code.java +++ b/src/main/java/net/runelite/deob/attributes/Code.java @@ -20,6 +20,9 @@ public class Code extends Attribute public Code(Attributes attributes) { super(attributes, AttributeType.CODE); + + exceptions = new Exceptions(this); + this.attributes = new Attributes(this); } @Override @@ -34,7 +37,10 @@ public class Code extends Attribute instructions.load(); exceptions = new Exceptions(this); + exceptions.load(); + this.attributes = new Attributes(this); + this.attributes.load(); instructions.buildBlocks(); instructions.buildJumpGraph(); diff --git a/src/main/java/net/runelite/deob/attributes/code/Exceptions.java b/src/main/java/net/runelite/deob/attributes/code/Exceptions.java index 274e4886c5..417e9f4f53 100644 --- a/src/main/java/net/runelite/deob/attributes/code/Exceptions.java +++ b/src/main/java/net/runelite/deob/attributes/code/Exceptions.java @@ -14,10 +14,13 @@ public class Exceptions private Code code; private List exceptions = new ArrayList(); - public Exceptions(Code code) throws IOException + public Exceptions(Code code) { this.code = code; - + } + + public void load() throws IOException + { DataInputStream is = code.getAttributes().getStream(); int count = is.readUnsignedShort(); diff --git a/src/main/java/net/runelite/deob/deobfuscators/FieldMover.java b/src/main/java/net/runelite/deob/deobfuscators/FieldMover.java index 43bdc7b1cd..649a3b702c 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/FieldMover.java +++ b/src/main/java/net/runelite/deob/deobfuscators/FieldMover.java @@ -200,6 +200,8 @@ public class FieldMover implements Deobfuscator code.setInstructions(instructions); instructions.getInstructions().add(new VReturn(instructions, InstructionType.RETURN, 0)); // add return + + to.getMethods().getMethods().add(toClinit); } moveInitializer(setField, toClinit); diff --git a/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java b/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java index 8830fafeeb..e54005b2bf 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java +++ b/src/main/java/net/runelite/deob/deobfuscators/UnusedParameters.java @@ -255,15 +255,15 @@ public class UnusedParameters implements Deobfuscator @Override public void run(ClassGroup group) - { - Execution execution = new Execution(group); - execution.populateInitialMethods(); - execution.run(); - + { int count = 0; int[] i; do { + Execution execution = new Execution(group); + execution.populateInitialMethods(); + execution.run(); + i = checkParametersOnce(execution, group); count += i[0];