diff --git a/de4dot.code/deobfuscators/DeobfuscatorBase.cs b/de4dot.code/deobfuscators/DeobfuscatorBase.cs index f52ce371..c53cd3f2 100644 --- a/de4dot.code/deobfuscators/DeobfuscatorBase.cs +++ b/de4dot.code/deobfuscators/DeobfuscatorBase.cs @@ -51,6 +51,8 @@ namespace de4dot.code.deobfuscators { MethodCallRemover methodCallRemover = new MethodCallRemover(); byte[] moduleBytes; protected InitializedDataCreator initializedDataCreator; + bool keepTypes; + MetaDataFlags? mdFlags; protected byte[] ModuleBytes { get { return moduleBytes; } @@ -78,7 +80,7 @@ namespace de4dot.code.deobfuscators { public DecrypterType DefaultDecrypterType { get; set; } public virtual MetaDataFlags MetaDataFlags { - get { return Operations.MetaDataFlags; } + get { return mdFlags ?? Operations.MetaDataFlags; } } public abstract string Type { get; } @@ -89,8 +91,9 @@ namespace de4dot.code.deobfuscators { get { return false; } } - protected virtual bool KeepTypes { - get { return false; } + protected bool KeepTypes { + get { return keepTypes; } + set { keepTypes = value; } } protected bool CanRemoveTypes { @@ -129,6 +132,15 @@ namespace de4dot.code.deobfuscators { initializedDataCreator = new InitializedDataCreator(module); } + protected void preserveTokensAndTypes() { + keepTypes = true; + mdFlags = Operations.MetaDataFlags; + mdFlags |= MetaDataFlags.PreserveRids | + MetaDataFlags.PreserveUSOffsets | + MetaDataFlags.PreserveBlobOffsets | + MetaDataFlags.PreserveExtraSignatureData; + } + protected virtual bool checkValidName(string name) { return optionsBase.ValidNameRegex.isMatch(name); } diff --git a/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs b/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs index 8cf49820..10d31cdd 100644 --- a/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs +++ b/de4dot.code/deobfuscators/Unknown/Deobfuscator.cs @@ -63,12 +63,9 @@ namespace de4dot.code.deobfuscators.Unknown { get { return obfuscatorName ?? "Unknown Obfuscator"; } } - protected override bool KeepTypes { - get { return true; } - } - internal Deobfuscator(Options options) : base(options) { + KeepTypes = true; } void setName(string name) {