From 8dd76420c80ffd58356943a31041be727c019f2f Mon Sep 17 00:00:00 2001 From: Skylot Date: Sat, 2 Jan 2021 22:13:04 +0300 Subject: [PATCH] fix(deobf): complete disable rename if all rename options unchecked (#1076) --- .../java/jadx/core/deobf/Deobfuscator.java | 3 +- .../jadx/core/dex/visitors/RenameVisitor.java | 25 ++++++----- .../deobf/a/TestNegativeRenameCondition.java | 43 +++++++++++++++++++ 3 files changed, 59 insertions(+), 12 deletions(-) create mode 100644 jadx-core/src/test/java/jadx/tests/integration/deobf/a/TestNegativeRenameCondition.java 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 61d01f3f..6289f0d1 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -313,7 +313,8 @@ public class Deobfuscator { } else { if (!clsMap.containsKey(classInfo)) { String clsShortName = classInfo.getShortName(); - boolean badName = shouldRename(clsShortName) || reservedClsNames.contains(clsShortName); + boolean badName = shouldRename(clsShortName) + || (args.isRenameValid() && reservedClsNames.contains(clsShortName)); makeClsAlias(cls, badName); } } 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 bbb0b532..0c0a6b4f 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 @@ -188,17 +188,20 @@ public class RenameVisitor extends AbstractVisitor { mth.addAttr(new RenameReasonAttr(mth, notValid, notPrintable)); } } - Set names = new HashSet<>(methods.size()); - for (MethodNode mth : methods) { - AccessInfo accessFlags = mth.getAccessFlags(); - if (accessFlags.isBridge() || accessFlags.isSynthetic() - || mth.contains(AFlag.DONT_GENERATE) /* this flag not set yet */) { - continue; - } - String signature = mth.getMethodInfo().makeSignature(true, false); - if (!names.add(signature)) { - deobfuscator.forceRenameMethod(mth); - mth.addAttr(new RenameReasonAttr("collision with other method in class")); + // Rename methods with same signature + if (args.isRenameValid()) { + Set names = new HashSet<>(methods.size()); + for (MethodNode mth : methods) { + AccessInfo accessFlags = mth.getAccessFlags(); + if (accessFlags.isBridge() || accessFlags.isSynthetic() + || mth.contains(AFlag.DONT_GENERATE) /* this flag not set yet */) { + continue; + } + String signature = mth.getMethodInfo().makeSignature(true, false); + if (!names.add(signature)) { + deobfuscator.forceRenameMethod(mth); + mth.addAttr(new RenameReasonAttr("collision with other method in class")); + } } } } diff --git a/jadx-core/src/test/java/jadx/tests/integration/deobf/a/TestNegativeRenameCondition.java b/jadx-core/src/test/java/jadx/tests/integration/deobf/a/TestNegativeRenameCondition.java new file mode 100644 index 00000000..50a7377a --- /dev/null +++ b/jadx-core/src/test/java/jadx/tests/integration/deobf/a/TestNegativeRenameCondition.java @@ -0,0 +1,43 @@ +package jadx.tests.integration.deobf.a; + +import java.util.Collections; + +import org.junit.jupiter.api.Test; + +import jadx.tests.api.IntegrationTest; + +import static jadx.tests.api.utils.assertj.JadxAssertions.assertThat; + +public class TestNegativeRenameCondition extends IntegrationTest { + + public static class TestCls { + + @SuppressWarnings("checkstyle:TypeName") + public interface a { + + @SuppressWarnings("checkstyle:MethodName") + void a(); + } + + public void test(a a) { + a.a(); + } + } + + @Test + public void test() { + noDebugInfo(); + enableDeobfuscation(); + // disable rename by length + args.setDeobfuscationMinLength(0); + args.setDeobfuscationMaxLength(999); + // disable all renaming options + args.setRenameFlags(Collections.emptySet()); + + assertThat(getClassNode(TestCls.class)) + .code() + .doesNotContain("renamed from") + .containsOne("package jadx.tests.integration.deobf.a;") + .containsOne("public interface a {"); + } +} -- GitLab