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;
}