diff --git a/BurnOutSharp/PackerType/ASPack.cs b/BurnOutSharp/PackerType/ASPack.cs index 9217eb74..c2d73a50 100644 --- a/BurnOutSharp/PackerType/ASPack.cs +++ b/BurnOutSharp/PackerType/ASPack.cs @@ -10,7 +10,7 @@ using BinaryObjectScanner.Wrappers; namespace BurnOutSharp.PackerType { // TODO: Add extraction - public class ASPack : IPortableExecutableCheck, IScannable + public class ASPack : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -52,6 +52,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/Armadillo.cs b/BurnOutSharp/PackerType/Armadillo.cs index 2cf9107f..a9fd4f07 100644 --- a/BurnOutSharp/PackerType/Armadillo.cs +++ b/BurnOutSharp/PackerType/Armadillo.cs @@ -11,7 +11,7 @@ namespace BurnOutSharp.PackerType // TODO: Add extraction // TODO: Add version checking, if possible // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class Armadillo : IPortableExecutableCheck, IScannable + public class Armadillo : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -41,6 +41,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/AutoPlayMediaStudio.cs b/BurnOutSharp/PackerType/AutoPlayMediaStudio.cs index fc2a1b53..1a0b4a83 100644 --- a/BurnOutSharp/PackerType/AutoPlayMediaStudio.cs +++ b/BurnOutSharp/PackerType/AutoPlayMediaStudio.cs @@ -10,7 +10,7 @@ namespace BurnOutSharp.PackerType // Created by IndigoRose (creators of Setup Factory), primarily to be used to create autorun menus for various media. // Official website: https://www.autoplay.org/ // TODO: Add extraction - public class AutoPlayMediaStudio : IPortableExecutableCheck, IScannable + public class AutoPlayMediaStudio : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -35,6 +35,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/CExe.cs b/BurnOutSharp/PackerType/CExe.cs index 308332c3..9fec7f35 100644 --- a/BurnOutSharp/PackerType/CExe.cs +++ b/BurnOutSharp/PackerType/CExe.cs @@ -15,7 +15,7 @@ namespace BurnOutSharp.PackerType // The official website for CExe also includes the source code (which does have to be retrieved by the Wayback Machine) // http://www.scottlu.com/Content/CExe.html // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class CExe : IPortableExecutableCheck, IScannable + public class CExe : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -49,6 +49,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/EXEStealth.cs b/BurnOutSharp/PackerType/EXEStealth.cs index 97e79323..59298a56 100644 --- a/BurnOutSharp/PackerType/EXEStealth.cs +++ b/BurnOutSharp/PackerType/EXEStealth.cs @@ -12,7 +12,7 @@ namespace BurnOutSharp.PackerType // TODO: Detect 3.15 and up (maybe looking for `Metamorphism`) // TODO: Add extraction // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class EXEStealth : IContentCheck, IPortableExecutableCheck, IScannable + public class EXEStealth : IContentCheck, IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckContents(string file, byte[] fileContent, bool includeDebug) @@ -76,6 +76,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/EmbeddedExecutable.cs b/BurnOutSharp/PackerType/EmbeddedExecutable.cs index 9e9bcb0b..d3fb62c0 100644 --- a/BurnOutSharp/PackerType/EmbeddedExecutable.cs +++ b/BurnOutSharp/PackerType/EmbeddedExecutable.cs @@ -13,7 +13,7 @@ namespace BurnOutSharp.PackerType /// Though not technically a packer, this detection is for any executables that include /// others in their resources in some uncompressed manner to be used at runtime. /// - public class EmbeddedExecutable : IPortableExecutableCheck, IScannable + public class EmbeddedExecutable : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -30,6 +30,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/GenteeInstaller.cs b/BurnOutSharp/PackerType/GenteeInstaller.cs index 6edc6b5a..78342ece 100644 --- a/BurnOutSharp/PackerType/GenteeInstaller.cs +++ b/BurnOutSharp/PackerType/GenteeInstaller.cs @@ -10,7 +10,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class GenteeInstaller : IPortableExecutableCheck, IScannable + public class GenteeInstaller : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -34,6 +34,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/HyperTechCrackProof.cs b/BurnOutSharp/PackerType/HyperTechCrackProof.cs index 3993ea5c..85edd451 100644 --- a/BurnOutSharp/PackerType/HyperTechCrackProof.cs +++ b/BurnOutSharp/PackerType/HyperTechCrackProof.cs @@ -12,7 +12,7 @@ namespace BurnOutSharp.PackerType // https://www.reddit.com/r/riseofincarnates/comments/m3vbnm/subreddit_revival_does_anyone_still_have_rise_of/ // https://steamcommunity.com/app/310950/discussions/0/4224890554455490819/ // https://github.com/horsicq/Detect-It-Easy/blob/63a1aa8bb23ca02d8a7fd5936db8dbc5c5d52dea/db/PE/HyperTech%20Crackproof.2.sg - public class HyperTechCrackProof : IPortableExecutableCheck, IScannable + public class HyperTechCrackProof : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -33,6 +33,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/InnoSetup.cs b/BurnOutSharp/PackerType/InnoSetup.cs index dd221d5f..1c98bf2e 100644 --- a/BurnOutSharp/PackerType/InnoSetup.cs +++ b/BurnOutSharp/PackerType/InnoSetup.cs @@ -11,7 +11,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction - https://github.com/dscharrer/InnoExtract // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class InnoSetup : INewExecutableCheck, IPortableExecutableCheck, IScannable + public class InnoSetup : IExtractable, INewExecutableCheck, IPortableExecutableCheck, IScannable { /// public string CheckNewExecutable(string file, NewExecutable nex, bool includeDebug) @@ -59,6 +59,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/InstallAnywhere.cs b/BurnOutSharp/PackerType/InstallAnywhere.cs index 0ac6f292..45cfd2e5 100644 --- a/BurnOutSharp/PackerType/InstallAnywhere.cs +++ b/BurnOutSharp/PackerType/InstallAnywhere.cs @@ -9,7 +9,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction, which may be possible with the current libraries but needs to be investigated further. // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class InstallAnywhere : IPortableExecutableCheck, IScannable + public class InstallAnywhere : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -30,6 +30,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/InstallerVISE.cs b/BurnOutSharp/PackerType/InstallerVISE.cs index 2b97b38c..684c8535 100644 --- a/BurnOutSharp/PackerType/InstallerVISE.cs +++ b/BurnOutSharp/PackerType/InstallerVISE.cs @@ -10,7 +10,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction - https://github.com/Bioruebe/UniExtract2 // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class InstallerVISE : IPortableExecutableCheck, IScannable + public class InstallerVISE : IExtractable, IPortableExecutableCheck, IScannable { //TODO: Add exact version detection for Windows builds, make sure versions before 3.X are detected as well, and detect the Mac builds. /// @@ -32,6 +32,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/IntelInstallationFramework.cs b/BurnOutSharp/PackerType/IntelInstallationFramework.cs index c51b596b..819584fe 100644 --- a/BurnOutSharp/PackerType/IntelInstallationFramework.cs +++ b/BurnOutSharp/PackerType/IntelInstallationFramework.cs @@ -8,7 +8,7 @@ using BinaryObjectScanner.Wrappers; namespace BurnOutSharp.PackerType { // TODO: Add extraction, seems to primarily use MSZip compression. - public class IntelInstallationFramework : IPortableExecutableCheck, IScannable + public class IntelInstallationFramework : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -35,6 +35,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/MicrosoftCABSFX.cs b/BurnOutSharp/PackerType/MicrosoftCABSFX.cs index 947d6f5d..f3dd9c7b 100644 --- a/BurnOutSharp/PackerType/MicrosoftCABSFX.cs +++ b/BurnOutSharp/PackerType/MicrosoftCABSFX.cs @@ -11,7 +11,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction, which should be possible with LibMSPackN, but it refuses to extract due to SFX files lacking the typical CAB identifiers. // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class MicrosoftCABSFX : IPortableExecutableCheck, IScannable + public class MicrosoftCABSFX : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -50,6 +50,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/NSIS.cs b/BurnOutSharp/PackerType/NSIS.cs index b48aeb67..4e386257 100644 --- a/BurnOutSharp/PackerType/NSIS.cs +++ b/BurnOutSharp/PackerType/NSIS.cs @@ -9,7 +9,7 @@ using BinaryObjectScanner.Wrappers; namespace BurnOutSharp.PackerType { // TODO: Add extraction - public class NSIS : IPortableExecutableCheck, IScannable + public class NSIS : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -33,7 +33,26 @@ namespace BurnOutSharp.PackerType return null; } - + + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/PECompact.cs b/BurnOutSharp/PackerType/PECompact.cs index 833e3080..61749636 100644 --- a/BurnOutSharp/PackerType/PECompact.cs +++ b/BurnOutSharp/PackerType/PECompact.cs @@ -8,7 +8,7 @@ namespace BurnOutSharp.PackerType { // TODO: Better version detection - https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt // TODO: Add extraction - public class PECompact : IPortableExecutableCheck, IScannable + public class PECompact : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -42,7 +42,26 @@ namespace BurnOutSharp.PackerType return null; } - + + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/Petite.cs b/BurnOutSharp/PackerType/Petite.cs index 64d4f39c..74e1e6b8 100644 --- a/BurnOutSharp/PackerType/Petite.cs +++ b/BurnOutSharp/PackerType/Petite.cs @@ -8,7 +8,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class PEtite : IPortableExecutableCheck, IScannable + public class PEtite : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -26,6 +26,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/SetupFactory.cs b/BurnOutSharp/PackerType/SetupFactory.cs index da834ae0..f8010e00 100644 --- a/BurnOutSharp/PackerType/SetupFactory.cs +++ b/BurnOutSharp/PackerType/SetupFactory.cs @@ -10,7 +10,7 @@ namespace BurnOutSharp.PackerType // TODO: Add extraction, which is possible but the only tools available that can // do this seem to be Universal Extractor 2 and InstallExplorer (https://totalcmd.net/plugring/InstallExplorer.html) // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class SetupFactory : IPortableExecutableCheck, IScannable + public class SetupFactory : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -40,6 +40,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/SevenZipSFX.cs b/BurnOutSharp/PackerType/SevenZipSFX.cs index 94cc014a..c3d12932 100644 --- a/BurnOutSharp/PackerType/SevenZipSFX.cs +++ b/BurnOutSharp/PackerType/SevenZipSFX.cs @@ -8,7 +8,7 @@ using BinaryObjectScanner.Wrappers; namespace BurnOutSharp.PackerType { // TODO: Add extraction - public class SevenZipSFX : IPortableExecutableCheck, IScannable + public class SevenZipSFX : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -47,6 +47,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/Shrinker.cs b/BurnOutSharp/PackerType/Shrinker.cs index a314571c..9b8e2927 100644 --- a/BurnOutSharp/PackerType/Shrinker.cs +++ b/BurnOutSharp/PackerType/Shrinker.cs @@ -8,7 +8,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class Shrinker : IPortableExecutableCheck, IScannable + public class Shrinker : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -27,6 +27,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/UPX.cs b/BurnOutSharp/PackerType/UPX.cs index bf859c10..cad3e7f1 100644 --- a/BurnOutSharp/PackerType/UPX.cs +++ b/BurnOutSharp/PackerType/UPX.cs @@ -12,7 +12,7 @@ namespace BurnOutSharp.PackerType { // TODO: Add extraction // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class UPX : IPortableExecutableCheck, IScannable + public class UPX : IExtractable, IPortableExecutableCheck, IScannable { private static readonly Regex _oldUpxVersionMatch = new Regex(@"\$Id: UPX (.*?) Copyright \(C\)", RegexOptions.Compiled); @@ -65,6 +65,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/WinRARSFX.cs b/BurnOutSharp/PackerType/WinRARSFX.cs index 0fae19bc..c49328d3 100644 --- a/BurnOutSharp/PackerType/WinRARSFX.cs +++ b/BurnOutSharp/PackerType/WinRARSFX.cs @@ -11,7 +11,7 @@ using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.PackerType { - public class WinRARSFX : IPortableExecutableCheck, IScannable + public class WinRARSFX : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -32,6 +32,26 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { if (!File.Exists(file)) diff --git a/BurnOutSharp/PackerType/WinZipSFX.cs b/BurnOutSharp/PackerType/WinZipSFX.cs index 02acc722..3433ee2b 100644 --- a/BurnOutSharp/PackerType/WinZipSFX.cs +++ b/BurnOutSharp/PackerType/WinZipSFX.cs @@ -12,7 +12,7 @@ using static BinaryObjectScanner.Utilities.Dictionary; namespace BurnOutSharp.PackerType { - public class WinZipSFX : INewExecutableCheck, IPortableExecutableCheck, IScannable + public class WinZipSFX : IExtractable, INewExecutableCheck, IPortableExecutableCheck, IScannable { /// public string CheckNewExecutable(string file, NewExecutable nex, bool includeDebug) @@ -67,6 +67,25 @@ namespace BurnOutSharp.PackerType // TODO: Find a way to generically detect 2.X versions and improve exact version detection for SFX PE versions bundled with WinZip 11+ + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/WiseInstaller.cs b/BurnOutSharp/PackerType/WiseInstaller.cs index 3f83538a..c1a192fa 100644 --- a/BurnOutSharp/PackerType/WiseInstaller.cs +++ b/BurnOutSharp/PackerType/WiseInstaller.cs @@ -14,7 +14,7 @@ using Wise = WiseUnpacker.WiseUnpacker; namespace BurnOutSharp.PackerType { // https://raw.githubusercontent.com/wolfram77web/app-peid/master/userdb.txt - public class WiseInstaller : INewExecutableCheck, IPortableExecutableCheck, IScannable + public class WiseInstaller : IExtractable, INewExecutableCheck, IPortableExecutableCheck, IScannable { /// public string CheckNewExecutable(string file, NewExecutable nex, bool includeDebug) @@ -79,6 +79,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) { diff --git a/BurnOutSharp/PackerType/dotFuscator.cs b/BurnOutSharp/PackerType/dotFuscator.cs index 567c7422..5299a03f 100644 --- a/BurnOutSharp/PackerType/dotFuscator.cs +++ b/BurnOutSharp/PackerType/dotFuscator.cs @@ -9,7 +9,7 @@ using BinaryObjectScanner.Wrappers; namespace BurnOutSharp.PackerType { // TODO: Add extraction - public class dotFuscator : IPortableExecutableCheck, IScannable + public class dotFuscator : IExtractable, IPortableExecutableCheck, IScannable { /// public string CheckPortableExecutable(string file, PortableExecutable pex, bool includeDebug) @@ -30,6 +30,25 @@ namespace BurnOutSharp.PackerType return null; } + /// + public string Extract(string file) + { + if (!File.Exists(file)) + return null; + + using (var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read)) + { + return Extract(fs, file); + } + } + + /// + public string Extract(Stream stream, string file) + { + // Create extraction based off Scan + return null; + } + /// public ConcurrentDictionary> Scan(Scanner scanner, string file) {