Updated resource renaming of code strings

This commit is contained in:
de4dot 2011-09-27 23:29:38 +02:00
parent c257f16787
commit cd0e5c0169

View File

@ -92,6 +92,15 @@ namespace de4dot.renamer {
public void renameResources() {
var renamedTypes = new List<Renamed>(getRenamedTypeNames());
// Rename the longest names first. Otherwise eg. b.g.resources could be renamed
// Class0.g.resources instead of Class1.resources when b.g was renamed Class1.
renamedTypes.Sort((a, b) => {
if (a.OldName.Length > b.OldName.Length) return -1;
if (a.OldName.Length < b.OldName.Length) return 1;
return 0;
});
renameResourceNamesInCode(renamedTypes);
renameResources(renamedTypes);
}
@ -102,6 +111,15 @@ namespace de4dot.renamer {
foreach (var renamed in renamedTypes)
oldToNewTypeName[renamed.OldName] = renamed.NewName;
List<string> validResourceNames = new List<string>();
if (ModuleDefinition.Resources != null) {
foreach (var resource in ModuleDefinition.Resources) {
var name = resource.Name;
if (name.EndsWith(".resources", StringComparison.Ordinal))
validResourceNames.Add(name);
}
}
foreach (var method in allMethods) {
if (!method.HasBody)
continue;
@ -111,14 +129,18 @@ namespace de4dot.renamer {
var s = (string)instr.Operand;
string newName = null;
if (oldToNewTypeName.ContainsKey(s))
string oldName = null;
if (oldToNewTypeName.ContainsKey(s)) {
oldName = s;
newName = oldToNewTypeName[s];
}
else if (s.EndsWith(".resources", StringComparison.Ordinal)) {
// This should rarely, if ever, execute...
foreach (var renamed in renamedTypes) { // Slow loop
var newName2 = renameResourceString(s, renamed.OldName, renamed.NewName);
if (newName2 != s) {
newName = newName2;
oldName = renamed.OldName;
break;
}
}
@ -126,6 +148,16 @@ namespace de4dot.renamer {
if (newName == null)
continue;
bool isValid = false;
foreach (var validName in validResourceNames) {
if (validName.StartsWith(oldName, StringComparison.Ordinal)) {
isValid = true;
break;
}
}
if (!isValid)
continue;
if (s == "" || !obfuscatedFile.RenameResourcesInCode)
Log.v("Possible resource name in code: '{0}' => '{1}' in method {2}", s, newName, method);
else {