diff --git a/BurnOutSharp/PackerType/WinZipSFX.cs b/BurnOutSharp/PackerType/WinZipSFX.cs index 09c79dc1..4ef3faef 100644 --- a/BurnOutSharp/PackerType/WinZipSFX.cs +++ b/BurnOutSharp/PackerType/WinZipSFX.cs @@ -25,15 +25,25 @@ namespace BurnOutSharp.PackerType if (nex == null) return null; + // If the resident-name table doesnt exist + if (nex.ResidentNameTable == null) + return null; + + // Check for the WinZip name string + bool winZipNameFound = nex.ResidentNameTable.Where(rnte => rnte?.NameString != null) + .Select(rnte => Encoding.ASCII.GetString(rnte.NameString)) + .Any(s => s.Contains("WZ-SE-01")); + + // If we didn't find it + if (!winZipNameFound) + return null; + + // Try to get a known version string version = GetNEHeaderVersion(nex); if (!string.IsNullOrWhiteSpace(version)) return $"WinZip SFX {version}"; - version = GetNEUnknownHeaderVersion(nex, file, includeDebug); - if (!string.IsNullOrWhiteSpace(version)) - return $"WinZip SFX {version}"; - - return null; + return $"WinZip SFX Unknown Version (16-bit)"; } /// @@ -62,7 +72,7 @@ namespace BurnOutSharp.PackerType version = GetAdjustedManifestVersion(pex); if (!string.IsNullOrWhiteSpace(version)) return $"WinZip SFX {version}"; - + return "WinZip SFX Unknown Version (32-bit)"; } @@ -85,18 +95,18 @@ namespace BurnOutSharp.PackerType // WinZip Self-Extractor header corrupt. new ContentMatchSet(new byte?[] { - 0x57, 0x69, 0x6E, 0x5A, 0x69, 0x70, 0x20, 0x53, - 0x65, 0x6C, 0x66, 0x2D, 0x45, 0x78, 0x74, 0x72, + 0x57, 0x69, 0x6E, 0x5A, 0x69, 0x70, 0x20, 0x53, + 0x65, 0x6C, 0x66, 0x2D, 0x45, 0x78, 0x74, 0x72, 0x61, 0x63, 0x74, 0x6F, 0x72, 0x20, 0x68, 0x65, - 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6F, 0x72, - 0x72, 0x75, 0x70, 0x74, 0x2E, + 0x61, 0x64, 0x65, 0x72, 0x20, 0x63, 0x6F, 0x72, + 0x72, 0x75, 0x70, 0x74, 0x2E, }, "Unknown Version (32-bit)"), // winzip\shell\open\command new ContentMatchSet(new byte?[] { - 0x77, 0x69, 0x6E, 0x7A, 0x69, 0x70, 0x5C, 0x73, - 0x68, 0x65, 0x6C, 0x6C, 0x5C, 0x6F, 0x70, 0x65, + 0x77, 0x69, 0x6E, 0x7A, 0x69, 0x70, 0x5C, 0x73, + 0x68, 0x65, 0x6C, 0x6C, 0x5C, 0x6F, 0x70, 0x65, 0x6E, 0x5C, 0x63, 0x6F, 0x6D, 0x6D, 0x61, 0x6E, 0x64, }, "Unknown Version (32-bit)"), @@ -204,7 +214,7 @@ namespace BurnOutSharp.PackerType return null; else if (string.IsNullOrEmpty(version)) return null; - + // Some version strings don't exactly match the public version number switch (version) { @@ -236,7 +246,7 @@ namespace BurnOutSharp.PackerType return $"(Unknown - internal version {version})"; } } - + /// /// Get the version from the NE header value combinations /// @@ -281,7 +291,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "2.0 (MS-DOS/16-bit)"; - + // 2.0 (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -353,7 +363,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "Compact 2.0 (16-bit)"; - + // Software Installation 2.0 (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -388,11 +398,11 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "Software Installation 2.0 (16-bit)"; - + #endregion #region 2.1 RC2 Variants - + // 2.1 RC2 (MS-DOS/16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -499,7 +509,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "Compact 2.1 RC2 (16-bit)"; - + // Software Installation 2.1 RC2 (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -534,7 +544,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "Software Installation 2.1 RC2 (16-bit)"; - + #endregion #region 2.1 Variants @@ -574,7 +584,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "2.1 (MS-DOS/16-bit)"; - + // 2.1 (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -609,7 +619,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "2.1 (16-bit)"; - + // Compact 2.1 (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -645,7 +655,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "Compact 2.1 (16-bit)"; - + // Software Installation 2.1 (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -720,7 +730,7 @@ namespace BurnOutSharp.PackerType && nex.WindowsSDKRevision == 0x00 && nex.WindowsSDKVersion == 0x03) return "Personal Edition (16-bit)"; - + // Personal Edition 32-bit (16-bit) if (nex.LinkerVersion == 0x11 && nex.LinkerRevision == 0x20 @@ -796,22 +806,6 @@ namespace BurnOutSharp.PackerType return null; } - /// - /// Get the unknown version from the NE header value combinations - /// - private string GetNEUnknownHeaderVersion(NewExecutable nex, string file, bool includeDebug) - { - // If the resident-name table doesnt exist - if (nex.ResidentNameTable == null) - return null; - - bool found = nex.ResidentNameTable.Where(rnte => rnte?.NameString != null) - .Select(rnte => Encoding.ASCII.GetString(rnte.NameString)) - .Any(s => s.Contains("WZ-SE-01")); - - return found ? "Unknown Version (16-bit)" : null; - } - /// /// Get the version from the PE header value combinations /// @@ -839,7 +833,7 @@ namespace BurnOutSharp.PackerType && pex.OH_BaseOfData == 0x00007000 && pex.OH_ImageBase == 0x00400000) return "2.2.3063"; - + // 2.2.4003 if (pex.Machine == Models.PortableExecutable.MachineType.IMAGE_FILE_MACHINE_I386 && pex.NumberOfSections == 0x0005 @@ -860,7 +854,7 @@ namespace BurnOutSharp.PackerType && pex.OH_BaseOfData == 0x00006000 && pex.OH_ImageBase == 0x00400000) return "2.2.4003"; - + // Software Installation 2.2.4003 if (pex.Machine == Models.PortableExecutable.MachineType.IMAGE_FILE_MACHINE_I386 && pex.NumberOfSections == 0x0005 @@ -904,7 +898,7 @@ namespace BurnOutSharp.PackerType && pex.OH_SectionAlignment == 0x00001000 && pex.OH_FileAlignment == 0x00001000) return "2.2.4325"; - + // 2.2.5196 if (pex.Machine == Models.PortableExecutable.MachineType.IMAGE_FILE_MACHINE_I386 && pex.NumberOfSections == 0x0005 @@ -927,7 +921,7 @@ namespace BurnOutSharp.PackerType && pex.OH_SectionAlignment == 0x00001000 && pex.OH_FileAlignment == 0x00001000) return "2.2.5196"; - + // 2.2.6202 if (pex.Machine == Models.PortableExecutable.MachineType.IMAGE_FILE_MACHINE_I386 && pex.NumberOfSections == 0x0005 @@ -951,7 +945,7 @@ namespace BurnOutSharp.PackerType return null; } - + /// /// Get the version from the .rdata SFX header data /// @@ -1041,149 +1035,149 @@ namespace BurnOutSharp.PackerType // .............ñ½;5....ˆ`..............ˆ`..ˆ`..ˆ`..SI32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xBD, 0x3B, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xF1, 0xBD, 0x3B, 0x35, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, 0x00, 0x88, 0x60, 0x00, 0x00, 0x88, 0x60, 0x00, - 0x00, 0x53, 0x49, 0x33, 0x32, 0x45, 0x2E, 0x53, - 0x46, 0x58, + 0x00, 0x53, 0x49, 0x33, 0x32, 0x45, 0x2E, 0x53, + 0x46, 0x58, }, "Software Installation 2.2.1110 (32-bit)"), // .............á.^2....ˆP..............ˆP..ˆP..ˆP..VW95LE.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x9D, 0x5E, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xE1, 0x9D, 0x5E, 0x32, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x00, 0x00, 0x88, 0x50, 0x00, 0x00, 0x88, 0x50, 0x00, - 0x00, 0x56, 0x57, 0x39, 0x35, 0x4C, 0x45, 0x2E, - 0x53, 0x46, 0x58, + 0x00, 0x56, 0x57, 0x39, 0x35, 0x4C, 0x45, 0x2E, + 0x53, 0x46, 0x58, }, "Personal Edition (32-bit)"), // .............ïAÁ3....ˆP..............ˆP..ˆP..ˆP..VW95LE.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x41, 0xC1, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xEF, 0x41, 0xC1, 0x33, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x50, 0x00, 0x00, 0x88, 0x50, 0x00, 0x00, 0x88, 0x50, 0x00, - 0x00, 0x56, 0x57, 0x39, 0x35, 0x4C, 0x45, 0x2E, - 0x53, 0x46, 0x58, + 0x00, 0x56, 0x57, 0x39, 0x35, 0x4C, 0x45, 0x2E, + 0x53, 0x46, 0x58, }, "Personal Edition 32-bit (32-bit)"), // .............'..6....ˆ`..............ˆ`..ˆ`..ˆ`..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x0F, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0x0F, 0x01, 0x36, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, 0x00, 0x88, 0x60, 0x00, 0x00, 0x88, 0x60, 0x00, - 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, + 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Personal Edition 32-bit Build 1260 (32-bit)"), // .............Ó‘(6....ˆ`..............ˆ`..ˆ`..ˆ`..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x91, 0x28, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xD3, 0x91, 0x28, 0x36, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, - 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x60, 0x00, 0x00, 0x88, 0x60, 0x00, 0x00, 0x88, 0x60, 0x00, - 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, - 0x46, 0x58, + 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, + 0x46, 0x58, }, "Personal Edition 32-bit Build 1285 (32-bit)"), // ......]ïý8....˜z..............˜z..˜z..˜z..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xEF, - 0xFD, 0x38, 0x00, 0x00, 0x00, 0x00, 0x98, 0x7A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xEF, + 0xFD, 0x38, 0x00, 0x00, 0x00, 0x00, 0x98, 0x7A, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x7A, - 0x00, 0x00, 0x98, 0x7A, 0x00, 0x00, 0x98, 0x7A, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x7A, + 0x00, 0x00, 0x98, 0x7A, 0x00, 0x00, 0x98, 0x7A, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, - 0x53, 0x46, 0x58, + 0x53, 0x46, 0x58, }, "Personal Edition 32-bit Build 3063"), // ...................½û;....ˆj..............ˆj..ˆj..ˆj..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xBD, 0xFB, 0x3B, 0x00, 0x00, - 0x00, 0x00, 0x88, 0x6A, 0x00, 0x00, 0x01, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x88, 0x6A, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x88, 0x6A, 0x00, 0x00, 0x88, 0x6A, - 0x00, 0x00, 0x88, 0x6A, 0x00, 0x00, 0x50, 0x45, + 0x00, 0x00, 0x88, 0x6A, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Personal Edition 32-bit Build 4325"), // ................rS*@....Xƒ..............Xƒ..Xƒ..Xƒ..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x72, 0x53, 0x2A, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x83, 0x00, 0x00, 0x58, 0x83, 0x00, 0x00, - 0x58, 0x83, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, - 0x45, 0x2E, 0x53, 0x46, 0x58, + 0x58, 0x83, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, + 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Personal Edition 32-bit Build 6028"), // ................±.!A....Xƒ..............Xƒ..Xƒ..Xƒ..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB1, 0x1A, 0x21, 0x41, 0x00, 0x00, 0x00, 0x00, - 0x58, 0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x58, 0x83, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x83, 0x00, 0x00, 0x58, 0x83, 0x00, 0x00, - 0x58, 0x83, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, + 0x58, 0x83, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Personal Edition 32-bit Build 6224"), // ................¯D.C....x„..............x„..x„..x„..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x44, 0x0F, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x84, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x84, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x00, 0x00, 0x78, 0x84, 0x00, 0x00, - 0x78, 0x84, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, + 0x78, 0x84, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, 0x46, }, "Personal Edition 32-bit Build 6604"), //................·Å\C....x„..............x„..x„..x„..PE32E.SFX new ContentMatchSet(new byte?[] { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xB7, 0xC5, 0x5C, 0x43, 0x00, 0x00, 0x00, 0x00, - 0x78, 0x84, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x78, 0x84, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x84, 0x00, 0x00, 0x78, 0x84, 0x00, 0x00, - 0x78, 0x84, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, - 0x45, 0x2E, 0x53, 0x46, 0x58, + 0x78, 0x84, 0x00, 0x00, 0x50, 0x45, 0x33, 0x32, + 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Personal Edition 32-bit Build 6663"), }; return MatchUtil.GetFirstMatch(file, sectionContent, matchers, includeDebug); } - + /// /// Get the unknown version from the .rdata SFX header data /// @@ -1194,29 +1188,29 @@ namespace BurnOutSharp.PackerType // VW95SE.SFX new ContentMatchSet(new byte?[] { - 0x56, 0x57, 0x39, 0x35, 0x53, 0x45, 0x2E, 0x53, + 0x56, 0x57, 0x39, 0x35, 0x53, 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Unknown Version (32-bit)"), // VW95SRE.SFX new ContentMatchSet(new byte?[] { - 0x56, 0x57, 0x39, 0x35, 0x53, 0x52, 0x45, 0x2E, + 0x56, 0x57, 0x39, 0x35, 0x53, 0x52, 0x45, 0x2E, 0x53, 0x46, 0x58, }, "Unknown Version Software Installation (32-bit)"), // VW95LE.SFX new ContentMatchSet(new byte?[] { - 0x56, 0x57, 0x39, 0x35, 0x4C, 0x45, 0x2E, 0x53, - 0x46, 0x58, + 0x56, 0x57, 0x39, 0x35, 0x4C, 0x45, 0x2E, 0x53, + 0x46, 0x58, }, "Unknown Version before build 1285 Personal Edition (32-bit)"), // PE32E.SFX new ContentMatchSet(new byte?[] { - 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, 0x46, - 0x58, + 0x50, 0x45, 0x33, 0x32, 0x45, 0x2E, 0x53, 0x46, + 0x58, }, "Unknown Version after 1285 Personal Edition (32-bit)"), };