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 06f0ddbee86705d814f6cba01df71ece126047be..0281822951127f9db06f151097c56bd2a1919276 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 518d9abc8e9eb2469f9293100e61b7df336f17a3..6b96efad4d869fd8240733a3a9af6748e5fdd67f 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; }