diff --git a/src/main/java/info/sigterm/deob/Deob.java b/src/main/java/info/sigterm/deob/Deob.java index 7b4774e6d7..ac2ac68459 100644 --- a/src/main/java/info/sigterm/deob/Deob.java +++ b/src/main/java/info/sigterm/deob/Deob.java @@ -42,6 +42,8 @@ public class Deob long start = System.currentTimeMillis(); ClassGroup group = loadJar(args[0]); + + new RenameUnique().run(group); // remove except RuntimeException new RuntimeExceptions().run(group); @@ -68,8 +70,6 @@ public class Deob new UnusedFields().run(group); //new ModularArithmeticDeobfuscation().run(group); - - new RenameUnique().run(group); saveJar(group, args[1]); @@ -77,6 +77,11 @@ public class Deob System.out.println("Done in " + ((end - start) / 1000L) + "s"); } + public static boolean isObfuscated(String name) + { + return name.startsWith("method") || name.startsWith("vmethod") || name.startsWith("field") || name.startsWith("class"); + } + private static ClassGroup loadJar(String jarfile) throws IOException { ClassGroup group = new ClassGroup(); diff --git a/src/main/java/info/sigterm/deob/deobfuscators/UnusedMethods.java b/src/main/java/info/sigterm/deob/deobfuscators/UnusedMethods.java index fee6bed285..63752e0aa5 100644 --- a/src/main/java/info/sigterm/deob/deobfuscators/UnusedMethods.java +++ b/src/main/java/info/sigterm/deob/deobfuscators/UnusedMethods.java @@ -2,6 +2,7 @@ package info.sigterm.deob.deobfuscators; import info.sigterm.deob.ClassFile; import info.sigterm.deob.ClassGroup; +import info.sigterm.deob.Deob; import info.sigterm.deob.Deobfuscator; import info.sigterm.deob.Method; import info.sigterm.deob.execution.Execution; @@ -24,9 +25,7 @@ public class UnusedMethods implements Deobfuscator { for (Method m : new ArrayList<>(cf.getMethods().getMethods())) { - // assume obfuscated names are <= 2 chars - // constructors can be unused, too - if (m.getName().length() > 2 && !m.getName().equals("")) + if (!Deob.isObfuscated(m.getName())) continue; if (!execution.methods.contains(m)) diff --git a/src/main/java/info/sigterm/deob/deobfuscators/UnusedParameters.java b/src/main/java/info/sigterm/deob/deobfuscators/UnusedParameters.java index 1df8130a61..1ded55bd5b 100644 --- a/src/main/java/info/sigterm/deob/deobfuscators/UnusedParameters.java +++ b/src/main/java/info/sigterm/deob/deobfuscators/UnusedParameters.java @@ -2,6 +2,7 @@ package info.sigterm.deob.deobfuscators; import info.sigterm.deob.ClassFile; import info.sigterm.deob.ClassGroup; +import info.sigterm.deob.Deob; import info.sigterm.deob.Deobfuscator; import info.sigterm.deob.Method; import info.sigterm.deob.attributes.Code; @@ -206,7 +207,7 @@ public class UnusedParameters implements Deobfuscator { for (Method m : cf.getMethods().getMethods()) { - if (done.contains(m) || m.getName().length() > 2) // ctors not uniquely renamed. overriding jre methods can't just remove a parameter + if (done.contains(m) || !Deob.isObfuscated(m.getName())) continue; int offset = m.isStatic() ? 0 : 1; diff --git a/src/main/java/info/sigterm/deob/execution/Execution.java b/src/main/java/info/sigterm/deob/execution/Execution.java index 29a3966986..5f3a71ca08 100644 --- a/src/main/java/info/sigterm/deob/execution/Execution.java +++ b/src/main/java/info/sigterm/deob/execution/Execution.java @@ -2,6 +2,7 @@ package info.sigterm.deob.execution; import info.sigterm.deob.ClassFile; import info.sigterm.deob.ClassGroup; +import info.sigterm.deob.Deob; import info.sigterm.deob.Method; import java.util.ArrayList; @@ -28,8 +29,7 @@ public class Execution { for (Method m : cf.getMethods().getMethods()) { - // ob'd names seem to be <= 2 - if (m.getName().length() > 2) + if (!Deob.isObfuscated(m.getName())) { addMethod(m); // I guess this method name is overriding a jre interface (init, run, ?). }