diff --git a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java index cc0b7cb22..01fb832eb 100644 --- a/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java +++ b/jadx-cli/src/main/java/jadx/cli/JadxCLIArgs.java @@ -64,6 +64,9 @@ public class JadxCLIArgs implements IJadxArgs { @Parameter(names = {"--deobf-rewrite-cfg"}, description = "force to save deobfuscation map") protected boolean deobfuscationForceSave = false; + @Parameter(names = {"--deobf-use-sourcename"}, description = "use source file name as class name alias") + protected boolean deobfuscationUseSourceNameAsAlias = false; + @Parameter(names = {"-h", "--help"}, description = "print this help", help = true) protected boolean printHelp = false; @@ -242,4 +245,9 @@ public class JadxCLIArgs implements IJadxArgs { public boolean isDeobfuscationForceSave() { return deobfuscationForceSave; } + + @Override + public boolean useSourceNameAsClassAlias() { + return deobfuscationUseSourceNameAsAlias; + } } diff --git a/jadx-core/src/main/java/jadx/api/DefaultJadxArgs.java b/jadx-core/src/main/java/jadx/api/DefaultJadxArgs.java index 3b922fcf8..c692d16ad 100644 --- a/jadx-core/src/main/java/jadx/api/DefaultJadxArgs.java +++ b/jadx-core/src/main/java/jadx/api/DefaultJadxArgs.java @@ -68,4 +68,9 @@ public class DefaultJadxArgs implements IJadxArgs { public boolean isDeobfuscationForceSave() { return false; } + + @Override + public boolean useSourceNameAsClassAlias() { + return false; + } } diff --git a/jadx-core/src/main/java/jadx/api/IJadxArgs.java b/jadx-core/src/main/java/jadx/api/IJadxArgs.java index c5bcfa34d..a0fbc0f72 100644 --- a/jadx-core/src/main/java/jadx/api/IJadxArgs.java +++ b/jadx-core/src/main/java/jadx/api/IJadxArgs.java @@ -28,4 +28,6 @@ public interface IJadxArgs { int getDeobfuscationMaxLength(); boolean isDeobfuscationForceSave(); + + boolean useSourceNameAsClassAlias(); } 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 16ce67f7c..76bdb1053 100644 --- a/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java +++ b/jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java @@ -45,6 +45,8 @@ public class Deobfuscator { private final int maxLength; private final int minLength; + private final boolean useSourceNameAsAlias; + private int pkgIndex = 0; private int clsIndex = 0; private int fldIndex = 0; @@ -56,6 +58,7 @@ public class Deobfuscator { this.minLength = args.getDeobfuscationMinLength(); this.maxLength = args.getDeobfuscationMaxLength(); + this.useSourceNameAsAlias = args.useSourceNameAsClassAlias(); this.deobfPresets = new DeobfPresets(this, deobfMapFile); } @@ -212,7 +215,12 @@ public class Deobfuscator { private String makeClsAlias(ClassNode cls) { ClassInfo classInfo = cls.getClassInfo(); - String alias = getAliasFromSourceFile(cls); + String alias = null; + + if (this.useSourceNameAsAlias) { + alias = getAliasFromSourceFile(cls); + } + if (alias == null) { String clsName = classInfo.getShortName(); alias = String.format("C%04d%s", clsIndex++, makeName(clsName)); diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java index 82f0d4d02..8b13d6434 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettings.java @@ -132,6 +132,10 @@ public class JadxSettings extends JadxCLIArgs { this.deobfuscationForceSave = deobfuscationForceSave; } + public void setUseSourceNameAsClassAlias(boolean useSourceNameAsAlias) { + this.deobfuscationUseSourceNameAsAlias = useSourceNameAsAlias; + } + public Font getFont() { if (fontStr.isEmpty()) { return DEFAULT_FONT; diff --git a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java index bc13a73cb..37c405f91 100644 --- a/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java +++ b/jadx-gui/src/main/java/jadx/gui/settings/JadxSettingsWindow.java @@ -141,11 +141,21 @@ public class JadxSettingsWindow extends JDialog { } }); + JCheckBox deobfSourceAlias = new JCheckBox(); + deobfSourceAlias.setSelected(settings.useSourceNameAsClassAlias()); + deobfSourceAlias.addItemListener(new ItemListener() { + public void itemStateChanged(ItemEvent e) { + settings.setUseSourceNameAsClassAlias(e.getStateChange() == ItemEvent.SELECTED); + needReload(); + } + }); + SettingsGroup deobfGroup = new SettingsGroup(NLS.str("preferences.deobfuscation")); deobfGroup.addRow(NLS.str("preferences.deobfuscation_on"), deobfOn); deobfGroup.addRow(NLS.str("preferences.deobfuscation_force"), deobfForce); deobfGroup.addRow(NLS.str("preferences.deobfuscation_min_len"), minLen); deobfGroup.addRow(NLS.str("preferences.deobfuscation_max_len"), maxLen); + deobfGroup.addRow(NLS.str("preferences.deobfuscation_source_alias"), deobfSourceAlias); deobfGroup.end(); return deobfGroup; } diff --git a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties index 69148c3cd..958db49cd 100644 --- a/jadx-gui/src/main/resources/i18n/Messages_en_US.properties +++ b/jadx-gui/src/main/resources/i18n/Messages_en_US.properties @@ -62,6 +62,7 @@ preferences.deobfuscation_on=Enable deobfuscation preferences.deobfuscation_force=Force rewrite deobfuscation map file preferences.deobfuscation_min_len=Minimum name length preferences.deobfuscation_max_len=Maximum name length +preferences.deobfuscation_source_alias=Use source file name as class name alias preferences.save=Save preferences.cancel=Cancel