diff --git a/BurnOutSharp/ExecutableType/Microsoft/Entries/ResourceDataEntry.cs b/BurnOutSharp/ExecutableType/Microsoft/Entries/ResourceDataEntry.cs index 164aa98f..bd17c23a 100644 --- a/BurnOutSharp/ExecutableType/Microsoft/Entries/ResourceDataEntry.cs +++ b/BurnOutSharp/ExecutableType/Microsoft/Entries/ResourceDataEntry.cs @@ -33,6 +33,7 @@ namespace BurnOutSharp.ExecutableType.Microsoft.Entries if (Data == null || codePage < 0) return string.Empty; + // Try to convert to UTF-8 first try { Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); @@ -40,11 +41,17 @@ namespace BurnOutSharp.ExecutableType.Microsoft.Entries byte[] convertedData = Encoding.Convert(originalEncoding, Encoding.UTF8, Data); return Encoding.UTF8.GetString(convertedData); } - catch (Exception ex) + catch { } + + // Then try to read direct as ASCII + try { return Encoding.ASCII.GetString(Data); } - + catch { } + + // If both encodings fail, then just return an empty string + return string.Empty; } } diff --git a/BurnOutSharp/Tools/Utilities.cs b/BurnOutSharp/Tools/Utilities.cs index d46f45e7..11088006 100644 --- a/BurnOutSharp/Tools/Utilities.cs +++ b/BurnOutSharp/Tools/Utilities.cs @@ -395,43 +395,47 @@ namespace BurnOutSharp.Tools if (rdt == null) return null; - foreach (var rdte in rdt.NamedEntries) + try { - if (rdte.IsResourceDataEntry() && rdte.DataEntry != null) + foreach (var rdte in rdt.NamedEntries) { - if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart)) - return rdte.DataEntry; - else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains)) - return rdte.DataEntry; - else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart)) - return rdte.DataEntry; + if (rdte.IsResourceDataEntry() && rdte.DataEntry != null) + { + if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart)) + return rdte.DataEntry; + else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains)) + return rdte.DataEntry; + else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart)) + return rdte.DataEntry; + } + else + { + var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd); + if (manifest != null) + return manifest; + } } - else - { - var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd); - if (manifest != null) - return manifest; - } - } - foreach (var rdte in rdt.IdEntries) - { - if (rdte.IsResourceDataEntry() && rdte.DataEntry != null) + foreach (var rdte in rdt.IdEntries) { - if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart)) - return rdte.DataEntry; - else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains)) - return rdte.DataEntry; - else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart)) - return rdte.DataEntry; - } - else - { - var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd); - if (manifest != null) - return manifest; + if (rdte.IsResourceDataEntry() && rdte.DataEntry != null) + { + if (dataStart != null && rdte.DataEntry.DataAsUTF8String.StartsWith(dataStart)) + return rdte.DataEntry; + else if (dataContains != null && rdte.DataEntry.DataAsUTF8String.Contains(dataContains)) + return rdte.DataEntry; + else if (dataEnd != null && rdte.DataEntry.DataAsUTF8String.EndsWith(dataStart)) + return rdte.DataEntry; + } + else + { + var manifest = FindResourceInTable(rdte.Subdirectory, dataStart, dataContains, dataEnd); + if (manifest != null) + return manifest; + } } } + catch { } return null; }