From ab4721a8b321e5714bdc9c50fe8478747cd5e467 Mon Sep 17 00:00:00 2001 From: Ahmed Ashour Date: Tue, 9 Apr 2019 16:39:59 +0200 Subject: [PATCH] fix: don't rename R class in deobfuscation (#572) (PR #573) --- .../java/jadx/core/deobf/Deobfuscator.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) 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 a5e69067a..4a85a69d7 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -226,6 +226,9 @@ public class Deobfuscator { } private void processClass(ClassNode cls) { + if (isR(cls.getParentClass())) { + return; + } ClassInfo clsInfo = cls.getClassInfo(); String fullName = getClassFullName(clsInfo); if (!fullName.equals(clsInfo.getFullName())) { @@ -559,4 +562,27 @@ public class Deobfuscator { public PackageNode getRootPackage() { return rootPackage; } + + private static boolean isR(ClassNode cls) { + if (!cls.getClassInfo().getShortName().equals("R")) { + return false; + } + if (!cls.getMethods().isEmpty() || !cls.getFields().isEmpty()) { + return false; + } + for (ClassNode inner : cls.getInnerClasses()) { + for (MethodNode m : inner.getMethods()) { + if (!m.getMethodInfo().isConstructor() && !m.getMethodInfo().isClassInit()) { + return false; + } + } + for (FieldNode field : cls.getFields()) { + ArgType type = field.getType(); + if (type != ArgType.INT && (!type.isArray() || type.getArrayElement() != ArgType.INT)) { + return false; + } + } + } + return true; + } }