diff --git a/de4dot.code/AssemblyModule.cs b/de4dot.code/AssemblyModule.cs index 527d6443..36e9c0ed 100644 --- a/de4dot.code/AssemblyModule.cs +++ b/de4dot.code/AssemblyModule.cs @@ -44,6 +44,8 @@ namespace de4dot.code { } ModuleDefMD setModule(ModuleDefMD newModule) { + if (module != null) + module.Dispose(); module = newModule; TheAssemblyResolver.Instance.addModule(module); module.EnableTypeDefFindCache = true; diff --git a/de4dot.code/IObfuscatedFile.cs b/de4dot.code/IObfuscatedFile.cs index e697401b..e47dc3c9 100644 --- a/de4dot.code/IObfuscatedFile.cs +++ b/de4dot.code/IObfuscatedFile.cs @@ -17,13 +17,14 @@ along with de4dot. If not, see . */ +using System; using System.Collections.Generic; using de4dot.code.deobfuscators; using dot10.DotNet; using de4dot.code.renamer; namespace de4dot.code { - public interface IObfuscatedFile { + public interface IObfuscatedFile : IDisposable { ModuleDefMD ModuleDefMD { get; } IDeobfuscator Deobfuscator { get; } IDeobfuscatorContext DeobfuscatorContext { get; set; } diff --git a/de4dot.code/ObfuscatedFile.cs b/de4dot.code/ObfuscatedFile.cs index 0d722141..4def00b3 100644 --- a/de4dot.code/ObfuscatedFile.cs +++ b/de4dot.code/ObfuscatedFile.cs @@ -778,5 +778,13 @@ namespace de4dot.code { void IDeobfuscatedFile.setDeobfuscator(IDeobfuscator deob) { this.deob = deob; } + + public void Dispose() { + deobfuscateCleanUp(); + if (module != null) + module.Dispose(); + module = null; + deob = null; + } } } diff --git a/de4dot.cui/FilesDeobfuscator.cs b/de4dot.cui/FilesDeobfuscator.cs index 90a831b3..f5f88514 100644 --- a/de4dot.cui/FilesDeobfuscator.cs +++ b/de4dot.cui/FilesDeobfuscator.cs @@ -85,6 +85,7 @@ namespace de4dot.cui { void detectObfuscators() { foreach (var file in loadAllFiles(true)) { removeModule(file.ModuleDefMD); + file.Dispose(); deobfuscatorContext.clear(); } } @@ -108,7 +109,7 @@ namespace de4dot.cui { Program.printStackTrace(ex, LoggerEvent.Verbose); } finally { - file.deobfuscateCleanUp(); + file.Dispose(); Logger.Instance.IndentLevel = oldIndentLevel; } } @@ -116,9 +117,17 @@ namespace de4dot.cui { void deobfuscateAll() { var allFiles = new List(loadAllFiles()); - deobfuscateAllFiles(allFiles); - rename(allFiles); - saveAllFiles(allFiles); + try { + deobfuscateAllFiles(allFiles); + rename(allFiles); + saveAllFiles(allFiles); + } + finally { + foreach (var file in allFiles) { + if (file != null) + file.Dispose(); + } + } } IEnumerable loadAllFiles() { @@ -310,6 +319,7 @@ namespace de4dot.cui { var obfuscatedFile = new ObfuscatedFile(fileOptions, options.ModuleContext, options.AssemblyClientFactory); if (add(obfuscatedFile, searchDir.SkipUnknownObfuscators, false)) return obfuscatedFile; + obfuscatedFile.Dispose(); return null; }