diff --git a/de4dot.code/AssemblyModule.cs b/de4dot.code/AssemblyModule.cs index bb2becab..4e1a273e 100644 --- a/de4dot.code/AssemblyModule.cs +++ b/de4dot.code/AssemblyModule.cs @@ -28,17 +28,19 @@ namespace de4dot.code { class AssemblyModule { string filename; ModuleDefMD module; + ModuleContext moduleContext; - public AssemblyModule(string filename) { + public AssemblyModule(string filename, ModuleContext moduleContext) { this.filename = Utils.getFullPath(filename); + this.moduleContext = moduleContext; } public ModuleDefMD load() { - return setModule(ModuleDefMD.Load(filename)); + return setModule(ModuleDefMD.Load(filename, moduleContext)); } public ModuleDefMD load(byte[] fileData) { - return setModule(ModuleDefMD.Load(fileData)); + return setModule(ModuleDefMD.Load(fileData, moduleContext)); } ModuleDefMD setModule(ModuleDefMD newModule) { @@ -59,7 +61,7 @@ namespace de4dot.code { public ModuleDefMD reload(byte[] newModuleData, DumpedMethods dumpedMethods) { TheAssemblyResolver.Instance.removeModule(module); //TODO: Use dumped methods - return setModule(ModuleDefMD.Load(newModuleData)); + return setModule(ModuleDefMD.Load(newModuleData, moduleContext)); } public override string ToString() { diff --git a/de4dot.code/ObfuscatedFile.cs b/de4dot.code/ObfuscatedFile.cs index 701e2cc3..207e4b03 100644 --- a/de4dot.code/ObfuscatedFile.cs +++ b/de4dot.code/ObfuscatedFile.cs @@ -132,12 +132,12 @@ namespace de4dot.code { set { deobfuscatorContext = value; } } - public ObfuscatedFile(Options options, IAssemblyClientFactory assemblyClientFactory) { + public ObfuscatedFile(Options options, ModuleContext moduleContext, IAssemblyClientFactory assemblyClientFactory) { this.assemblyClientFactory = assemblyClientFactory; this.options = options; userStringDecrypterMethods = options.StringDecrypterMethods.Count > 0; options.Filename = Utils.getFullPath(options.Filename); - assemblyModule = new AssemblyModule(options.Filename); + assemblyModule = new AssemblyModule(options.Filename, moduleContext); if (options.NewFilename == null) options.NewFilename = getDefaultNewFilename(); diff --git a/de4dot.cui/CommandLineParser.cs b/de4dot.cui/CommandLineParser.cs index 81dc59f1..71aab070 100644 --- a/de4dot.cui/CommandLineParser.cs +++ b/de4dot.cui/CommandLineParser.cs @@ -254,7 +254,7 @@ namespace de4dot.cui { void addFile() { if (newFileOptions == null) return; - files.Add(new ObfuscatedFile(newFileOptions, filesOptions.AssemblyClientFactory)); + files.Add(new ObfuscatedFile(newFileOptions, filesOptions.ModuleContext, filesOptions.AssemblyClientFactory)); newFileOptions = null; } diff --git a/de4dot.cui/FilesDeobfuscator.cs b/de4dot.cui/FilesDeobfuscator.cs index a53c2bb6..4a6c31da 100644 --- a/de4dot.cui/FilesDeobfuscator.cs +++ b/de4dot.cui/FilesDeobfuscator.cs @@ -33,6 +33,7 @@ namespace de4dot.cui { IDeobfuscatorContext deobfuscatorContext = new DeobfuscatorContext(); public class Options { + public ModuleContext ModuleContext { get; set; } public IList DeobfuscatorInfos { get; set; } public IList Files { get; set; } public IList SearchDirs { get; set; } @@ -47,6 +48,7 @@ namespace de4dot.cui { public IAssemblyClientFactory AssemblyClientFactory { get; set; } public Options() { + ModuleContext = new ModuleContext(TheAssemblyResolver.Instance); DeobfuscatorInfos = new List(); Files = new List(); SearchDirs = new List(); @@ -125,6 +127,7 @@ namespace de4dot.cui { IEnumerable loadAllFiles(bool onlyScan) { var loader = new DotNetFileLoader(new DotNetFileLoader.Options { + ModuleContext = options.ModuleContext, PossibleFiles = options.Files, SearchDirs = options.SearchDirs, CreateDeobfuscators = () => createDeobfuscators(), @@ -147,6 +150,7 @@ namespace de4dot.cui { Dictionary visitedDirectory = new Dictionary(StringComparer.OrdinalIgnoreCase); public class Options { + public ModuleContext ModuleContext { get; set; } public IEnumerable PossibleFiles { get; set; } public IEnumerable SearchDirs { get; set; } public Func> CreateDeobfuscators { get; set; } @@ -303,7 +307,7 @@ namespace de4dot.cui { throw new UserException(string.Format("Input and output filename is the same: {0}", fileOptions.Filename)); } - var obfuscatedFile = new ObfuscatedFile(fileOptions, options.AssemblyClientFactory); + var obfuscatedFile = new ObfuscatedFile(fileOptions, options.ModuleContext, options.AssemblyClientFactory); if (add(obfuscatedFile, searchDir.SkipUnknownObfuscators, false)) return obfuscatedFile; return null; diff --git a/dot10 b/dot10 index 9c166daf..e532b444 160000 --- a/dot10 +++ b/dot10 @@ -1 +1 @@ -Subproject commit 9c166daff7f705cda7c4cea5de70b23030b7c54a +Subproject commit e532b444e4f3fbf7a84702d3fc30063d4973790f