From e4a5891a4437ff73c461571d1454e6cbbd4facac Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Wed, 5 Apr 2017 19:56:10 +0100 Subject: Rebuild innerclass method names. --- src/main/java/cuchaz/enigma/Deobfuscator.java | 52 +++++++++++++++------------ 1 file changed, 30 insertions(+), 22 deletions(-) (limited to 'src/main/java/cuchaz/enigma/Deobfuscator.java') diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index 4e4a54f..1e99af2 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java @@ -330,30 +330,11 @@ public class Deobfuscator { progress.init(getMappings().classes().size() * 3, "Rebuilding method names"); for (ClassMapping classMapping : Lists.newArrayList(getMappings().classes())) { - Map renameEntries = new HashMap<>(); - progress.onProgress(i++, classMapping.getDeobfName()); - - for (MethodMapping methodMapping : Lists.newArrayList(classMapping.methods())) { - ClassEntry classObfEntry = classMapping.getObfEntry(); - BehaviorEntry obfEntry = methodMapping.getObfEntry(classObfEntry); - - if (isBehaviorProvider(classObfEntry, obfEntry)) { - if (hasDeobfuscatedName(obfEntry) && !(obfEntry instanceof ConstructorEntry) - && !(methodMapping.getDeobfName().equals(methodMapping.getObfName()))) { - renameEntries.put(obfEntry, methodMapping.getDeobfName()); - } - - for (ArgumentMapping argumentMapping : Lists.newArrayList(methodMapping.arguments())) { - Entry argObfEntry = argumentMapping.getObfEntry(obfEntry); - if (hasDeobfuscatedName(argObfEntry)) { - renameEntries.put(argObfEntry, deobfuscateEntry(argObfEntry).getName()); - } - } - } + rebuildMethodNames(classMapping, renameClassMap); + for(ClassMapping innerClass : classMapping.innerClasses()){ + rebuildMethodNames(innerClass, renameClassMap); } - - renameClassMap.put(classMapping, renameEntries); } for (Map.Entry> renameClassMapEntry : renameClassMap.entrySet()) { @@ -383,6 +364,33 @@ public class Deobfuscator { } } + private void rebuildMethodNames(ClassMapping classMapping, Map> renameClassMap){ + Map renameEntries = new HashMap<>(); + + for (MethodMapping methodMapping : Lists.newArrayList(classMapping.methods())) { + ClassEntry classObfEntry = classMapping.getObfEntry(); + BehaviorEntry obfEntry = methodMapping.getObfEntry(classObfEntry); + + if (isBehaviorProvider(classObfEntry, obfEntry)) { + if (hasDeobfuscatedName(obfEntry) && !(obfEntry instanceof ConstructorEntry) + && !(methodMapping.getDeobfName().equals(methodMapping.getObfName()))) { + renameEntries.put(obfEntry, methodMapping.getDeobfName()); + } + + for (ArgumentMapping argumentMapping : Lists.newArrayList(methodMapping.arguments())) { + Entry argObfEntry = argumentMapping.getObfEntry(obfEntry); + if (hasDeobfuscatedName(argObfEntry)) { + renameEntries.put(argObfEntry, deobfuscateEntry(argObfEntry).getName()); + } + } + } + } + + renameClassMap.put(classMapping, renameEntries); + } + + + public void writeJar(File out, ProgressListener progress) { transformJar(out, progress, createTypeLoader()::transformClass); } -- cgit v1.2.3