From b3e06c4ce61a75451cc1b172dbd26980477b0193 Mon Sep 17 00:00:00 2001 From: de4dot Date: Sat, 1 Dec 2012 02:12:13 +0100 Subject: [PATCH] Add options to disable renaming types, fields, etc --- de4dot.cui/CommandLineParser.cs | 15 +++++++++++++++ de4dot.cui/FilesDeobfuscator.cs | 24 ++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/de4dot.cui/CommandLineParser.cs b/de4dot.cui/CommandLineParser.cs index 42ce5233..a5134dce 100644 --- a/de4dot.cui/CommandLineParser.cs +++ b/de4dot.cui/CommandLineParser.cs @@ -120,6 +120,21 @@ namespace de4dot.cui { miscOptions.Add(new NoArgOption(null, "dont-rename", "Don't rename classes, methods, etc.", () => { filesOptions.RenameSymbols = false; })); + miscOptions.Add(new OneArgOption(null, "keep-names", "Don't rename n(amespaces), t(ypes), p(rops), e(vents), f(ields), m(ethods), a(rgs), g(enericparams). Can be combined, eg. efm", "flags", (val) => { + foreach (var c in val) { + switch (c) { + case 'n': filesOptions.RenameNamespaces = false; break; + case 't': filesOptions.RenameTypes = false; break; + case 'p': filesOptions.RenameProperties = false; break; + case 'e': filesOptions.RenameEvents = false; break; + case 'f': filesOptions.RenameFields = false; break; + case 'm': filesOptions.RenameMethods = false; break; + case 'a': filesOptions.RenameMethodArgs = false; break; + case 'g': filesOptions.RenameGenericParams = false; break; + default: throw new UserException(string.Format("Unrecognized --keep-names char: '{0}'", c)); + } + } + })); miscOptions.Add(new NoArgOption(null, "dont-restore-props", "Don't restore properties/events", () => { filesOptions.RestorePropsEvents = false; })); diff --git a/de4dot.cui/FilesDeobfuscator.cs b/de4dot.cui/FilesDeobfuscator.cs index f84dd0e2..972a60a9 100644 --- a/de4dot.cui/FilesDeobfuscator.cs +++ b/de4dot.cui/FilesDeobfuscator.cs @@ -38,6 +38,14 @@ namespace de4dot.cui { public IList Files { get; set; } public IList SearchDirs { get; set; } public bool DetectObfuscators { get; set; } + public bool RenameNamespaces { get; set; } + public bool RenameTypes { get; set; } + public bool RenameProperties { get; set; } + public bool RenameEvents { get; set; } + public bool RenameFields { get; set; } + public bool RenameMethods { get; set; } + public bool RenameMethodArgs { get; set; } + public bool RenameGenericParams { get; set; } public bool RenameSymbols { get; set; } public bool RestorePropsEvents { get; set; } public bool ControlFlowDeobfuscation { get; set; } @@ -53,6 +61,14 @@ namespace de4dot.cui { Files = new List(); SearchDirs = new List(); DefaultStringDecrypterMethods = new List(); + RenameNamespaces = true; + RenameTypes = true; + RenameProperties = true; + RenameEvents = true; + RenameFields = true; + RenameMethods = true; + RenameMethodArgs = true; + RenameGenericParams = true; RenameSymbols = true; RestorePropsEvents = true; ControlFlowDeobfuscation = true; @@ -369,6 +385,14 @@ namespace de4dot.cui { if (!options.RenameSymbols) return; var renamer = new Renamer(deobfuscatorContext, theFiles) { + RenameNamespaces = options.RenameNamespaces, + RenameTypes = options.RenameTypes, + RenameProperties = options.RenameProperties, + RenameEvents = options.RenameEvents, + RenameFields = options.RenameFields, + RenameMethods = options.RenameMethods, + RenameMethodArgs = options.RenameMethodArgs, + RenameGenericParams = options.RenameGenericParams, RestorePropertiesFromNames = options.RestorePropsEvents, RestoreEventsFromNames = options.RestorePropsEvents, };