Fix problems found while testing

This commit is contained in:
de4dot 2012-05-03 17:24:59 +02:00
parent b27e1b36af
commit 44fea8f185
3 changed files with 26 additions and 10 deletions

View File

@ -32,6 +32,7 @@ namespace de4dot.code {
INameChecker NameChecker { get; } INameChecker NameChecker { get; }
bool RenameResourcesInCode { get; } bool RenameResourcesInCode { get; }
bool RemoveNamespaceWithOneType { get; } bool RemoveNamespaceWithOneType { get; }
bool RenameResourceKeys { get; }
void deobfuscateBegin(); void deobfuscateBegin();
void deobfuscate(); void deobfuscate();

View File

@ -95,7 +95,7 @@ namespace de4dot.code.renamer {
void renameResourceKeys() { void renameResourceKeys() {
foreach (var module in modules.TheModules) { foreach (var module in modules.TheModules) {
if (!module.ObfuscatedFile.RenameResourcesInCode) if (!module.ObfuscatedFile.RenameResourceKeys)
continue; continue;
new ResourceKeysRenamer(module.ModuleDefinition, module.ObfuscatedFile.NameChecker).rename(); new ResourceKeysRenamer(module.ModuleDefinition, module.ObfuscatedFile.NameChecker).rename();
} }

View File

@ -40,15 +40,15 @@ namespace de4dot.code.renamer {
} }
public void rename() { public void rename() {
Log.v("Renaming resource keys..."); Log.v("Renaming resource keys ({0})", module);
Log.indent(); Log.indent();
foreach (var type in module.GetTypes()) { foreach (var type in module.GetTypes()) {
string resourceName = getResourceName(type); string resourceName = getResourceName(type);
if (resourceName == null) if (resourceName == null)
continue; continue;
var resource = DotNetUtils.getResource(module, resourceName) as EmbeddedResource; var resource = getResource(resourceName);
if (resource == null) { if (resource == null) {
Log.w("Could not find resource {0}", Utils.removeNewlines(resource)); Log.w("Could not find resource {0}", Utils.removeNewlines(resourceName));
continue; continue;
} }
Log.v("Resource: {0}", Utils.toCsharpString(resource.Name)); Log.v("Resource: {0}", Utils.toCsharpString(resource.Name));
@ -59,6 +59,23 @@ namespace de4dot.code.renamer {
Log.deIndent(); Log.deIndent();
} }
EmbeddedResource getResource(string resourceName) {
var resource = DotNetUtils.getResource(module, resourceName + ".resources") as EmbeddedResource;
if (resource != null)
return resource;
string name = "";
var pieces = resourceName.Split('.');
Array.Reverse(pieces);
foreach (var piece in pieces) {
name = piece + name;
resource = DotNetUtils.getResource(module, name + ".resources") as EmbeddedResource;
if (resource != null)
return resource;
}
return null;
}
static string getResourceName(TypeDefinition type) { static string getResourceName(TypeDefinition type) {
foreach (var method in type.Methods) { foreach (var method in type.Methods) {
if (method.Body == null) if (method.Body == null)
@ -81,7 +98,7 @@ namespace de4dot.code.renamer {
continue; continue;
} }
return resourceName + ".resources"; return resourceName;
} }
} }
} }
@ -174,10 +191,8 @@ namespace de4dot.code.renamer {
} }
RenameInfo info; RenameInfo info;
if (!nameToInfo.TryGetValue(name, out info)) { if (!nameToInfo.TryGetValue(name, out info))
Log.w("Could not find resource key '{0}'", Utils.removeNewlines(name)); continue; // should not be renamed
continue;
}
ldstr.Operand = info.newName; ldstr.Operand = info.newName;
Log.v("Renamed resource key {0} => {1}", Utils.toCsharpString(info.element.Name), Utils.toCsharpString(info.newName)); Log.v("Renamed resource key {0} => {1}", Utils.toCsharpString(info.element.Name), Utils.toCsharpString(info.newName));
@ -196,7 +211,7 @@ namespace de4dot.code.renamer {
if (elem.ResourceData.Code != ResourceTypeCode.String) if (elem.ResourceData.Code != ResourceTypeCode.String)
return createDefaultName(); return createDefaultName();
var stringData = (BuiltInResourceData)elem.ResourceData; var stringData = (BuiltInResourceData)elem.ResourceData;
return createName(createPrefixFromStringData((string)stringData.Data), false); return createPrefixFromStringData((string)stringData.Data);
} }
string createPrefixFromStringData(string data) { string createPrefixFromStringData(string data) {