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)
{