Restore field types and add option to disable it

This commit is contained in:
de4dot 2011-10-31 19:41:38 +01:00
parent 0ac072cf7b
commit ed625e256d

View File

@ -28,11 +28,13 @@ namespace de4dot.deobfuscators.dotNET_Reactor {
class DeobfuscatorInfo : DeobfuscatorInfoBase { class DeobfuscatorInfo : DeobfuscatorInfoBase {
BoolOption decryptMethods; BoolOption decryptMethods;
BoolOption decryptBools; BoolOption decryptBools;
BoolOption restoreTypes;
public DeobfuscatorInfo() public DeobfuscatorInfo()
: base("dr") { : base("dr") {
decryptMethods = new BoolOption(null, makeArgName("methods"), "Decrypt methods", true); decryptMethods = new BoolOption(null, makeArgName("methods"), "Decrypt methods", true);
decryptBools = new BoolOption(null, makeArgName("bools"), "Decrypt booleans", true); decryptBools = new BoolOption(null, makeArgName("bools"), "Decrypt booleans", true);
restoreTypes = new BoolOption(null, makeArgName("types"), "Restore types (object -> real type)", true);
} }
internal static string ObfuscatorType { internal static string ObfuscatorType {
@ -48,6 +50,7 @@ namespace de4dot.deobfuscators.dotNET_Reactor {
ValidNameRegex = validNameRegex.get(), ValidNameRegex = validNameRegex.get(),
DecryptMethods = decryptMethods.get(), DecryptMethods = decryptMethods.get(),
DecryptBools = decryptBools.get(), DecryptBools = decryptBools.get(),
RestoreTypes = restoreTypes.get(),
}); });
} }
@ -55,6 +58,7 @@ namespace de4dot.deobfuscators.dotNET_Reactor {
return new List<Option>() { return new List<Option>() {
decryptMethods, decryptMethods,
decryptBools, decryptBools,
restoreTypes,
}; };
} }
} }
@ -73,6 +77,7 @@ namespace de4dot.deobfuscators.dotNET_Reactor {
internal class Options : OptionsBase { internal class Options : OptionsBase {
public bool DecryptMethods { get; set; } public bool DecryptMethods { get; set; }
public bool DecryptBools { get; set; } public bool DecryptBools { get; set; }
public bool RestoreTypes { get; set; }
} }
public override string Type { public override string Type {
@ -315,6 +320,8 @@ namespace de4dot.deobfuscators.dotNET_Reactor {
} }
public override void deobfuscateEnd() { public override void deobfuscateEnd() {
if (options.RestoreTypes)
new TypesRestorer(module).deobfuscate();
base.deobfuscateEnd(); base.deobfuscateEnd();
} }