IDeobfuscator now implements IDisposable

This commit is contained in:
de4dot 2012-11-21 13:57:13 +01:00
parent 5b43e33a35
commit 8858205344
7 changed files with 42 additions and 12 deletions

View File

@ -40,7 +40,7 @@ namespace de4dot.code {
void deobfuscateEnd();
void deobfuscateCleanUp();
void load(IEnumerable<IDeobfuscator> deobfuscators);
void load(IList<IDeobfuscator> deobfuscators);
void save();
}
}

View File

@ -160,14 +160,22 @@ namespace de4dot.code {
return noExt + "-cleaned" + ext;
}
public void load(IEnumerable<IDeobfuscator> deobfuscators) {
loadModule(deobfuscators);
TheAssemblyResolver.Instance.addSearchDirectory(Utils.getDirName(Filename));
TheAssemblyResolver.Instance.addSearchDirectory(Utils.getDirName(NewFilename));
detectObfuscator(deobfuscators);
if (deob == null)
throw new ApplicationException("Could not detect obfuscator!");
initializeDeobfuscator();
public void load(IList<IDeobfuscator> deobfuscators) {
try {
loadModule(deobfuscators);
TheAssemblyResolver.Instance.addSearchDirectory(Utils.getDirName(Filename));
TheAssemblyResolver.Instance.addSearchDirectory(Utils.getDirName(NewFilename));
detectObfuscator(deobfuscators);
if (deob == null)
throw new ApplicationException("Could not detect obfuscator!");
initializeDeobfuscator();
}
finally {
foreach (var d in deobfuscators) {
if (d != deob && d != null)
d.Dispose();
}
}
}
void loadModule(IEnumerable<IDeobfuscator> deobfuscators) {
@ -793,6 +801,8 @@ namespace de4dot.code {
deobfuscateCleanUp();
if (module != null)
module.Dispose();
if (deob != null)
deob.Dispose();
module = null;
deob = null;
}

View File

@ -782,5 +782,13 @@ namespace de4dot.code.deobfuscators {
protected static int toInt32(bool b) {
return b ? 1 : 0;
}
public void Dispose() {
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing) {
}
}
}

View File

@ -52,7 +52,7 @@ namespace de4dot.code.deobfuscators {
RenameResourceKeys = 2,
}
public interface IDeobfuscator : INameChecker {
public interface IDeobfuscator : INameChecker, IDisposable {
string Type { get; }
string TypeLong { get; }
string Name { get; }

View File

@ -250,5 +250,11 @@ namespace de4dot.code.deobfuscators.MaxtoCode {
list.Add(stringDecrypter.Method.MDToken.ToInt32());
return list;
}
protected override void Dispose(bool disposing) {
if (disposing)
freePEImage();
base.Dispose(disposing);
}
}
}

View File

@ -614,5 +614,11 @@ namespace de4dot.code.deobfuscators.dotNET_Reactor.v4 {
break;
}
}
protected override void Dispose(bool disposing) {
if (disposing)
freePEImage();
base.Dispose(disposing);
}
}
}

View File

@ -162,7 +162,7 @@ namespace de4dot.cui {
public ModuleContext ModuleContext { get; set; }
public IEnumerable<IObfuscatedFile> PossibleFiles { get; set; }
public IEnumerable<SearchDir> SearchDirs { get; set; }
public Func<IEnumerable<IDeobfuscator>> CreateDeobfuscators { get; set; }
public Func<IList<IDeobfuscator>> CreateDeobfuscators { get; set; }
public DecrypterType? DefaultStringDecrypterType { get; set; }
public List<string> DefaultStringDecrypterMethods { get; set; }
public IAssemblyClientFactory AssemblyClientFactory { get; set; }
@ -358,7 +358,7 @@ namespace de4dot.cui {
file.save();
}
IEnumerable<IDeobfuscator> createDeobfuscators() {
IList<IDeobfuscator> createDeobfuscators() {
var list = new List<IDeobfuscator>(options.DeobfuscatorInfos.Count);
foreach (var info in options.DeobfuscatorInfos)
list.Add(info.createDeobfuscator());