Add preserveTokensAndTypes()

This commit is contained in:
de4dot 2012-12-14 16:50:06 +01:00
parent 63f1ec4f93
commit e8a9c0675a
2 changed files with 16 additions and 7 deletions

View File

@ -51,6 +51,8 @@ namespace de4dot.code.deobfuscators {
MethodCallRemover methodCallRemover = new MethodCallRemover(); MethodCallRemover methodCallRemover = new MethodCallRemover();
byte[] moduleBytes; byte[] moduleBytes;
protected InitializedDataCreator initializedDataCreator; protected InitializedDataCreator initializedDataCreator;
bool keepTypes;
MetaDataFlags? mdFlags;
protected byte[] ModuleBytes { protected byte[] ModuleBytes {
get { return moduleBytes; } get { return moduleBytes; }
@ -78,7 +80,7 @@ namespace de4dot.code.deobfuscators {
public DecrypterType DefaultDecrypterType { get; set; } public DecrypterType DefaultDecrypterType { get; set; }
public virtual MetaDataFlags MetaDataFlags { public virtual MetaDataFlags MetaDataFlags {
get { return Operations.MetaDataFlags; } get { return mdFlags ?? Operations.MetaDataFlags; }
} }
public abstract string Type { get; } public abstract string Type { get; }
@ -89,8 +91,9 @@ namespace de4dot.code.deobfuscators {
get { return false; } get { return false; }
} }
protected virtual bool KeepTypes { protected bool KeepTypes {
get { return false; } get { return keepTypes; }
set { keepTypes = value; }
} }
protected bool CanRemoveTypes { protected bool CanRemoveTypes {
@ -129,6 +132,15 @@ namespace de4dot.code.deobfuscators {
initializedDataCreator = new InitializedDataCreator(module); 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) { protected virtual bool checkValidName(string name) {
return optionsBase.ValidNameRegex.isMatch(name); return optionsBase.ValidNameRegex.isMatch(name);
} }

View File

@ -63,12 +63,9 @@ namespace de4dot.code.deobfuscators.Unknown {
get { return obfuscatorName ?? "Unknown Obfuscator"; } get { return obfuscatorName ?? "Unknown Obfuscator"; }
} }
protected override bool KeepTypes {
get { return true; }
}
internal Deobfuscator(Options options) internal Deobfuscator(Options options)
: base(options) { : base(options) {
KeepTypes = true;
} }
void setName(string name) { void setName(string name) {