From 31a02a70a0469fd881c5de646b7f10c96a516803 Mon Sep 17 00:00:00 2001 From: Skylot Date: Fri, 10 May 2019 22:36:07 +0300 Subject: [PATCH] fix: rename class if all chars not printable (#622) --- .../core/dex/attributes/nodes/RenameReasonAttr.java | 4 ++-- .../java/jadx/core/dex/visitors/RenameVisitor.java | 11 +++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java b/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java index 06f0ddbee..028182295 100644 --- a/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java +++ b/jadx-core/src/main/java/jadx/core/dex/attributes/nodes/RenameReasonAttr.java @@ -35,11 +35,11 @@ public class RenameReasonAttr implements IAttribute { } } - private RenameReasonAttr notValid() { + public RenameReasonAttr notValid() { return append("not valid java name"); } - private RenameReasonAttr notPrintable() { + public RenameReasonAttr notPrintable() { return append("contains not printable characters"); } diff --git a/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java b/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java index 518d9abc8..6b96efad4 100644 --- a/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java +++ b/jadx-core/src/main/java/jadx/core/dex/visitors/RenameVisitor.java @@ -79,6 +79,13 @@ public class RenameVisitor extends AbstractVisitor { String clsName = classInfo.getAliasShortName(); String newShortName = fixClsShortName(args, clsName); + if (newShortName == null) { + // rename failed, use deobfuscator + String deobfName = deobfuscator.getClsAlias(cls); + classInfo.changeShortName(deobfName); + cls.addAttr(new RenameReasonAttr(cls).notPrintable()); + return; + } if (!newShortName.equals(clsName)) { classInfo.changeShortName(newShortName); cls.addAttr(new RenameReasonAttr(cls).append("invalid class name")); @@ -104,6 +111,7 @@ public class RenameVisitor extends AbstractVisitor { } } + @Nullable private static String fixClsShortName(JadxArgs args, String clsName) { char firstChar = clsName.charAt(0); boolean renameValid = args.isRenameValid(); @@ -116,6 +124,9 @@ public class RenameVisitor extends AbstractVisitor { String cleanClsName = args.isRenamePrintable() ? NameMapper.removeInvalidChars(clsName, "C") : clsName; + if (cleanClsName.isEmpty()) { + return null; + } if (renameValid && !NameMapper.isValidIdentifier(cleanClsName)) { return 'C' + cleanClsName; }