From 30e29a52ab17e15208a27ef400cb8b37372684e0 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 26 Jul 2015 14:15:52 -0400 Subject: [PATCH] rename unique works --- pom.xml | 28 +++++++------ .../code/instructions/ANewArray.java | 5 ++- .../deob/deobfuscators/RenameUnique.java | 39 +++++++------------ 3 files changed, 34 insertions(+), 38 deletions(-) diff --git a/pom.xml b/pom.xml index 62fda7e646..e2e41c6a79 100644 --- a/pom.xml +++ b/pom.xml @@ -1,13 +1,17 @@ - - 4.0.0 - info.sigterm - deob - 0.0.1-SNAPSHOT - - - org.apache.commons - commons-collections4 - 4.0 - - + + 4.0.0 + info.sigterm + deob + 0.0.1-SNAPSHOT + + + org.apache.commons + commons-collections4 + 4.0 + + + + 1.7 + 1.7 + \ No newline at end of file diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ANewArray.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ANewArray.java index 06646121cd..8f97806551 100644 --- a/src/main/java/info/sigterm/deob/attributes/code/instructions/ANewArray.java +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ANewArray.java @@ -58,7 +58,8 @@ public class ANewArray extends Instruction @Override public void renameClass(ClassFile cf, String name) { - if (clazz.getName().equals(cf.getName())) - clazz = new Class(name); + info.sigterm.deob.signature.Type t = new info.sigterm.deob.signature.Type(clazz.getName()); + if (t.getType().equals("L" + cf.getName() + ";") || t.getType().equals(cf.getName())) + clazz = new Class(name, t.getArrayDims()); } } diff --git a/src/main/java/info/sigterm/deob/deobfuscators/RenameUnique.java b/src/main/java/info/sigterm/deob/deobfuscators/RenameUnique.java index e072808d6e..5fa9c388c3 100644 --- a/src/main/java/info/sigterm/deob/deobfuscators/RenameUnique.java +++ b/src/main/java/info/sigterm/deob/deobfuscators/RenameUnique.java @@ -14,6 +14,8 @@ import info.sigterm.deob.attributes.code.Instructions; import info.sigterm.deob.pool.Class; import info.sigterm.deob.signature.Signature; import info.sigterm.deob.signature.Type; +import java.util.HashSet; +import java.util.Set; public class RenameUnique implements Deobfuscator { @@ -100,49 +102,38 @@ public class RenameUnique implements Deobfuscator field.setName(name); } - private void findMethodDown(List list, ClassFile cf, Method method) + private void findMethod(List list, Set visited, ClassFile cf, Method method) { - if (cf == null) + if (cf == null || visited.contains(cf)) return; + visited.add(cf); + Method m = cf.findMethod(method.getNameAndType()); if (m != null && !m.isStatic()) list.add(m); - findMethodDown(list, cf.getParent(), method); + findMethod(list, visited, cf.getParent(), method); for (ClassFile inter : cf.getInterfaces().getMyInterfaces()) - findMethodDown(list, inter, method); - } - - private void findMethodUp(List list, ClassFile cf, Method method) - { - Method m = cf.findMethod(method.getNameAndType()); - if (m != null && !m.isStatic()) - list.add(m); - + findMethod(list, visited, inter, method); + for (ClassFile child : cf.getChildren()) - findMethodUp(list, child, method); + findMethod(list, visited, child, method); } private List getVirutalMethods(Method method) { List list = new ArrayList<>(); - list.add(method); - if (method.isStatic()) + { + list.add(method); return list; + } - ClassFile classOfMethod = method.getMethods().getClassFile(); - findMethodDown(list, classOfMethod.getParent(), method); - - for (ClassFile inter : classOfMethod.getInterfaces().getMyInterfaces()) - findMethodDown(list, inter, method); - - for (ClassFile child : classOfMethod.getChildren()) - findMethodUp(list, child, method); - + findMethod(list, new HashSet(), method.getMethods().getClassFile(), method); + return list; }