Initialize loaded modules' module context

This commit is contained in:
de4dot 2012-11-04 20:06:58 +01:00
parent d5838aa6c2
commit 6a8e8dcb78
5 changed files with 15 additions and 9 deletions

View File

@ -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() {

View File

@ -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();

View File

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

View File

@ -33,6 +33,7 @@ namespace de4dot.cui {
IDeobfuscatorContext deobfuscatorContext = new DeobfuscatorContext();
public class Options {
public ModuleContext ModuleContext { get; set; }
public IList<IDeobfuscatorInfo> DeobfuscatorInfos { get; set; }
public IList<IObfuscatedFile> Files { get; set; }
public IList<SearchDir> 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<IDeobfuscatorInfo>();
Files = new List<IObfuscatedFile>();
SearchDirs = new List<SearchDir>();
@ -125,6 +127,7 @@ namespace de4dot.cui {
IEnumerable<IObfuscatedFile> 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<string, bool> visitedDirectory = new Dictionary<string, bool>(StringComparer.OrdinalIgnoreCase);
public class Options {
public ModuleContext ModuleContext { get; set; }
public IEnumerable<IObfuscatedFile> PossibleFiles { get; set; }
public IEnumerable<SearchDir> SearchDirs { get; set; }
public Func<IEnumerable<IDeobfuscator>> 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;

2
dot10

@ -1 +1 @@
Subproject commit 9c166daff7f705cda7c4cea5de70b23030b7c54a
Subproject commit e532b444e4f3fbf7a84702d3fc30063d4973790f