From a9251de1dd37f9abc0a15bf19f0efb12dd501228 Mon Sep 17 00:00:00 2001 From: Skylot Date: Sun, 19 Aug 2018 12:54:20 +0300 Subject: [PATCH] deobf: prevents overlaping of class names and packages (#335) --- .../main/java/jadx/core/deobf/Deobfuscator.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java index aa4a64df7..9480ee147 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -2,7 +2,9 @@ package jadx.core.deobf; import java.io.File; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.LinkedHashSet; import java.util.List; import java.util.Map; @@ -48,6 +50,7 @@ public class Deobfuscator { private final PackageNode rootPackage = new PackageNode(""); private final Set pkgSet = new TreeSet<>(); + private final Set reservedClsNames = new HashSet<>(); private final int maxLength; private final int minLength; @@ -87,6 +90,11 @@ public class Deobfuscator { } private void preProcess() { + for (DexNode dexNode : dexNodes) { + for (ClassNode cls : dexNode.getClasses()) { + Collections.addAll(reservedClsNames, cls.getPackage().split("\\.")); + } + } for (DexNode dexNode : dexNodes) { for (ClassNode cls : dexNode.getClasses()) { preProcessClass(cls); @@ -312,9 +320,11 @@ public class Deobfuscator { if (alias != null) { clsMap.put(classInfo, new DeobfClsInfo(this, cls, pkg, alias)); } else { - if (!clsMap.containsKey(classInfo) - && shouldRename(classInfo.getShortName())) { - makeClsAlias(cls); + if (!clsMap.containsKey(classInfo)) { + String clsShortName = classInfo.getShortName(); + if (shouldRename(clsShortName) || reservedClsNames.contains(clsShortName)) { + makeClsAlias(cls); + } } } for (ClassNode innerCls : cls.getInnerClasses()) {