Update detection of <Module> type
This commit is contained in:
parent
d295fa24a2
commit
0398666c93
|
@ -44,11 +44,9 @@ namespace AssemblyData.methodsrewriter {
|
||||||
var tmpTokenToTypeDefinition = new Dictionary<int, TypeDefinition>();
|
var tmpTokenToTypeDefinition = new Dictionary<int, TypeDefinition>();
|
||||||
foreach (var t in module.GetTypes())
|
foreach (var t in module.GetTypes())
|
||||||
tmpTokenToType[t.MetadataToken] = t;
|
tmpTokenToType[t.MetadataToken] = t;
|
||||||
foreach (var t in moduleDefinition.GetTypes()) {
|
foreach (var t in moduleDefinition.GetTypes())
|
||||||
tmpTokenToTypeDefinition[t.MetadataToken.ToInt32()] = t;
|
tmpTokenToTypeDefinition[t.MetadataToken.ToInt32()] = t;
|
||||||
if (moduleType == null && t.FullName == "<Module>")
|
moduleType = DotNetUtils.getModuleType(moduleDefinition);
|
||||||
moduleType = t;
|
|
||||||
}
|
|
||||||
foreach (var token in tmpTokenToType.Keys) {
|
foreach (var token in tmpTokenToType.Keys) {
|
||||||
var mtype = new MType(tmpTokenToType[token], tmpTokenToTypeDefinition[token]);
|
var mtype = new MType(tmpTokenToType[token], tmpTokenToTypeDefinition[token]);
|
||||||
tokenToType[token] = mtype;
|
tokenToType[token] = mtype;
|
||||||
|
|
|
@ -281,11 +281,17 @@ namespace de4dot.blocks {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static TypeDefinition getModuleType(ModuleDefinition module) {
|
public static TypeDefinition getModuleType(ModuleDefinition module) {
|
||||||
foreach (var type in module.Types) {
|
if (module.Types.Count == 0)
|
||||||
if (type.FullName == "<Module>")
|
return null;
|
||||||
return type;
|
|
||||||
|
if (module.Runtime == TargetRuntime.Net_1_0 || module.Runtime == TargetRuntime.Net_1_1) {
|
||||||
|
if (module.Types[0].FullName == "<Module>")
|
||||||
|
return module.Types[0];
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
|
// It's always the first one, no matter what it is named.
|
||||||
|
return module.Types[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
public static bool isEmpty(MethodDefinition method) {
|
public static bool isEmpty(MethodDefinition method) {
|
||||||
|
|
|
@ -169,8 +169,9 @@ namespace de4dot.code.deobfuscators {
|
||||||
}
|
}
|
||||||
|
|
||||||
void restoreBaseType() {
|
void restoreBaseType() {
|
||||||
|
var moduleType = DotNetUtils.getModuleType(module);
|
||||||
foreach (var type in module.GetTypes()) {
|
foreach (var type in module.GetTypes()) {
|
||||||
if (type.BaseType != null || type.IsInterface || type.FullName == "<Module>")
|
if (type.BaseType != null || type.IsInterface || type == moduleType)
|
||||||
continue;
|
continue;
|
||||||
Log.v("Adding System.Object as base type: {0} ({1:X8})",
|
Log.v("Adding System.Object as base type: {0} ({1:X8})",
|
||||||
Utils.removeNewlines(type),
|
Utils.removeNewlines(type),
|
||||||
|
|
|
@ -271,8 +271,9 @@ namespace de4dot.code.deobfuscators.SmartAssembly {
|
||||||
|
|
||||||
bool hasEmptyClassesInEveryNamespace() {
|
bool hasEmptyClassesInEveryNamespace() {
|
||||||
var namespaces = new Dictionary<string, int>(StringComparer.Ordinal);
|
var namespaces = new Dictionary<string, int>(StringComparer.Ordinal);
|
||||||
|
var moduleType = DotNetUtils.getModuleType(module);
|
||||||
foreach (var type in module.Types) {
|
foreach (var type in module.Types) {
|
||||||
if (type.FullName == "<Module>")
|
if (type == moduleType)
|
||||||
continue;
|
continue;
|
||||||
var ns = type.Namespace;
|
var ns = type.Namespace;
|
||||||
if (!namespaces.ContainsKey(ns))
|
if (!namespaces.ContainsKey(ns))
|
||||||
|
|
|
@ -81,6 +81,10 @@ namespace de4dot.code.renamer {
|
||||||
return baseInfo;
|
return baseInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isModuleType() {
|
||||||
|
return type.TypeDefinition == DotNetUtils.getModuleType(type.TypeDefinition.Module);
|
||||||
|
}
|
||||||
|
|
||||||
public void prepareRenameTypes(TypeRenamerState state) {
|
public void prepareRenameTypes(TypeRenamerState state) {
|
||||||
var checker = NameChecker;
|
var checker = NameChecker;
|
||||||
|
|
||||||
|
@ -94,7 +98,12 @@ namespace de4dot.code.renamer {
|
||||||
string origClassName = null;
|
string origClassName = null;
|
||||||
if (isWinFormsClass())
|
if (isWinFormsClass())
|
||||||
origClassName = findWindowsFormsClassName(type);
|
origClassName = findWindowsFormsClassName(type);
|
||||||
if (oldFullName != "<Module>" && !checker.isValidTypeName(oldName)) {
|
if (isModuleType()) {
|
||||||
|
if (oldNamespace != "")
|
||||||
|
newNamespace = "";
|
||||||
|
rename("<Module>");
|
||||||
|
}
|
||||||
|
else if (!checker.isValidTypeName(oldName)) {
|
||||||
if (origClassName != null && checker.isValidTypeName(origClassName))
|
if (origClassName != null && checker.isValidTypeName(origClassName))
|
||||||
rename(state.getTypeName(oldName, origClassName));
|
rename(state.getTypeName(oldName, origClassName));
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user