From 17f8569a7e914ce39da0fb64623a2451cc0b6197 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Tue, 15 Mar 2022 11:11:44 -0700 Subject: [PATCH] Only read resource in WinZipSFX --- BurnOutSharp/PackerType/WinZipSFX.cs | 34 +++++++++++++++++----------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/BurnOutSharp/PackerType/WinZipSFX.cs b/BurnOutSharp/PackerType/WinZipSFX.cs index 1549573e..5c3c11fd 100644 --- a/BurnOutSharp/PackerType/WinZipSFX.cs +++ b/BurnOutSharp/PackerType/WinZipSFX.cs @@ -29,7 +29,7 @@ namespace BurnOutSharp.PackerType if (!string.IsNullOrWhiteSpace(version)) return $"WinZip SFX {version}"; - version = GetNEUnknownHeaderVersion(nex, file, nex.SourceArray, includeDebug); + version = GetNEUnknownHeaderVersion(nex, file, includeDebug); if (!string.IsNullOrWhiteSpace(version)) return $"WinZip SFX {version}"; @@ -769,23 +769,31 @@ namespace BurnOutSharp.PackerType /// /// Get the unknown version from the NE header value combinations /// - private string GetNEUnknownHeaderVersion(NewExecutable nex, string file, byte[] fileContent, bool includeDebug) + private string GetNEUnknownHeaderVersion(NewExecutable nex, string file, bool includeDebug) { // TODO: Like with PE, convert this into a preread in the header code int resourceStart = nex.DOSStubHeader.NewExeHeaderAddr + nex.NewExecutableHeader.ResourceTableOffset; int resourceEnd = nex.DOSStubHeader.NewExeHeaderAddr + nex.NewExecutableHeader.ModuleReferenceTableOffset; - var matchers = new List - { - // WZ-SE-01 - new ContentMatchSet( - new ContentMatch(new byte?[] - { - 0x57, 0x5A, 0x2D, 0x53, 0x45, 0x2D, 0x30, 0x31 - }, start: resourceStart, end: resourceEnd), - "Unknown Version (16-bit)"), - }; + int resourceLength = resourceEnd - resourceStart; - return MatchUtil.GetFirstMatch(file, fileContent, matchers, includeDebug); + var resourceData = nex.ReadArbitraryRange(resourceStart, resourceLength); + if (resourceData != null) + { + var matchers = new List + { + // WZ-SE-01 + new ContentMatchSet( + new ContentMatch(new byte?[] + { + 0x57, 0x5A, 0x2D, 0x53, 0x45, 0x2D, 0x30, 0x31 + }, start: resourceStart, end: resourceEnd), + "Unknown Version (16-bit)"), + }; + + return MatchUtil.GetFirstMatch(file, resourceData, matchers, includeDebug); + } + + return null; } ///