diff --git a/Steamless.Unpacker.Variant20.x86/Main.cs b/Steamless.Unpacker.Variant20.x86/Main.cs index 35ae77e..7beb148 100644 --- a/Steamless.Unpacker.Variant20.x86/Main.cs +++ b/Steamless.Unpacker.Variant20.x86/Main.cs @@ -223,8 +223,13 @@ private bool Step2() // Determine the code section RVA.. var codeSectionRVA = this.File.NtHeaders.OptionalHeader.BaseOfCode; - if (this.StubHeader.CodeSectionVirtualAddress != 0) - codeSectionRVA = this.File.GetRvaFromVa(this.StubHeader.CodeSectionVirtualAddress); + + // TODO: This is not really ideal to do but for now this breaks support for other variants of this version.. + if (this.Options.UseExperimentalFeatures) + { + if (this.StubHeader.CodeSectionVirtualAddress != 0) + codeSectionRVA = this.File.GetRvaFromVa(this.StubHeader.CodeSectionVirtualAddress); + } // Get the code section.. var codeSection = this.File.GetOwnerSection(codeSectionRVA); diff --git a/Steamless.Unpacker.Variant20.x86/Properties/AssemblyInfo.cs b/Steamless.Unpacker.Variant20.x86/Properties/AssemblyInfo.cs index 388d0c9..e0701c0 100644 --- a/Steamless.Unpacker.Variant20.x86/Properties/AssemblyInfo.cs +++ b/Steamless.Unpacker.Variant20.x86/Properties/AssemblyInfo.cs @@ -36,5 +36,5 @@ [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: Guid("4f11f26d-2946-467f-a4e9-9e2a619a1fd3")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("1.0.0.1")] +[assembly: AssemblyFileVersion("1.0.0.1")] \ No newline at end of file diff --git a/Steamless/Model/AutomaticPlugin.cs b/Steamless/Model/AutomaticPlugin.cs index 44f06da..c2c5793 100644 --- a/Steamless/Model/AutomaticPlugin.cs +++ b/Steamless/Model/AutomaticPlugin.cs @@ -27,7 +27,10 @@ namespace Steamless.Model { using API; using API.Model; + using API.PE32; + using API.PE64; using API.Services; + using Steamless.API.Events; using System; using System.Linq; using System.Windows; @@ -36,6 +39,11 @@ namespace Steamless.Model [SteamlessApiVersion(1, 0)] internal class AutomaticPlugin : SteamlessPlugin { + /// + /// Internal logging service instance. + /// + private LoggingService m_LoggingService; + /// /// Gets the author of this plugin. /// @@ -56,6 +64,16 @@ internal class AutomaticPlugin : SteamlessPlugin /// public override Version Version => new Version(1, 0, 0, 0); + /// + /// Internal wrapper to log a message. + /// + /// + /// + private void Log(string msg, LogMessageType type) + { + this.m_LoggingService.OnAddLogMessage(this, new LogMessageEventArgs(msg, type)); + } + /// /// Initialize function called when this plugin is first loaded. /// @@ -63,6 +81,7 @@ internal class AutomaticPlugin : SteamlessPlugin /// public override bool Initialize(LoggingService logService) { + this.m_LoggingService = logService; return true; } @@ -94,7 +113,43 @@ public override bool ProcessFile(string file, SteamlessOptions options) return false; // Query the plugin list for a plugin to process the file.. - return (from p in plugins where p != this where p.CanProcessFile(file) select p.ProcessFile(file, options)).FirstOrDefault(); + var ret = (from p in plugins where p != this where p.CanProcessFile(file) select p.ProcessFile(file, options)).FirstOrDefault(); + if (ret) + return ret; + + // Determine if the file was not packed with SteamStub.. + try + { + // First attempt to read the file as 32bit.. + dynamic f = new Pe32File(file); + + if (f.Parse()) + { + // Check if the file is 64bit.. + if (f.IsFile64Bit()) + { + f = new Pe64File(file); + if (!f.Parse()) + return false; + } + + // Ensure the file had a .bind section.. + if (!f.HasSection(".bind")) + { + this.Log("", LogMessageType.Error); + this.Log("This file does not appear to be packed with SteamStub!", LogMessageType.Error); + this.Log("File missing expected '.bind' section!", LogMessageType.Error); + this.Log("", LogMessageType.Error); + return false; + } + } + } + catch + { + return false; + } + + return false; } } } \ No newline at end of file diff --git a/Steamless/Model/Tasks/LoadPluginsTask.cs b/Steamless/Model/Tasks/LoadPluginsTask.cs index f7e56b7..abd2c72 100644 --- a/Steamless/Model/Tasks/LoadPluginsTask.cs +++ b/Steamless/Model/Tasks/LoadPluginsTask.cs @@ -73,7 +73,9 @@ public override Task DoTask() }); // Add the automatic plugin at the start of the list.. - sorted.Insert(0, new AutomaticPlugin()); + var auto = new AutomaticPlugin(); + auto.Initialize(vml.LoggingService); + sorted.Insert(0, auto); // Set the plugins.. vml.MainWindow.Plugins = new ObservableCollection(sorted); diff --git a/Steamless/Properties/AssemblyInfo.cs b/Steamless/Properties/AssemblyInfo.cs index 129ecfa..3e4cd6a 100644 --- a/Steamless/Properties/AssemblyInfo.cs +++ b/Steamless/Properties/AssemblyInfo.cs @@ -37,5 +37,5 @@ [assembly: AssemblyCulture("")] [assembly: ComVisible(false)] [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)] -[assembly: AssemblyVersion("3.1.0.0")] -[assembly: AssemblyFileVersion("3.1.0.0")] \ No newline at end of file +[assembly: AssemblyVersion("3.1.0.1")] +[assembly: AssemblyFileVersion("3.1.0.1")] \ No newline at end of file