From 33b8b41f2031c1f46b889f3e6942e24af98832df Mon Sep 17 00:00:00 2001 From: asie Date: Sat, 8 Dec 2018 12:16:47 +0100 Subject: fix #63 - make method inheritance lookup take into account access flags --- src/main/java/cuchaz/enigma/Deobfuscator.java | 2 ++ src/main/java/cuchaz/enigma/analysis/JarIndex.java | 19 +++++++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) (limited to 'src/main') diff --git a/src/main/java/cuchaz/enigma/Deobfuscator.java b/src/main/java/cuchaz/enigma/Deobfuscator.java index c199225..4a945cd 100644 --- a/src/main/java/cuchaz/enigma/Deobfuscator.java +++ b/src/main/java/cuchaz/enigma/Deobfuscator.java @@ -603,8 +603,10 @@ public class Deobfuscator { if (((MethodEntry) obfEntry).isConstructor()) { throw new IllegalArgumentException("Cannot rename constructors"); } + this.renamer.setMethodTreeName((MethodEntry) obfEntry, newName); } else if (obfEntry instanceof LocalVariableEntry) { + // TODO: Discern between arguments (propagate) and local vars (don't) this.renamer.setLocalVariableTreeName((LocalVariableEntry) obfEntry, newName); } else { throw new Error("Unknown entry desc: " + obfEntry.getClass().getName()); diff --git a/src/main/java/cuchaz/enigma/analysis/JarIndex.java b/src/main/java/cuchaz/enigma/analysis/JarIndex.java index e8bda8e..820ecbb 100644 --- a/src/main/java/cuchaz/enigma/analysis/JarIndex.java +++ b/src/main/java/cuchaz/enigma/analysis/JarIndex.java @@ -363,6 +363,11 @@ public class JarIndex { } public Set getRelatedMethodImplementations(MethodEntry obfMethodEntry) { + AccessFlags flags = getAccessFlags(obfMethodEntry); + if (flags.isPrivate() || flags.isStatic()) { + return Collections.singleton(obfMethodEntry); + } + Set methodEntries = Sets.newHashSet(); getRelatedMethodImplementations(methodEntries, getMethodInheritance(new DirectionalTranslator(entryPool), obfMethodEntry)); return methodEntries; @@ -375,8 +380,11 @@ public class JarIndex { } if (containsObfMethod(methodEntry)) { - // collect the entry - methodEntries.add(methodEntry); + AccessFlags flags = getAccessFlags(methodEntry); + if (!flags.isPrivate() && !flags.isStatic()) { + // collect the entry + methodEntries.add(methodEntry); + } } // look at bridge methods! @@ -400,8 +408,11 @@ public class JarIndex { private void getRelatedMethodImplementations(Set methodEntries, MethodImplementationsTreeNode node) { MethodEntry methodEntry = node.getMethodEntry(); if (containsObfMethod(methodEntry)) { - // collect the entry - methodEntries.add(methodEntry); + AccessFlags flags = getAccessFlags(methodEntry); + if (!flags.isPrivate() && !flags.isStatic()) { + // collect the entry + methodEntries.add(methodEntry); + } } // look at bridge methods! -- cgit v1.2.3