diff --git a/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs b/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs index 4e679c1b..9d9e45c5 100644 --- a/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/DeepSea/Deobfuscator.cs @@ -266,7 +266,7 @@ done: } public override void deobfuscateEnd() { - if (options.RestoreFields) + if (options.RestoreFields && CanRemoveTypes) fieldsRestorer.cleanUp(); removeInlinedMethods(); diff --git a/de4dot.code/deobfuscators/DeobfuscatorBase.cs b/de4dot.code/deobfuscators/DeobfuscatorBase.cs index 2ae4a4b6..c9c3ad50 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorBase.cs @@ -89,6 +89,10 @@ namespace de4dot.code.deobfuscators { get { return false; } } + protected bool CanRemoveTypes { + get { return !Operations.KeepObfuscatorTypes && !KeepTypes; } + } + protected bool CanRemoveStringDecrypterType { get { return Operations.DecryptStrings != OpDecryptString.None && staticStringInliner.InlinedAllCalls; } } @@ -161,7 +165,7 @@ namespace de4dot.code.deobfuscators { } public virtual void deobfuscateEnd() { - if (!Operations.KeepObfuscatorTypes && !KeepTypes) { + if (CanRemoveTypes) { removeTypesWithInvalidBaseTypes(); deleteEmptyCctors();