diff --git a/BinaryObjectScanner/FileType/Executable.cs b/BinaryObjectScanner/FileType/Executable.cs index 64b112fd..b3cb1dd8 100644 --- a/BinaryObjectScanner/FileType/Executable.cs +++ b/BinaryObjectScanner/FileType/Executable.cs @@ -11,25 +11,12 @@ namespace BinaryObjectScanner.FileType /// /// Executable or library /// - public abstract class Executable : DetectableBase, IExtractable + public abstract class Executable : DetectableBase where T : WrapperBase { /// public Executable(T? wrapper) : base(wrapper) { } - /// - public bool Extract(string file, string outDir, bool includeDebug) - { - if (!File.Exists(file)) - return false; - - using var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); - return Extract(fs, file, outDir, includeDebug); - } - - /// - public abstract bool Extract(Stream? stream, string file, string outDir, bool includeDebug); - #region Check Runners /// diff --git a/BinaryObjectScanner/FileType/LinearExecutable.cs b/BinaryObjectScanner/FileType/LinearExecutable.cs index 6f36bde8..7bb2f860 100644 --- a/BinaryObjectScanner/FileType/LinearExecutable.cs +++ b/BinaryObjectScanner/FileType/LinearExecutable.cs @@ -43,8 +43,5 @@ namespace BinaryObjectScanner.FileType return string.Join(";", [.. protectionList]); } - - /// - public override bool Extract(Stream? stream, string file, string outDir, bool includeDebug) => false; } } diff --git a/BinaryObjectScanner/FileType/MSDOS.cs b/BinaryObjectScanner/FileType/MSDOS.cs index a33254c7..56983a06 100644 --- a/BinaryObjectScanner/FileType/MSDOS.cs +++ b/BinaryObjectScanner/FileType/MSDOS.cs @@ -43,8 +43,5 @@ namespace BinaryObjectScanner.FileType return string.Join(";", [.. protectionList]); } - - /// - public override bool Extract(Stream? stream, string file, string outDir, bool includeDebug) => false; } } diff --git a/BinaryObjectScanner/FileType/NewExecutable.cs b/BinaryObjectScanner/FileType/NewExecutable.cs index 940a4e1b..11c36182 100644 --- a/BinaryObjectScanner/FileType/NewExecutable.cs +++ b/BinaryObjectScanner/FileType/NewExecutable.cs @@ -1,7 +1,7 @@ -using System; using System.Collections.Generic; using System.IO; using BinaryObjectScanner.Data; +using BinaryObjectScanner.Interfaces; using SabreTools.Serialization.Wrappers; namespace BinaryObjectScanner.FileType @@ -9,7 +9,7 @@ namespace BinaryObjectScanner.FileType /// /// New executable (NE) /// - public class NewExecutable : Executable + public class NewExecutable : Executable, IExtractable { /// public NewExecutable(SabreTools.Serialization.Wrappers.NewExecutable? wrapper) : base(wrapper) { } @@ -47,7 +47,17 @@ namespace BinaryObjectScanner.FileType } /// - public override bool Extract(Stream? stream, string file, string outDir, bool includeDebug) + public bool Extract(string file, string outDir, bool includeDebug) + { + if (!File.Exists(file)) + return false; + + using var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + return Extract(fs, file, outDir, includeDebug); + } + + /// + public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { // Create the wrapper var wrapper = WrapperFactory.CreateExecutableWrapper(stream); diff --git a/BinaryObjectScanner/FileType/PortableExecutable.cs b/BinaryObjectScanner/FileType/PortableExecutable.cs index 79e6650b..f0f72dce 100644 --- a/BinaryObjectScanner/FileType/PortableExecutable.cs +++ b/BinaryObjectScanner/FileType/PortableExecutable.cs @@ -1,6 +1,7 @@ using System.Collections.Generic; using System.IO; using BinaryObjectScanner.Data; +using BinaryObjectScanner.Interfaces; using SabreTools.Serialization.Wrappers; namespace BinaryObjectScanner.FileType @@ -8,7 +9,7 @@ namespace BinaryObjectScanner.FileType /// /// Portable executable (PE) /// - public class PortableExecutable : Executable + public class PortableExecutable : Executable, IExtractable { /// public PortableExecutable(SabreTools.Serialization.Wrappers.PortableExecutable? wrapper) : base(wrapper) { } @@ -46,7 +47,17 @@ namespace BinaryObjectScanner.FileType } /// - public override bool Extract(Stream? stream, string file, string outDir, bool includeDebug) + public bool Extract(string file, string outDir, bool includeDebug) + { + if (!File.Exists(file)) + return false; + + using var fs = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite); + return Extract(fs, file, outDir, includeDebug); + } + + /// + public bool Extract(Stream? stream, string file, string outDir, bool includeDebug) { // Create the wrapper var wrapper = WrapperFactory.CreateExecutableWrapper(stream);