Netmodules are better supported now
This commit is contained in:
parent
15c715e312
commit
d2b621b5b3
|
@ -49,7 +49,7 @@ namespace AssemblyData.methodsrewriter {
|
||||||
static MModule getModule(AssemblyNameReference assemblyRef) {
|
static MModule getModule(AssemblyNameReference assemblyRef) {
|
||||||
foreach (var mm in modules.Values) {
|
foreach (var mm in modules.Values) {
|
||||||
var asm = mm.moduleDefinition.Assembly;
|
var asm = mm.moduleDefinition.Assembly;
|
||||||
if (asm.Name.FullName == assemblyRef.FullName)
|
if (asm != null && asm.Name.FullName == assemblyRef.FullName)
|
||||||
return mm;
|
return mm;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -429,6 +429,8 @@ namespace de4dot.blocks {
|
||||||
|
|
||||||
public static IEnumerable<CustomAttribute> findAttributes(AssemblyDefinition asm, TypeReference attr) {
|
public static IEnumerable<CustomAttribute> findAttributes(AssemblyDefinition asm, TypeReference attr) {
|
||||||
var list = new List<CustomAttribute>();
|
var list = new List<CustomAttribute>();
|
||||||
|
if (asm == null)
|
||||||
|
return list;
|
||||||
foreach (var cattr in asm.CustomAttributes) {
|
foreach (var cattr in asm.CustomAttributes) {
|
||||||
if (MemberReferenceHelper.compareTypes(attr, cattr.AttributeType))
|
if (MemberReferenceHelper.compareTypes(attr, cattr.AttributeType))
|
||||||
list.Add(cattr);
|
list.Add(cattr);
|
||||||
|
|
|
@ -45,7 +45,7 @@ namespace de4dot {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void save(string newFilename) {
|
public void save(string newFilename) {
|
||||||
module.Assembly.Write(newFilename);
|
module.Write(newFilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
void readMethodsFile() {
|
void readMethodsFile() {
|
||||||
|
|
|
@ -41,15 +41,17 @@ namespace de4dot {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void addModule(ModuleDefinition module) {
|
public void addModule(ModuleDefinition module) {
|
||||||
var assembly = module.Assembly;
|
|
||||||
var name = assembly.Name.FullName;
|
|
||||||
if (!addedAssemblies.ContainsKey(name) && cache.ContainsKey(name))
|
|
||||||
throw new ApplicationException(string.Format("Assembly {0} was loaded by other code.", name));
|
|
||||||
addedAssemblies[name] = true;
|
|
||||||
|
|
||||||
var dir = Path.GetDirectoryName(module.FullyQualifiedName);
|
var dir = Path.GetDirectoryName(module.FullyQualifiedName);
|
||||||
addSearchDirectory(dir);
|
addSearchDirectory(dir);
|
||||||
RegisterAssembly(assembly);
|
|
||||||
|
var assembly = module.Assembly;
|
||||||
|
if (assembly != null) {
|
||||||
|
var name = assembly.Name.FullName;
|
||||||
|
if (!addedAssemblies.ContainsKey(name) && cache.ContainsKey(name))
|
||||||
|
throw new ApplicationException(string.Format("Assembly {0} was loaded by other code.", name));
|
||||||
|
addedAssemblies[name] = true;
|
||||||
|
RegisterAssembly(assembly);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -287,7 +287,8 @@ namespace de4dot.deobfuscators {
|
||||||
Log.v("Removing custom attributes");
|
Log.v("Removing custom attributes");
|
||||||
Log.indent();
|
Log.indent();
|
||||||
deleteCustomAttributes(module.CustomAttributes);
|
deleteCustomAttributes(module.CustomAttributes);
|
||||||
deleteCustomAttributes(module.Assembly.CustomAttributes);
|
if (module.Assembly != null)
|
||||||
|
deleteCustomAttributes(module.Assembly.CustomAttributes);
|
||||||
Log.deIndent();
|
Log.deIndent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -312,7 +313,8 @@ namespace de4dot.deobfuscators {
|
||||||
Log.v("Removing other attributes");
|
Log.v("Removing other attributes");
|
||||||
Log.indent();
|
Log.indent();
|
||||||
deleteOtherAttributes(module.CustomAttributes);
|
deleteOtherAttributes(module.CustomAttributes);
|
||||||
deleteOtherAttributes(module.Assembly.CustomAttributes);
|
if (module.Assembly != null)
|
||||||
|
deleteOtherAttributes(module.Assembly.CustomAttributes);
|
||||||
Log.deIndent();
|
Log.deIndent();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,12 +41,18 @@ namespace de4dot.renamer {
|
||||||
|
|
||||||
public void add(Module module) {
|
public void add(Module module) {
|
||||||
ModuleHash moduleHash;
|
ModuleHash moduleHash;
|
||||||
var key = module.ModuleDefinition.Assembly.ToString();
|
var key = getModuleKey(module);
|
||||||
if (!assemblyHash.TryGetValue(key, out moduleHash))
|
if (!assemblyHash.TryGetValue(key, out moduleHash))
|
||||||
assemblyHash[key] = moduleHash = new ModuleHash();
|
assemblyHash[key] = moduleHash = new ModuleHash();
|
||||||
moduleHash.add(module);
|
moduleHash.add(module);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string getModuleKey(Module module) {
|
||||||
|
if (module.ModuleDefinition.Assembly != null)
|
||||||
|
return module.ModuleDefinition.Assembly.ToString();
|
||||||
|
return Utils.getBaseName(module.ModuleDefinition.FullyQualifiedName);
|
||||||
|
}
|
||||||
|
|
||||||
public ModuleHash lookup(string assemblyName) {
|
public ModuleHash lookup(string assemblyName) {
|
||||||
ModuleHash moduleHash;
|
ModuleHash moduleHash;
|
||||||
if (assemblyHash.TryGetValue(assemblyName, out moduleHash))
|
if (assemblyHash.TryGetValue(assemblyName, out moduleHash))
|
||||||
|
@ -60,7 +66,8 @@ namespace de4dot.renamer {
|
||||||
Module mainModule = null;
|
Module mainModule = null;
|
||||||
|
|
||||||
public void add(Module module) {
|
public void add(Module module) {
|
||||||
if (ReferenceEquals(module.ModuleDefinition.Assembly.MainModule, module.ModuleDefinition)) {
|
var asm = module.ModuleDefinition.Assembly;
|
||||||
|
if (asm != null && ReferenceEquals(asm.MainModule, module.ModuleDefinition)) {
|
||||||
if (mainModule != null)
|
if (mainModule != null)
|
||||||
throw new UserException(string.Format("Two modules in the same assembly are main modules. If 32-bit vs 64-bit, don't use both assemblies at the same time! \"{0}\" and \"{1}\"", module.ModuleDefinition.FullyQualifiedName, mainModule.ModuleDefinition.FullyQualifiedName));
|
throw new UserException(string.Format("Two modules in the same assembly are main modules. If 32-bit vs 64-bit, don't use both assemblies at the same time! \"{0}\" and \"{1}\"", module.ModuleDefinition.FullyQualifiedName, mainModule.ModuleDefinition.FullyQualifiedName));
|
||||||
mainModule = module;
|
mainModule = module;
|
||||||
|
|
|
@ -111,7 +111,7 @@ namespace de4dot {
|
||||||
void addModule(ModuleDefinition module) {
|
void addModule(ModuleDefinition module) {
|
||||||
pushMember(module.EntryPoint);
|
pushMember(module.EntryPoint);
|
||||||
access(() => addCustomAttributes(module.CustomAttributes));
|
access(() => addCustomAttributes(module.CustomAttributes));
|
||||||
if (module == module.Assembly.MainModule) {
|
if (module.Assembly != null && module == module.Assembly.MainModule) {
|
||||||
var asm = module.Assembly;
|
var asm = module.Assembly;
|
||||||
access(() => addCustomAttributes(asm.CustomAttributes));
|
access(() => addCustomAttributes(asm.CustomAttributes));
|
||||||
addSecurityDeclarations(asm.SecurityDeclarations);
|
addSecurityDeclarations(asm.SecurityDeclarations);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user