Fix a problem with String.StartsWith() on mono
This commit is contained in:
parent
8469b84cc2
commit
08f5b04675
|
@ -268,7 +268,7 @@ namespace de4dot {
|
||||||
var inDir = Utils.getFullPath(searchDir.InputDirectory);
|
var inDir = Utils.getFullPath(searchDir.InputDirectory);
|
||||||
var outDir = Utils.getFullPath(searchDir.OutputDirectory);
|
var outDir = Utils.getFullPath(searchDir.OutputDirectory);
|
||||||
|
|
||||||
if (!fileOptions.Filename.StartsWith(inDir, StringComparison.OrdinalIgnoreCase))
|
if (!Utils.StartsWith(fileOptions.Filename, inDir, StringComparison.OrdinalIgnoreCase))
|
||||||
throw new UserException(string.Format("Filename {0} does not start with inDir {1}", fileOptions.Filename, inDir));
|
throw new UserException(string.Format("Filename {0} does not start with inDir {1}", fileOptions.Filename, inDir));
|
||||||
|
|
||||||
var subDirs = fileOptions.Filename.Substring(inDir.Length);
|
var subDirs = fileOptions.Filename.Substring(inDir.Length);
|
||||||
|
|
|
@ -326,7 +326,7 @@ namespace de4dot {
|
||||||
|
|
||||||
foreach (var val in options.StringDecrypterMethods) {
|
foreach (var val in options.StringDecrypterMethods) {
|
||||||
var tokenStr = val.Trim();
|
var tokenStr = val.Trim();
|
||||||
if (tokenStr.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
|
if (Utils.StartsWith(tokenStr, "0x", StringComparison.OrdinalIgnoreCase))
|
||||||
tokenStr = tokenStr.Substring(2);
|
tokenStr = tokenStr.Substring(2);
|
||||||
int methodToken;
|
int methodToken;
|
||||||
if (int.TryParse(tokenStr, NumberStyles.HexNumber, null, out methodToken))
|
if (int.TryParse(tokenStr, NumberStyles.HexNumber, null, out methodToken))
|
||||||
|
@ -398,14 +398,14 @@ namespace de4dot {
|
||||||
remaining = "";
|
remaining = "";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remaining.StartsWith("(", StringComparison.Ordinal)) {
|
if (Utils.StartsWith(remaining, "(", StringComparison.Ordinal)) {
|
||||||
stringArgs = remaining;
|
stringArgs = remaining;
|
||||||
}
|
}
|
||||||
else if (remaining.Length > 0)
|
else if (remaining.Length > 0)
|
||||||
throw new UserException(string.Format("Invalid method desc: '{0}'", methodDesc));
|
throw new UserException(string.Format("Invalid method desc: '{0}'", methodDesc));
|
||||||
|
|
||||||
if (stringArgs != null) {
|
if (stringArgs != null) {
|
||||||
if (stringArgs.StartsWith("(", StringComparison.Ordinal))
|
if (Utils.StartsWith(stringArgs, "(", StringComparison.Ordinal))
|
||||||
stringArgs = stringArgs.Substring(1);
|
stringArgs = stringArgs.Substring(1);
|
||||||
if (stringArgs.EndsWith(")", StringComparison.Ordinal))
|
if (stringArgs.EndsWith(")", StringComparison.Ordinal))
|
||||||
stringArgs = stringArgs.Substring(0, stringArgs.Length - 1);
|
stringArgs = stringArgs.Substring(0, stringArgs.Length - 1);
|
||||||
|
|
|
@ -183,5 +183,13 @@ namespace de4dot {
|
||||||
Log.log(logLevel, line);
|
Log.log(logLevel, line);
|
||||||
Log.log(logLevel, "\n\nStack trace:\n{0}", ex.StackTrace);
|
Log.log(logLevel, "\n\nStack trace:\n{0}", ex.StackTrace);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// This fixes a mono (tested 2.10.5) String.StartsWith() bug. NB: stringComparison must be
|
||||||
|
// Ordinal or OrdinalIgnoreCase!
|
||||||
|
public static bool StartsWith(string left, string right, StringComparison stringComparison) {
|
||||||
|
if (left.Length < right.Length)
|
||||||
|
return false;
|
||||||
|
return left.Substring(0, right.Length).Equals(right, stringComparison);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -398,7 +398,7 @@ namespace de4dot.deobfuscators {
|
||||||
|
|
||||||
foreach (var name in namesToPossiblyRemove) {
|
foreach (var name in namesToPossiblyRemove) {
|
||||||
foreach (var moduleRef in module.ModuleReferences) {
|
foreach (var moduleRef in module.ModuleReferences) {
|
||||||
if (moduleRef.Name.StartsWith(name, StringComparison.OrdinalIgnoreCase))
|
if (Utils.StartsWith(moduleRef.Name, name, StringComparison.OrdinalIgnoreCase))
|
||||||
addModuleReferenceToBeRemoved(moduleRef, reason);
|
addModuleReferenceToBeRemoved(moduleRef, reason);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -142,7 +142,7 @@ namespace de4dot.deobfuscators.SmartAssembly {
|
||||||
|
|
||||||
void findSmartAssemblyAttributes() {
|
void findSmartAssemblyAttributes() {
|
||||||
foreach (var type in module.Types) {
|
foreach (var type in module.Types) {
|
||||||
if (type.FullName.StartsWith("SmartAssembly.Attributes.PoweredByAttribute", StringComparison.Ordinal)) {
|
if (Utils.StartsWith(type.FullName, "SmartAssembly.Attributes.PoweredByAttribute", StringComparison.Ordinal)) {
|
||||||
foundSmartAssemblyAttribute = true;
|
foundSmartAssemblyAttribute = true;
|
||||||
addAttributeToBeRemoved(type, "Obfuscator attribute");
|
addAttributeToBeRemoved(type, "Obfuscator attribute");
|
||||||
initializeVersion(type);
|
initializeVersion(type);
|
||||||
|
|
|
@ -78,7 +78,7 @@ namespace de4dot.renamer {
|
||||||
}
|
}
|
||||||
|
|
||||||
static string renameResourceString(string s, string oldTypeName, string newTypeName) {
|
static string renameResourceString(string s, string oldTypeName, string newTypeName) {
|
||||||
if (!s.StartsWith(oldTypeName, StringComparison.Ordinal))
|
if (!Utils.StartsWith(s, oldTypeName, StringComparison.Ordinal))
|
||||||
return s;
|
return s;
|
||||||
if (s.Length == oldTypeName.Length)
|
if (s.Length == oldTypeName.Length)
|
||||||
return newTypeName;
|
return newTypeName;
|
||||||
|
@ -152,7 +152,7 @@ namespace de4dot.renamer {
|
||||||
|
|
||||||
bool isValid = false;
|
bool isValid = false;
|
||||||
foreach (var validName in validResourceNames) {
|
foreach (var validName in validResourceNames) {
|
||||||
if (validName.StartsWith(oldName, StringComparison.Ordinal)) {
|
if (Utils.StartsWith(validName, oldName, StringComparison.Ordinal)) {
|
||||||
isValid = true;
|
isValid = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user