From bdb2efdb6bf2eee8396250e2600de0ba55bc897a Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 5 Feb 2022 20:23:44 +0000 Subject: [PATCH] fix(res): remove static caching map for xml renames (#1364) --- .../main/java/jadx/core/xmlgen/XmlDeobf.java | 41 +++++++------------ 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java b/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java index d5e6c134..b4104e47 100644 --- a/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java +++ b/jadx-core/src/main/java/jadx/core/xmlgen/XmlDeobf.java @@ -1,46 +1,33 @@ package jadx.core.xmlgen; -import java.util.HashMap; -import java.util.Map; - import org.jetbrains.annotations.Nullable; import jadx.core.dex.info.ClassInfo; -import jadx.core.dex.nodes.ClassNode; +import jadx.core.dex.instructions.args.ArgType; import jadx.core.dex.nodes.RootNode; /* - * modifies android:name attributes and xml tags which are old class names - * but were changed during deobfuscation + * Modifies android:name attributes and xml tags which were changed during deobfuscation */ public class XmlDeobf { - private static final Map DEOBF_MAP = new HashMap<>(); private XmlDeobf() { } @Nullable - public static String deobfClassName(RootNode rootNode, String potencialClassName, String packageName) { - potencialClassName = potencialClassName.replace('$', '.'); - if (packageName != null && potencialClassName.startsWith(".")) { - potencialClassName = packageName + potencialClassName; + public static String deobfClassName(RootNode root, String potentialClassName, String packageName) { + if (potentialClassName.indexOf('.') == -1) { + return null; } - return getNewClassName(rootNode, potencialClassName); - } - - private static String getNewClassName(RootNode rootNode, String old) { - if (DEOBF_MAP.isEmpty()) { - for (ClassNode classNode : rootNode.getClasses(true)) { - ClassInfo classInfo = classNode.getClassInfo(); - if (classInfo.hasAlias()) { - String oldName = classInfo.getFullName(); - String newName = classInfo.getAliasFullName(); - if (!oldName.equals(newName)) { - DEOBF_MAP.put(oldName, newName); - } - } - } + if (packageName != null && potentialClassName.startsWith(".")) { + potentialClassName = packageName + potentialClassName; + } + ArgType clsType = ArgType.object(potentialClassName); + ClassInfo classInfo = root.getInfoStorage().getCls(clsType); + if (classInfo == null) { + // unknown class reference + return null; } - return DEOBF_MAP.get(old); + return classInfo.getAliasFullName(); } } -- GitLab