├── .github └── FUNDING.yml ├── .gitignore ├── ExamplePlugin ├── ExamplePlugin.csproj ├── Main.cs └── Properties │ └── AssemblyInfo.cs ├── LICENSE ├── README.md ├── Steamless.API ├── Crypto │ └── AesHelper.cs ├── Events │ ├── LogMessageEventArgs.cs │ └── LogMessageType.cs ├── Extensions │ └── FileStreamExtensions.cs ├── Model │ ├── NavigatedEventArgs.cs │ ├── NotifiableModel.cs │ ├── SteamlessOptions.cs │ ├── SteamlessPlugin.cs │ └── ViewModelBase.cs ├── PE32 │ ├── NativeApi32.cs │ ├── Pe32File.cs │ └── Pe32Helpers.cs ├── PE64 │ ├── NativeApi64.cs │ ├── Pe64File.cs │ └── Pe64Helpers.cs ├── Properties │ └── AssemblyInfo.cs ├── Services │ └── LoggingService.cs ├── Steamless.API.csproj ├── SteamlessApiVersionAttribute.cs └── SteamlessEvents.cs ├── Steamless.CLI ├── App.config ├── Program.cs ├── Properties │ └── AssemblyInfo.cs ├── Steamless.CLI.csproj └── steam.ico ├── Steamless.Unpacker.Variant10.x86 ├── Classes │ └── SteamStubHeader.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs └── Steamless.Unpacker.Variant10.x86.csproj ├── Steamless.Unpacker.Variant20.x86 ├── Classes │ ├── SteamStubDrmFlags.cs │ ├── SteamStubHeader.cs │ └── SteamStubHelpers.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs ├── SharpDisasm.dll └── Steamless.Unpacker.Variant20.x86.csproj ├── Steamless.Unpacker.Variant21.x86 ├── Classes │ ├── SteamStubDrmFlags.cs │ ├── SteamStubHeader.cs │ └── SteamStubHelpers.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs ├── SharpDisasm.dll └── Steamless.Unpacker.Variant21.x86.csproj ├── Steamless.Unpacker.Variant30.x64 ├── Classes │ ├── SteamStubDrmFlags.cs │ ├── SteamStubHeader.cs │ └── SteamStubHelpers.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs └── Steamless.Unpacker.Variant30.x64.csproj ├── Steamless.Unpacker.Variant30.x86 ├── Classes │ ├── SteamStubDrmFlags.cs │ ├── SteamStubHeader.cs │ └── SteamStubHelpers.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs └── Steamless.Unpacker.Variant30.x86.csproj ├── Steamless.Unpacker.Variant31.x64 ├── Classes │ ├── SteamStubDrmFlags.cs │ ├── SteamStubHeader.cs │ └── SteamStubHelpers.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs └── Steamless.Unpacker.Variant31.x64.csproj ├── Steamless.Unpacker.Variant31.x86 ├── Classes │ ├── SteamStubDrmFlags.cs │ ├── SteamStubHeader.cs │ └── SteamStubHelpers.cs ├── Main.cs ├── Properties │ └── AssemblyInfo.cs └── Steamless.Unpacker.Variant31.x86.csproj ├── Steamless.sln ├── Steamless ├── App.config ├── App.xaml ├── App.xaml.cs ├── Assets │ ├── Animations.xaml │ ├── Controls.CheckBox.xaml │ ├── Controls.Scrollbars.xaml │ ├── Controls.xaml │ ├── Theme.xaml │ ├── Window.xaml │ ├── icons.xaml │ ├── steam.ico │ └── steam.png ├── Classes │ ├── ControlsHelper.cs │ └── GridViewColumnWidthFromItemsBehavior.cs ├── Embedded │ ├── GalaSoft.MvvmLight.Extras.dll │ ├── GalaSoft.MvvmLight.dll │ ├── Microsoft.Practices.ServiceLocation.dll │ ├── Newtonsoft.Json.dll │ └── System.Windows.Interactivity.dll ├── Model │ ├── ApplicationState.cs │ ├── AutomaticPlugin.cs │ ├── DataService.cs │ ├── IDataService.cs │ └── Tasks │ │ ├── BaseTask.cs │ │ ├── LoadPluginsTask.cs │ │ ├── StartSteamlessTask.cs │ │ └── StatusTask.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── Steamless.csproj ├── View │ ├── AboutView.xaml │ ├── AboutView.xaml.cs │ ├── MainView.xaml │ ├── MainView.xaml.cs │ ├── MainWindow.xaml │ ├── MainWindow.xaml.cs │ ├── SplashView.xaml │ └── SplashView.xaml.cs └── ViewModel │ ├── MainWindowViewModel.cs │ └── ViewModelLocator.cs └── repo └── steamless.png /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | #github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | #patreon: # Replace with a single Patreon username 5 | #open_collective: # Replace with a single Open Collective username 6 | #ko_fi: # Replace with a single Ko-fi username 7 | #tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | #community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | #liberapay: # Replace with a single Liberapay username 10 | #issuehunt: # Replace with a single IssueHunt username 11 | #otechie: # Replace with a single Otechie username 12 | #custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] 13 | 14 | github: [atom0s] 15 | patreon: atom0s 16 | custom: https://www.paypal.me/atom0s 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # User-specific files 5 | *.suo 6 | *.user 7 | *.userosscache 8 | *.sln.docstates 9 | 10 | # User-specific files (MonoDevelop/Xamarin Studio) 11 | *.userprefs 12 | 13 | # Build results 14 | [Dd]ebug/ 15 | [Dd]ebugPublic/ 16 | [Rr]elease/ 17 | [Rr]eleases/ 18 | x64/ 19 | x86/ 20 | build/ 21 | bld/ 22 | [Bb]in/ 23 | [Oo]bj/ 24 | 25 | # Visual Studo 2015 cache/options directory 26 | .vs/ 27 | 28 | # MSTest test Results 29 | [Tt]est[Rr]esult*/ 30 | [Bb]uild[Ll]og.* 31 | 32 | # NUNIT 33 | *.VisualState.xml 34 | TestResult.xml 35 | 36 | # Build Results of an ATL Project 37 | [Dd]ebugPS/ 38 | [Rr]eleasePS/ 39 | dlldata.c 40 | 41 | *_i.c 42 | *_p.c 43 | *_i.h 44 | *.ilk 45 | *.meta 46 | *.obj 47 | *.pch 48 | *.pdb 49 | *.pgc 50 | *.pgd 51 | *.rsp 52 | *.sbr 53 | *.tlb 54 | *.tli 55 | *.tlh 56 | *.tmp 57 | *.tmp_proj 58 | *.log 59 | *.vspscc 60 | *.vssscc 61 | .builds 62 | *.pidb 63 | *.svclog 64 | *.scc 65 | Thumbs.db 66 | 67 | # Chutzpah Test files 68 | _Chutzpah* 69 | 70 | # Visual C++ cache files 71 | ipch/ 72 | *.aps 73 | *.ncb 74 | *.opensdf 75 | *.sdf 76 | *.cachefile 77 | 78 | # Visual Studio profiler 79 | *.psess 80 | *.vsp 81 | *.vspx 82 | 83 | # TFS 2012 Local Workspace 84 | $tf/ 85 | 86 | # Guidance Automation Toolkit 87 | *.gpState 88 | 89 | # ReSharper is a .NET coding add-in 90 | _ReSharper*/ 91 | *.[Rr]e[Ss]harper 92 | *.DotSettings.user 93 | 94 | # JustCode is a .NET coding addin-in 95 | .JustCode 96 | 97 | # TeamCity is a build add-in 98 | _TeamCity* 99 | 100 | # DotCover is a Code Coverage Tool 101 | *.dotCover 102 | 103 | # NCrunch 104 | _NCrunch_* 105 | .*crunch*.local.xml 106 | 107 | # MightyMoose 108 | *.mm.* 109 | AutoTest.Net/ 110 | 111 | # Web workbench (sass) 112 | .sass-cache/ 113 | 114 | # Installshield output folder 115 | [Ee]xpress/ 116 | 117 | # DocProject is a documentation generator add-in 118 | DocProject/buildhelp/ 119 | DocProject/Help/*.HxT 120 | DocProject/Help/*.HxC 121 | DocProject/Help/*.hhc 122 | DocProject/Help/*.hhk 123 | DocProject/Help/*.hhp 124 | DocProject/Help/Html2 125 | DocProject/Help/html 126 | 127 | # Click-Once directory 128 | publish/ 129 | 130 | # Publish Web Output 131 | *.[Pp]ublish.xml 132 | *.azurePubxml 133 | # TODO: Comment the next line if you want to checkin your web deploy settings 134 | # but database connection strings (with potential passwords) will be unencrypted 135 | *.pubxml 136 | *.publishproj 137 | 138 | # NuGet Packages 139 | *.nupkg 140 | # The packages folder can be ignored because of Package Restore 141 | **/packages/* 142 | # except build/, which is used as an MSBuild target. 143 | !**/packages/build/ 144 | # Uncomment if necessary however generally it will be regenerated when needed 145 | #!**/packages/repositories.config 146 | 147 | # Windows Azure Build Output 148 | csx/ 149 | *.build.csdef 150 | 151 | # Windows Store app package directory 152 | AppPackages/ 153 | 154 | # Others 155 | *.[Cc]ache 156 | ClientBin/ 157 | [Ss]tyle[Cc]op.* 158 | ~$* 159 | *~ 160 | *.dbmdl 161 | *.dbproj.schemaview 162 | *.pfx 163 | *.publishsettings 164 | node_modules/ 165 | bower_components/ 166 | 167 | # RIA/Silverlight projects 168 | Generated_Code/ 169 | 170 | # Backup & report files from converting an old project file 171 | # to a newer Visual Studio version. Backup files are not needed, 172 | # because we have git ;-) 173 | _UpgradeReport_Files/ 174 | Backup*/ 175 | UpgradeLog*.XML 176 | UpgradeLog*.htm 177 | 178 | # SQL Server files 179 | *.mdf 180 | *.ldf 181 | 182 | # Business Intelligence projects 183 | *.rdl.data 184 | *.bim.layout 185 | *.bim_*.settings 186 | 187 | # Microsoft Fakes 188 | FakesAssemblies/ 189 | 190 | # Node.js Tools for Visual Studio 191 | .ntvs_analysis.dat 192 | 193 | # Visual Studio 6 build log 194 | *.plg 195 | 196 | # Visual Studio 6 workspace options file 197 | *.opt 198 | -------------------------------------------------------------------------------- /ExamplePlugin/ExamplePlugin.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {97AC964A-E56F-415C-BAEA-D503E3D4D7B8} 8 | Library 9 | Properties 10 | ExamplePlugin 11 | ExamplePlugin 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | TRACE;DEBUG 19 | 20 | 21 | x86 22 | ..\Steamless\bin\x86\Release\Plugins\ 23 | true 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | {56c95629-3b34-47fe-b988-04274409294f} 42 | Steamless.API 43 | False 44 | 45 | 46 | 47 | 54 | -------------------------------------------------------------------------------- /ExamplePlugin/Main.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace ExamplePlugin 27 | { 28 | using Steamless.API; 29 | using Steamless.API.Events; 30 | using Steamless.API.Model; 31 | using Steamless.API.Services; 32 | using System; 33 | using System.Reflection; 34 | 35 | [SteamlessApiVersion(1, 0)] 36 | public class Main : SteamlessPlugin 37 | { 38 | /// 39 | /// Internal logging service instance. 40 | /// 41 | private LoggingService m_LoggingService; 42 | 43 | /// 44 | /// Gets the author of this plugin. 45 | /// 46 | public override string Author => "Steamless Development Team"; 47 | 48 | /// 49 | /// Gets the name of this plugin. 50 | /// 51 | public override string Name => "Example Plugin"; 52 | 53 | /// 54 | /// Gets the description of this plugin. 55 | /// 56 | public override string Description => "A simple plugin example."; 57 | 58 | /// 59 | /// Gets the version of this plugin. 60 | /// 61 | public override Version Version => Assembly.GetExecutingAssembly().GetName().Version; 62 | 63 | /// 64 | /// Initialize function called when this plugin is first loaded. 65 | /// 66 | /// 67 | /// 68 | public override bool Initialize(LoggingService logService) 69 | { 70 | this.m_LoggingService = logService; 71 | this.m_LoggingService.OnAddLogMessage(this, new LogMessageEventArgs("ExamplePlugin was initialized!", LogMessageType.Debug)); 72 | 73 | return true; 74 | } 75 | 76 | /// 77 | /// Processing function called when a file is being unpacked. Allows plugins to check the file 78 | /// and see if it can handle the file for its intended purpose. 79 | /// 80 | /// 81 | /// 82 | public override bool CanProcessFile(string file) 83 | { 84 | this.m_LoggingService.OnAddLogMessage(this, new LogMessageEventArgs("ExamplePlugin was asked to check if it can process a file!", LogMessageType.Debug)); 85 | 86 | return false; 87 | } 88 | 89 | /// 90 | /// Processing function called to allow the plugin to process the file. 91 | /// 92 | /// 93 | /// 94 | /// 95 | public override bool ProcessFile(string file, SteamlessOptions options) 96 | { 97 | this.m_LoggingService.OnAddLogMessage(this, new LogMessageEventArgs("ExamplePlugin was asked to process a file!", LogMessageType.Debug)); 98 | 99 | return false; 100 | } 101 | } 102 | } -------------------------------------------------------------------------------- /ExamplePlugin/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("ExamplePlugin")] 30 | [assembly: AssemblyDescription("Example plugin used with Steamless v3.")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("ExamplePlugin")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("97ac964a-e56f-415c-baea-d503e3d4d7b8")] 39 | [assembly: AssemblyVersion("1.0.0.0")] 40 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 2 | To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. -------------------------------------------------------------------------------- /Steamless.API/Events/LogMessageEventArgs.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Events 27 | { 28 | using System; 29 | 30 | public class LogMessageEventArgs : EventArgs 31 | { 32 | /// 33 | /// Default Constructor 34 | /// 35 | public LogMessageEventArgs() 36 | { 37 | this.Message = string.Empty; 38 | this.MessageType = LogMessageType.Debug; 39 | } 40 | 41 | /// 42 | /// Overloaded Constructor 43 | /// 44 | /// 45 | /// 46 | public LogMessageEventArgs(string msg, LogMessageType type) 47 | { 48 | this.Message = msg; 49 | this.MessageType = type; 50 | } 51 | 52 | /// 53 | /// Gets or sets the message text. 54 | /// 55 | public string Message { get; set; } 56 | 57 | /// 58 | /// Gets or sets the type of message. 59 | /// 60 | public LogMessageType MessageType { get; set; } 61 | } 62 | } -------------------------------------------------------------------------------- /Steamless.API/Events/LogMessageType.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Events 27 | { 28 | /// 29 | /// Log Message Type Enumeration 30 | /// 31 | public enum LogMessageType 32 | { 33 | /// 34 | /// Used for general purpose messages. 35 | /// 36 | Information = 0, 37 | 38 | /// 39 | /// Used for successful messages. 40 | /// 41 | Success = 1, 42 | 43 | /// 44 | /// Used for warnings. 45 | /// 46 | Warning = 2, 47 | 48 | /// 49 | /// Used for errors. 50 | /// 51 | Error = 3, 52 | 53 | /// 54 | /// Used for debug messages. 55 | /// 56 | Debug = 4 57 | } 58 | } -------------------------------------------------------------------------------- /Steamless.API/Extensions/FileStreamExtensions.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Extensions 27 | { 28 | using System.IO; 29 | 30 | public static class FileStreamExtensions 31 | { 32 | /// 33 | /// Writes a byte array to the file stream. 34 | /// 35 | /// 36 | /// 37 | public static void WriteBytes(this FileStream fStream, byte[] data) 38 | { 39 | fStream.Write(data, 0, data.Length); 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /Steamless.API/Model/NavigatedEventArgs.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Model 27 | { 28 | using System; 29 | 30 | public class NavigatedEventArgs : EventArgs 31 | { 32 | /// 33 | /// Gets or sets the previous view being navigated from. 34 | /// 35 | public ViewModelBase PreviousView { get; internal set; } 36 | 37 | /// 38 | /// Gets or sets the current view being navigated to. 39 | /// 40 | public ViewModelBase CurrentView { get; internal set; } 41 | } 42 | } -------------------------------------------------------------------------------- /Steamless.API/Model/NotifiableModel.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Model 27 | { 28 | using System; 29 | using System.Collections.Generic; 30 | using System.ComponentModel; 31 | 32 | [Serializable] 33 | public class NotifiableModel : INotifyPropertyChanged 34 | { 35 | /// 36 | /// Internal properties container. 37 | /// 38 | private readonly Dictionary m_Properties; 39 | 40 | /// 41 | /// Default Constructor 42 | /// 43 | public NotifiableModel() 44 | { 45 | this.m_Properties = new Dictionary(); 46 | } 47 | 48 | /// 49 | /// Event triggered when a property is changed. 50 | /// 51 | public event PropertyChangedEventHandler PropertyChanged; 52 | 53 | /// 54 | /// Method used to raise the PropertyChanged event. 55 | /// 56 | /// 57 | public void OnPropertyChanged(string prop) 58 | { 59 | this.PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop)); 60 | } 61 | 62 | /// 63 | /// Method to raise the PropertyChanged event. 64 | /// 65 | /// 66 | protected void RaisePropertyChanged(string property) 67 | { 68 | if (string.IsNullOrEmpty(property)) 69 | throw new ArgumentNullException(property); 70 | this.OnPropertyChanged(property); 71 | } 72 | 73 | /// 74 | /// Gets a property from the internal container. 75 | /// 76 | /// 77 | /// 78 | /// 79 | protected T Get(string prop) 80 | { 81 | if (this.m_Properties.ContainsKey(prop)) 82 | { 83 | return (T)this.m_Properties[prop]; 84 | } 85 | return default(T); 86 | } 87 | 88 | /// 89 | /// Sets a property in the internal container. 90 | /// 91 | /// 92 | /// 93 | /// 94 | protected void Set(string prop, T val) 95 | { 96 | var curr = this.Get(prop); 97 | if (Equals(curr, val)) 98 | return; 99 | 100 | this.m_Properties[prop] = val; 101 | this.OnPropertyChanged(prop); 102 | } 103 | } 104 | } -------------------------------------------------------------------------------- /Steamless.API/Model/SteamlessOptions.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Model 27 | { 28 | public class SteamlessOptions : NotifiableModel 29 | { 30 | /// 31 | /// Default Constructor 32 | /// 33 | public SteamlessOptions() 34 | { 35 | this.VerboseOutput = true; 36 | this.KeepBindSection = false; 37 | this.DumpPayloadToDisk = false; 38 | this.DumpSteamDrmpToDisk = false; 39 | this.UseExperimentalFeatures = false; 40 | this.DontRealignSections = true; 41 | this.ZeroDosStubData = true; 42 | this.RecalculateFileChecksum = false; 43 | } 44 | 45 | /// 46 | /// Gets or sets the verbose output option value. 47 | /// 48 | public bool VerboseOutput 49 | { 50 | get => this.Get("VerboseOutput"); 51 | set => this.Set("VerboseOutput", value); 52 | } 53 | 54 | /// 55 | /// Gets or sets the keep bind section option value. 56 | /// 57 | public bool KeepBindSection 58 | { 59 | get => this.Get("KeepBindSection"); 60 | set => this.Set("KeepBindSection", value); 61 | } 62 | 63 | /// 64 | /// Gets or sets the dump payload to disk option value. 65 | /// 66 | public bool DumpPayloadToDisk 67 | { 68 | get => this.Get("DumpPayloadToDisk"); 69 | set => this.Set("DumpPayloadToDisk", value); 70 | } 71 | 72 | /// 73 | /// Gets or sets the dump SteamDRMP.dll to disk option value. 74 | /// 75 | public bool DumpSteamDrmpToDisk 76 | { 77 | get => this.Get("DumpSteamDrmpToDisk"); 78 | set => this.Set("DumpSteamDrmpToDisk", value); 79 | } 80 | 81 | /// 82 | /// Gets or sets the use experimental features option value. 83 | /// 84 | public bool UseExperimentalFeatures 85 | { 86 | get => this.Get("UseExperimentalFeatures"); 87 | set => this.Set("UseExperimentalFeatures", value); 88 | } 89 | 90 | /// 91 | /// Gets or sets the don't realign sections option value. 92 | /// 93 | public bool DontRealignSections 94 | { 95 | get => this.Get("DontRealignSections"); 96 | set => this.Set("DontRealignSections", value); 97 | } 98 | 99 | /// 100 | /// Gets or sets if the DOS stub data should be zeroed. 101 | /// 102 | public bool ZeroDosStubData 103 | { 104 | get => this.Get("ZeroDosStubData"); 105 | set => this.Set("ZeroDosStubData", value); 106 | } 107 | 108 | /// 109 | /// Gets or sets if the file checksum should be recalculated. 110 | /// 111 | public bool RecalculateFileChecksum 112 | { 113 | get => this.Get("RecalculateFileChecksum"); 114 | set => this.Set("RecalculateFileChecksum", value); 115 | } 116 | } 117 | } -------------------------------------------------------------------------------- /Steamless.API/Model/SteamlessPlugin.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Model 27 | { 28 | using Services; 29 | using System; 30 | 31 | public abstract class SteamlessPlugin : IDisposable 32 | { 33 | /// 34 | /// Gets the author of this plugin. 35 | /// 36 | public virtual string Author => "Steamless Development Team"; 37 | 38 | /// 39 | /// Gets the name of this plugin. 40 | /// 41 | public virtual string Name => "Steamless Plugin"; 42 | 43 | /// 44 | /// Gets the description of this plugin. 45 | /// 46 | public virtual string Description => "The Steamless base plugin class."; 47 | 48 | /// 49 | /// Gets the version of this plugin. 50 | /// 51 | public virtual Version Version => new Version(1, 0, 0, 0); 52 | 53 | /// 54 | /// Deconstructor 55 | /// 56 | ~SteamlessPlugin() 57 | { 58 | this.Dispose(false); 59 | } 60 | 61 | /// 62 | /// IDisposable implementation. 63 | /// 64 | public void Dispose() 65 | { 66 | this.Dispose(true); 67 | GC.SuppressFinalize(this); 68 | } 69 | 70 | /// 71 | /// IDisposable implementation. 72 | /// 73 | /// 74 | protected virtual void Dispose(bool disposing) 75 | { 76 | } 77 | 78 | /// 79 | /// Initialize function called when this plugin is first loaded. 80 | /// 81 | /// 82 | /// 83 | public virtual bool Initialize(LoggingService logService) 84 | { 85 | return false; 86 | } 87 | 88 | /// 89 | /// Processing function called when a file is being unpacked. Allows plugins to check the file 90 | /// and see if it can handle the file for its intended purpose. 91 | /// 92 | /// 93 | /// 94 | public virtual bool CanProcessFile(string file) 95 | { 96 | return false; 97 | } 98 | 99 | /// 100 | /// Processing function called to allow the plugin to process the file. 101 | /// 102 | /// 103 | /// 104 | /// 105 | public virtual bool ProcessFile(string file, SteamlessOptions options) 106 | { 107 | return false; 108 | } 109 | 110 | /// 111 | /// Returns a string that represents the current object. 112 | /// 113 | /// 114 | /// A string that represents the current object. 115 | /// 116 | public string DisplayName => this.Name + " - " + this.Description; 117 | } 118 | } -------------------------------------------------------------------------------- /Steamless.API/Model/ViewModelBase.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Model 27 | { 28 | using System; 29 | using System.ComponentModel; 30 | using System.Windows; 31 | 32 | public abstract class ViewModelBase : NotifiableModel 33 | { 34 | /// 35 | /// Default Constructor 36 | /// 37 | protected ViewModelBase() 38 | { 39 | this.Events = new EventHandlerList(); 40 | } 41 | 42 | /// 43 | /// Internal static design mode flag. 44 | /// 45 | private static bool? m_IsInDesignMode; 46 | 47 | /// 48 | /// Gets if this ViewModelBase is in design mode. 49 | /// 50 | public bool IsInDesignMode => IsInDesignModeStatic; 51 | 52 | /// 53 | /// Gets the static ViewModelBase design mode flag. 54 | /// 55 | public static bool IsInDesignModeStatic 56 | { 57 | get 58 | { 59 | if (m_IsInDesignMode.HasValue) 60 | return m_IsInDesignMode.Value; 61 | 62 | var isInDesignModeProperty = DesignerProperties.IsInDesignModeProperty; 63 | m_IsInDesignMode = (bool)DependencyPropertyDescriptor.FromProperty(isInDesignModeProperty, typeof(FrameworkElement)).Metadata.DefaultValue; 64 | return m_IsInDesignMode.Value; 65 | } 66 | } 67 | 68 | /// 69 | /// Gets or sets the internal event handler list. 70 | /// 71 | private EventHandlerList Events 72 | { 73 | get => this.Get("Events"); 74 | set => this.Set("Events", value); 75 | } 76 | 77 | /// 78 | /// Event to subscribe to to be notified when a view is navigated from. 79 | /// 80 | public event EventHandler NavigatedFrom 81 | { 82 | add => this.Events.AddHandler("NavigatedFromEvent", value); 83 | remove => this.Events.RemoveHandler("NavigatedFromEvent", value); 84 | } 85 | 86 | /// 87 | /// Event to subscribe to to be notified when a view is navigated to. 88 | /// 89 | public event EventHandler NavigatedTo 90 | { 91 | add => this.Events.AddHandler("NavigatedToEvent", value); 92 | remove => this.Events.RemoveHandler("NavigatedToEvent", value); 93 | } 94 | 95 | /// 96 | /// Internal navigated from event invoker. 97 | /// 98 | /// 99 | public void OnNavigatedFrom(NavigatedEventArgs e) 100 | { 101 | var eventHandler = (EventHandler)this.Events["NavigatedFromEvent"]; 102 | eventHandler?.Invoke(this, e); 103 | } 104 | 105 | /// 106 | /// Internal navigated to event invoker. 107 | /// 108 | /// 109 | public void OnNavigatedTo(NavigatedEventArgs e) 110 | { 111 | var eventHandler = (EventHandler)this.Events["NavigatedToEvent"]; 112 | eventHandler?.Invoke(this, e); 113 | } 114 | } 115 | } -------------------------------------------------------------------------------- /Steamless.API/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.API")] 30 | [assembly: AssemblyDescription("SteamStub API Module")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.API")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("56c95629-3b34-47fe-b988-04274409294f")] 39 | [assembly: AssemblyVersion("1.0.0.8")] 40 | [assembly: AssemblyFileVersion("1.0.0.8")] -------------------------------------------------------------------------------- /Steamless.API/Services/LoggingService.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API.Services 27 | { 28 | using Events; 29 | using System; 30 | 31 | public class LoggingService 32 | { 33 | /// 34 | /// Adds a log message to the logging pane of Steamless. 35 | /// 36 | public event SteamlessEvents.AddLogMessageEventHandler AddLogMessage; 37 | 38 | /// 39 | /// Clears the logging pane of Steamless. 40 | /// 41 | public event SteamlessEvents.ClearLogMessagesEventHandler ClearLogMessages; 42 | 43 | /// 44 | /// Invokes the AddLogMessage event to add a log message to Steamless. 45 | /// 46 | /// 47 | /// 48 | public virtual void OnAddLogMessage(object sender, LogMessageEventArgs e) 49 | { 50 | this.AddLogMessage?.Invoke(sender, e); 51 | } 52 | 53 | /// 54 | /// Invokes the ClearLogMessages event to remove all current log messages from Steamless. 55 | /// 56 | /// 57 | /// 58 | public virtual void OnClearLogMessages(object sender, EventArgs e) 59 | { 60 | this.ClearLogMessages?.Invoke(sender, e); 61 | } 62 | } 63 | } -------------------------------------------------------------------------------- /Steamless.API/Steamless.API.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {56C95629-3B34-47FE-B988-04274409294F} 8 | Library 9 | Properties 10 | Steamless.API 11 | Steamless.API 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | TRACE;DEBUG 19 | 20 | 21 | x86 22 | ..\Steamless\bin\x86\Release\Plugins\ 23 | true 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 69 | -------------------------------------------------------------------------------- /Steamless.API/SteamlessApiVersionAttribute.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API 27 | { 28 | using System; 29 | 30 | [AttributeUsage(AttributeTargets.Class, Inherited = false)] 31 | public class SteamlessApiVersionAttribute : Attribute 32 | { 33 | /// 34 | /// Default Constructor 35 | /// 36 | /// 37 | /// 38 | public SteamlessApiVersionAttribute(int major, int minor) 39 | { 40 | this.Version = new Version(major, minor); 41 | } 42 | 43 | /// 44 | /// Gets or sets the API version of this attribute. 45 | /// 46 | public Version Version { get; internal set; } 47 | } 48 | } -------------------------------------------------------------------------------- /Steamless.API/SteamlessEvents.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.API 27 | { 28 | using Events; 29 | using System; 30 | 31 | public class SteamlessEvents 32 | { 33 | /// 34 | /// Log message event handler. 35 | /// 36 | /// 37 | /// 38 | public delegate void AddLogMessageEventHandler(object sender, LogMessageEventArgs e); 39 | 40 | /// 41 | /// Clear log messages event handler. 42 | /// 43 | /// 44 | /// 45 | public delegate void ClearLogMessagesEventHandler(object sender, EventArgs e); 46 | } 47 | } -------------------------------------------------------------------------------- /Steamless.CLI/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Steamless.CLI/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.CLI")] 30 | [assembly: AssemblyDescription("Removes the SteamStub DRM protection from Steam applications.")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("d128d7ad-2e6f-43bd-ba36-bea3b9b77437")] 39 | [assembly: AssemblyVersion("3.1.0.0")] 40 | [assembly: AssemblyFileVersion("3.1.0.0")] -------------------------------------------------------------------------------- /Steamless.CLI/Steamless.CLI.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {D128D7AD-2E6F-43BD-BA36-BEA3B9B77437} 8 | Exe 9 | Steamless.CLI 10 | Steamless.CLI 11 | v4.5.2 12 | 512 13 | true 14 | true 15 | 16 | 17 | x86 18 | true 19 | full 20 | false 21 | ..\Steamless\bin\x86\Debug\ 22 | DEBUG;TRACE 23 | prompt 24 | 4 25 | 26 | 27 | x86 28 | none 29 | true 30 | ..\Steamless\bin\x86\Release\ 31 | TRACE 32 | prompt 33 | 4 34 | 35 | 36 | steam.ico 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | {56c95629-3b34-47fe-b988-04274409294f} 58 | Steamless.API 59 | False 60 | 61 | 62 | 63 | 64 | 65 | 66 | -------------------------------------------------------------------------------- /Steamless.CLI/steam.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless.CLI/steam.ico -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant10.x86/Classes/SteamStubHeader.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant10.x86.Classes 27 | { 28 | using System.Runtime.InteropServices; 29 | 30 | /// 31 | /// SteamStub DRM Variant 1.0 Header 32 | /// 33 | [StructLayout(LayoutKind.Sequential)] 34 | public struct SteamStub32Var10Header 35 | { 36 | public uint GetModuleHandleA_idata; // The address of GetModuleHandleA inside of the .idata section. 37 | public uint GetProcAddress_idata; // The address of GetProcAddress inside of the .idata section. 38 | public uint BindFunction; // The .bind unpacker function address. 39 | public uint BindCodeSize; // The .bind unpacker function size. 40 | public uint Checksum; // The checksum of the header data after its initialized. (This is done via addition chunking.) 41 | public uint AppId; 42 | 43 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x08)] 44 | public byte[] SteamAppIDString; // The SteamAppID of the packed file, in string format. 45 | 46 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 47 | public byte[] str_kernel32dll; // String: kernel32.dll 48 | 49 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 50 | public byte[] str_user32dll; // String: user32.dll 51 | 52 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 53 | public byte[] str_shell32dll; // String: shell32.dll 54 | 55 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 56 | public byte[] str_loadlibraryexa; // String: LoadLibraryExA 57 | 58 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 59 | public byte[] str_freelibrary; // String: FreeLibrary 60 | 61 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 62 | public byte[] str_messageboxa; // String: MessageBoxA 63 | 64 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x18)] 65 | public byte[] str_getmodulefilenamea; // String: GetModuleFileNameA 66 | 67 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 68 | public byte[] str_lstrlena; // String: lstrlenA 69 | 70 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 71 | public byte[] str_lstrcata; // String lstrcatA 72 | 73 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 74 | public byte[] str_exitprocess; // String: ExitProcess 75 | 76 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 77 | public byte[] str_shellexecutea; // String: ShellExecuteA 78 | 79 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 80 | public byte[] str_steamerror; // String: Steam Error 81 | 82 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 83 | public byte[] str_steamdll; // String: Steam.dll 84 | 85 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x18)] 86 | public byte[] str_steamisappsubscribed; // String: SteamIsAppSubscribed 87 | 88 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 89 | public byte[] str_steamstartup; // String: SteamStartup 90 | 91 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 92 | public byte[] str_steamcleanup; // String: SteamCleanup 93 | 94 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] 95 | public byte[] str_failedtofindsteam; // String: Failed to find Steam 96 | 97 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] 98 | public byte[] str_failedtoloadsteam; // String: Failed to load Steam 99 | 100 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x18)] 101 | public byte[] str_steamstoreurl; // String: steam://store/ 102 | 103 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x18)] 104 | public byte[] str_steamrunurl; // String: steam://run/ 105 | 106 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x08)] 107 | public byte[] str_open; // String: open 108 | } 109 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant10.x86/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant10.x86")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant 1.0 (x86) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant10.x86")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("02b58ab0-9b00-4b31-8d61-9d22d13d2c4a")] 39 | [assembly: AssemblyVersion("1.0.0.0")] 40 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant10.x86/Steamless.Unpacker.Variant10.x86.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {02B58AB0-9B00-4B31-8D61-9D22D13D2C4A} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant10.x86 11 | Steamless.Unpacker.Variant10.x86 12 | v4.5.2 13 | 512 14 | true 15 | 16 | 17 | true 18 | full 19 | false 20 | ..\Steamless\bin\x86\Debug\Plugins\ 21 | DEBUG;TRACE 22 | prompt 23 | 4 24 | x86 25 | 26 | 27 | none 28 | true 29 | ..\Steamless\bin\x86\Release\Plugins\ 30 | TRACE 31 | prompt 32 | 4 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | {56c95629-3b34-47fe-b988-04274409294f} 52 | Steamless.API 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant20.x86/Classes/SteamStubDrmFlags.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant20.x86.Classes 27 | { 28 | /// 29 | /// Steam Stub Variant 2.0 DRM Flags 30 | /// 31 | public enum DrmFlags 32 | { 33 | /// 34 | /// None. 35 | /// 36 | None = 0x00, 37 | 38 | /// 39 | /// Flag that states that the stub will hash check the stub code and header data. 40 | /// 41 | UseValidation = 0x01, 42 | 43 | /// 44 | /// Flag that states that the stub will validate the file via WinVerifyTrust if able. 45 | /// 46 | UseWinVerifyTrustValidation = 0x02, 47 | 48 | /// 49 | /// Flag that states that the stub will decode/decrypt the code section. 50 | /// 51 | UseEncodedCodeSection = 0x04, 52 | 53 | /// 54 | /// Flag that states that the stub will check for active thread count of the current process during the stubs processing 55 | /// to check for any injected threads. (If the count is not 1, the check fails.) 56 | /// 57 | UseThreadCheckValidation = 0x08, 58 | 59 | /// 60 | /// Flag that states that the stub will create and check some data against a mapped memory view of the modded startup information. 61 | /// 62 | /// This uses the SteamAppID and Unknown0000 of the header. 63 | /// 64 | UseMemoryMappedValidation = 0x10 65 | } 66 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant20.x86/Classes/SteamStubHelpers.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant20.x86.Classes 27 | { 28 | using System; 29 | 30 | public static class SteamStubHelpers 31 | { 32 | /// 33 | /// Xor decrypts the given data starting with the given key, if any. 34 | /// 35 | /// @note If no key is given (0) then the first key is read from the first 36 | /// 4 bytes inside of the data given. 37 | /// 38 | /// The data to xor decode. 39 | /// The size of the data to decode. 40 | /// The starting xor key to decode with. 41 | /// 42 | public static uint SteamXor(ref byte[] data, uint size, uint key = 0) 43 | { 44 | var offset = (uint)0; 45 | 46 | // Read the first key as the base xor key if we had none given.. 47 | if (key == 0) 48 | { 49 | offset += 4; 50 | key = BitConverter.ToUInt32(data, 0); 51 | } 52 | 53 | // Decode the data.. 54 | for (var x = offset; x < size; x += 4) 55 | { 56 | var val = BitConverter.ToUInt32(data, (int)x); 57 | Array.Copy(BitConverter.GetBytes(val ^ key), 0, data, x, 4); 58 | 59 | key = val; 60 | } 61 | 62 | return key; 63 | } 64 | } 65 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant20.x86/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant20.x86")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant 2.0 (x86) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant20.x86")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("4f11f26d-2946-467f-a4e9-9e2a619a1fd3")] 39 | [assembly: AssemblyVersion("1.0.0.3")] 40 | [assembly: AssemblyFileVersion("1.0.0.3")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant20.x86/SharpDisasm.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless.Unpacker.Variant20.x86/SharpDisasm.dll -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant20.x86/Steamless.Unpacker.Variant20.x86.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {4F11F26D-2946-467F-A4E9-9E2A619A1FD3} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant20.x86 11 | Steamless.Unpacker.Variant20.x86 12 | v4.5.2 13 | 512 14 | true 15 | 16 | 17 | 18 | x86 19 | ..\Steamless\bin\x86\Debug\Plugins\ 20 | TRACE;DEBUG 21 | 22 | 23 | x86 24 | ..\Steamless\bin\x86\Release\Plugins\ 25 | true 26 | 27 | 28 | 29 | False 30 | .\SharpDisasm.dll 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | {56c95629-3b34-47fe-b988-04274409294f} 51 | Steamless.API 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant21.x86/Classes/SteamStubDrmFlags.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant21.x86.Classes 27 | { 28 | /// 29 | /// Steam Stub Variant 2.1 DRM Flags 30 | /// 31 | public enum DrmFlags 32 | { 33 | NoModuleVerification = 0x02, 34 | NoEncryption = 0x04, 35 | NoOwnershipCheck = 0x10, 36 | NoDebuggerCheck = 0x20, 37 | } 38 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant21.x86/Classes/SteamStubHelpers.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant21.x86.Classes 27 | { 28 | using System; 29 | 30 | public static class SteamStubHelpers 31 | { 32 | /// 33 | /// Xor decrypts the given data starting with the given key, if any. 34 | /// 35 | /// @note If no key is given (0) then the first key is read from the first 36 | /// 4 bytes inside of the data given. 37 | /// 38 | /// The data to xor decode. 39 | /// The size of the data to decode. 40 | /// The starting xor key to decode with. 41 | /// 42 | public static uint SteamXor(ref byte[] data, uint size, uint key = 0) 43 | { 44 | var offset = (uint)0; 45 | 46 | // Read the first key as the base xor key if we had none given.. 47 | if (key == 0) 48 | { 49 | offset += 4; 50 | key = BitConverter.ToUInt32(data, 0); 51 | } 52 | 53 | // Decode the data.. 54 | for (var x = offset; x < size; x += 4) 55 | { 56 | var val = BitConverter.ToUInt32(data, (int)x); 57 | Array.Copy(BitConverter.GetBytes(val ^ key), 0, data, x, 4); 58 | 59 | key = val; 60 | } 61 | 62 | return key; 63 | } 64 | 65 | /// 66 | /// The second pass of decryption for the SteamDRMP.dll file. 67 | /// 68 | /// @note The encryption method here is known as XTEA. 69 | /// 70 | /// The result value buffer to write our returns to. 71 | /// The keys used for the decryption. 72 | /// The first value to decrypt from. 73 | /// The second value to decrypt from. 74 | /// The number of passes to crypt the data with. 75 | public static void SteamDrmpDecryptPass2(ref uint[] res, uint[] keys, uint v1, uint v2, uint n = 32) 76 | { 77 | const uint delta = 0x9E3779B9; 78 | const uint mask = 0xFFFFFFFF; 79 | var sum = (delta * n) & mask; 80 | 81 | for (var x = 0; x < n; x++) 82 | { 83 | v2 = (v2 - (((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + keys[sum >> 11 & 3]))) & mask; 84 | sum = (sum - delta) & mask; 85 | v1 = (v1 - (((v2 << 4 ^ v2 >> 5) + v2) ^ (sum + keys[sum & 3]))) & mask; 86 | } 87 | 88 | res[0] = v1; 89 | res[1] = v2; 90 | } 91 | 92 | /// 93 | /// The first pass of the decryption for the SteamDRMP.dll file. 94 | /// 95 | /// @note The encryption method here is known as XTEA. It is modded to include 96 | /// some basic xor'ing. 97 | /// 98 | /// The data to decrypt. 99 | /// The size of the data to decrypt. 100 | /// The keys used for the decryption. 101 | public static void SteamDrmpDecryptPass1(ref byte[] data, uint size, uint[] keys) 102 | { 103 | var v1 = (uint)0x55555555; 104 | var v2 = (uint)0x55555555; 105 | 106 | for (var x = 0; x < size; x += 8) 107 | { 108 | var d1 = BitConverter.ToUInt32(data, x + 0); 109 | var d2 = BitConverter.ToUInt32(data, x + 4); 110 | 111 | var res = new uint[2]; 112 | SteamDrmpDecryptPass2(ref res, keys, d1, d2); 113 | 114 | Array.Copy(BitConverter.GetBytes(res[0] ^ v1), 0, data, x + 0, 4); 115 | Array.Copy(BitConverter.GetBytes(res[1] ^ v2), 0, data, x + 4, 4); 116 | 117 | v1 = d1; 118 | v2 = d2; 119 | } 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant21.x86/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant21.x86")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant v2.1 (x86) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant21.x86")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("a40154cd-a0fd-4371-8099-ce277e0989af")] 39 | [assembly: AssemblyVersion("1.0.0.9")] 40 | [assembly: AssemblyFileVersion("1.0.0.9")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant21.x86/SharpDisasm.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless.Unpacker.Variant21.x86/SharpDisasm.dll -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant21.x86/Steamless.Unpacker.Variant21.x86.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {A40154CD-A0FD-4371-8099-CE277E0989AF} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant21.x86 11 | Steamless.Unpacker.Variant21.x86 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | TRACE;DEBUG 19 | 20 | 21 | x86 22 | ..\Steamless\bin\x86\Release\Plugins\ 23 | true 24 | 25 | 26 | 27 | False 28 | .\SharpDisasm.dll 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | {56c95629-3b34-47fe-b988-04274409294f} 49 | Steamless.API 50 | False 51 | 52 | 53 | 54 | 61 | -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x64/Classes/SteamStubDrmFlags.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant30.x64.Classes 27 | { 28 | /// 29 | /// Steam Stub Variant 3.0 DRM Flags 30 | /// 31 | public enum SteamStubDrmFlags 32 | { 33 | NoModuleVerification = 0x02, 34 | NoEncryption = 0x04, 35 | NoOwnershipCheck = 0x10, 36 | NoDebuggerCheck = 0x20, 37 | NoErrorDialog = 0x40 38 | } 39 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x64/Classes/SteamStubHeader.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant30.x64.Classes 27 | { 28 | using System.Runtime.InteropServices; 29 | 30 | /// 31 | /// SteamStub DRM Variant 3.0 x64 Header 32 | /// 33 | [StructLayout(LayoutKind.Sequential)] 34 | public struct SteamStub64Var30Header 35 | { 36 | public uint XorKey; // The base XOR key, if defined, to unpack the file with. 37 | public uint Signature; // 0xC0DEC0DE signature to validate this header is proper. 38 | public ulong ImageBase; // The base of the image that is protected. 39 | public uint AddressOfEntryPoint; // The entry point that is set from the DRM. 40 | public uint BindSectionOffset; // The starting offset to the bind section data. RVA(AddressOfEntryPoint - BindSectionOffset) 41 | public uint Unknown0000; // [Cyanic: This field is most likely the .bind code size.] 42 | public uint OriginalEntryPoint; // The original entry point of the binary before it was protected. 43 | public uint Unknown0001; // [Cyanic: This field is most likely an offset to a string table.] 44 | public uint PayloadSize; // The size of the payload data. 45 | public uint DRMPDllOffset; // The offset to the SteamDRMP.dll file. 46 | public uint DRMPDllSize; // The size of the SteamDRMP.dll file. 47 | public uint SteamAppId; // The Steam Application ID of this game. 48 | public uint Flags; // The DRM flags used while creating the protected executable. 49 | public uint BindSectionVirtualSize; // The bind section virtual size. 50 | public uint Unknown0002; // [Cyanic: This field is most likely a hash of some sort.] 51 | public uint CodeSectionVirtualAddress; // The cpde section virtual address. 52 | public uint CodeSectionRawSize; // The raw size of the code section. 53 | 54 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] 55 | public byte[] AES_Key; // The AES encryption key. 56 | 57 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 58 | public byte[] AES_IV; // The AES encryption IV. 59 | 60 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 61 | public byte[] CodeSectionStolenData; // The first 16 bytes of the code section stolen. 62 | 63 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x04)] 64 | public uint[] EncryptionKeys; // Encryption keys used for decrypting SteamDRMP.dll file. 65 | 66 | public uint HasTlsCallback; // Flag that states if the file was protected with a TlsCallback present. 67 | public uint Unknown0004; 68 | public uint Unknown0005; 69 | public uint Unknown0006; 70 | public uint Unknown0007; 71 | public uint Unknown0008; 72 | public uint GetModuleHandleA_RVA; // The RVA to GetModuleHandleA. 73 | public uint GetModuleHandleW_RVA; // The RVA to GetModuleHandleW. 74 | public uint LoadLibraryA_RVA; // The RVA to LoadLibraryA. 75 | public uint LoadLibraryW_RVA; // The RVA to LoadLibraryW. 76 | public uint GetProcAddress_RVA; // The RVA to GetProcAddress. 77 | public uint Unknown0009; 78 | public uint Unknown0010; 79 | public uint Unknown0011; 80 | } 81 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x64/Classes/SteamStubHelpers.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant30.x64.Classes 27 | { 28 | using System; 29 | 30 | public static class SteamStubHelpers 31 | { 32 | /// 33 | /// Xor decrypts the given data starting with the given key, if any. 34 | /// 35 | /// @note If no key is given (0) then the first key is read from the first 36 | /// 4 bytes inside of the data given. 37 | /// 38 | /// The data to xor decode. 39 | /// The size of the data to decode. 40 | /// The starting xor key to decode with. 41 | /// 42 | public static uint SteamXor(ref byte[] data, uint size, uint key = 0) 43 | { 44 | var offset = (uint)0; 45 | 46 | // Read the first key as the base xor key if we had none given.. 47 | if (key == 0) 48 | { 49 | offset += 4; 50 | key = BitConverter.ToUInt32(data, 0); 51 | } 52 | 53 | // Decode the data.. 54 | for (var x = offset; x < size; x += 4) 55 | { 56 | var val = BitConverter.ToUInt32(data, (int)x); 57 | Array.Copy(BitConverter.GetBytes(val ^ key), 0, data, x, 4); 58 | 59 | key = val; 60 | } 61 | 62 | return key; 63 | } 64 | 65 | /// 66 | /// The second pass of decryption for the SteamDRMP.dll file. 67 | /// 68 | /// @note The encryption method here is known as XTEA. 69 | /// 70 | /// The result value buffer to write our returns to. 71 | /// The keys used for the decryption. 72 | /// The first value to decrypt from. 73 | /// The second value to decrypt from. 74 | /// The number of passes to crypt the data with. 75 | public static void SteamDrmpDecryptPass2(ref uint[] res, uint[] keys, uint v1, uint v2, uint n = 32) 76 | { 77 | const uint delta = 0x9E3779B9; 78 | const uint mask = 0xFFFFFFFF; 79 | var sum = (delta * n) & mask; 80 | 81 | for (var x = 0; x < n; x++) 82 | { 83 | v2 = (v2 - (((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + keys[sum >> 11 & 3]))) & mask; 84 | sum = (sum - delta) & mask; 85 | v1 = (v1 - (((v2 << 4 ^ v2 >> 5) + v2) ^ (sum + keys[sum & 3]))) & mask; 86 | } 87 | 88 | res[0] = v1; 89 | res[1] = v2; 90 | } 91 | 92 | /// 93 | /// The first pass of the decryption for the SteamDRMP.dll file. 94 | /// 95 | /// @note The encryption method here is known as XTEA. It is modded to include 96 | /// some basic xor'ing. 97 | /// 98 | /// The data to decrypt. 99 | /// The size of the data to decrypt. 100 | /// The keys used for the decryption. 101 | public static void SteamDrmpDecryptPass1(ref byte[] data, uint size, uint[] keys) 102 | { 103 | var v1 = (uint)0x55555555; 104 | var v2 = (uint)0x55555555; 105 | 106 | for (var x = 0; x < size; x += 8) 107 | { 108 | var d1 = BitConverter.ToUInt32(data, x + 0); 109 | var d2 = BitConverter.ToUInt32(data, x + 4); 110 | 111 | var res = new uint[2]; 112 | SteamDrmpDecryptPass2(ref res, keys, d1, d2); 113 | 114 | Array.Copy(BitConverter.GetBytes(res[0] ^ v1), 0, data, x + 0, 4); 115 | Array.Copy(BitConverter.GetBytes(res[1] ^ v2), 0, data, x + 4, 4); 116 | 117 | v1 = d1; 118 | v2 = d2; 119 | } 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x64/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant30.x64")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant v3.0 (x64) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant30.x64")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("03621ead-77a7-4208-afdf-4b8292230a71")] 39 | [assembly: AssemblyVersion("1.0.0.3")] 40 | [assembly: AssemblyFileVersion("1.0.0.3")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x64/Steamless.Unpacker.Variant30.x64.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {03621EAD-77A7-4208-AFDF-4B8292230A71} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant30.x64 11 | Steamless.Unpacker.Variant30.x64 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | 19 | 20 | x86 21 | ..\Steamless\bin\x86\Release\Plugins\ 22 | true 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | {56c95629-3b34-47fe-b988-04274409294f} 44 | Steamless.API 45 | 46 | 47 | 48 | 55 | -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x86/Classes/SteamStubDrmFlags.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant30.x86.Classes 27 | { 28 | /// 29 | /// Steam Stub Variant 3.0 DRM Flags 30 | /// 31 | public enum SteamStubDrmFlags 32 | { 33 | NoModuleVerification = 0x02, 34 | NoEncryption = 0x04, 35 | NoOwnershipCheck = 0x10, 36 | NoDebuggerCheck = 0x20, 37 | NoErrorDialog = 0x40 38 | } 39 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x86/Classes/SteamStubHeader.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant30.x86.Classes 27 | { 28 | using System.Runtime.InteropServices; 29 | 30 | /// 31 | /// SteamStub DRM Variant 3.0 Header 32 | /// 33 | [StructLayout(LayoutKind.Sequential)] 34 | public struct SteamStub32Var30Header 35 | { 36 | public uint XorKey; // The base XOR key, if defined, to unpack the file with. 37 | public uint Signature; // 0xC0DEC0DE signature to validate this header is proper. 38 | public ulong ImageBase; // The base of the image that is protected. 39 | public uint AddressOfEntryPoint; // The entry point that is set from the DRM. 40 | public uint BindSectionOffset; // The starting offset to the bind section data. RVA(AddressOfEntryPoint - BindSectionOffset) 41 | public uint Unknown0000; // [Cyanic: This field is most likely the .bind code size.] 42 | public uint OriginalEntryPoint; // The original entry point of the binary before it was protected. 43 | public uint Unknown0001; // [Cyanic: This field is most likely an offset to a string table.] 44 | public uint PayloadSize; // The size of the payload data. 45 | public uint DRMPDllOffset; // The offset to the SteamDRMP.dll file. 46 | public uint DRMPDllSize; // The size of the SteamDRMP.dll file. 47 | public uint SteamAppId; // The Steam Application ID of this game. 48 | public uint Flags; // The DRM flags used while creating the protected executable. 49 | public uint BindSectionVirtualSize; // The bind section virtual size. 50 | public uint Unknown0002; // [Cyanic: This field is most likely a hash of some sort.] 51 | public uint CodeSectionVirtualAddress; // The cpde section virtual address. 52 | public uint CodeSectionRawSize; // The raw size of the code section. 53 | 54 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] 55 | public byte[] AES_Key; // The AES encryption key. 56 | 57 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 58 | public byte[] AES_IV; // The AES encryption IV. 59 | 60 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 61 | public byte[] CodeSectionStolenData; // The first 16 bytes of the code section stolen. 62 | 63 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x04)] 64 | public uint[] EncryptionKeys; // Encryption keys used for decrypting SteamDRMP.dll file. 65 | 66 | public uint Unknown0003; // [Cyanic: This field is most likely used to flag if the file has Tls data or not.] 67 | public uint Unknown0004; 68 | public uint Unknown0005; 69 | public uint Unknown0006; 70 | public uint Unknown0007; 71 | public uint Unknown0008; 72 | public uint GetModuleHandleA_RVA; // The RVA to GetModuleHandleA. 73 | public uint GetModuleHandleW_RVA; // The RVA to GetModuleHandleW. 74 | public uint LoadLibraryA_RVA; // The RVA to LoadLibraryA. 75 | public uint LoadLibraryW_RVA; // The RVA to LoadLibraryW. 76 | public uint GetProcAddress_RVA; // The RVA to GetProcAddress. 77 | public uint Unknown0009; 78 | public uint Unknown0010; 79 | public uint Unknown0011; 80 | } 81 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x86/Classes/SteamStubHelpers.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant30.x86.Classes 27 | { 28 | using System; 29 | 30 | public static class SteamStubHelpers 31 | { 32 | /// 33 | /// Xor decrypts the given data starting with the given key, if any. 34 | /// 35 | /// @note If no key is given (0) then the first key is read from the first 36 | /// 4 bytes inside of the data given. 37 | /// 38 | /// The data to xor decode. 39 | /// The size of the data to decode. 40 | /// The starting xor key to decode with. 41 | /// 42 | public static uint SteamXor(ref byte[] data, uint size, uint key = 0) 43 | { 44 | var offset = (uint)0; 45 | 46 | // Read the first key as the base xor key if we had none given.. 47 | if (key == 0) 48 | { 49 | offset += 4; 50 | key = BitConverter.ToUInt32(data, 0); 51 | } 52 | 53 | // Decode the data.. 54 | for (var x = offset; x < size; x += 4) 55 | { 56 | var val = BitConverter.ToUInt32(data, (int)x); 57 | Array.Copy(BitConverter.GetBytes(val ^ key), 0, data, x, 4); 58 | 59 | key = val; 60 | } 61 | 62 | return key; 63 | } 64 | 65 | /// 66 | /// The second pass of decryption for the SteamDRMP.dll file. 67 | /// 68 | /// @note The encryption method here is known as XTEA. 69 | /// 70 | /// The result value buffer to write our returns to. 71 | /// The keys used for the decryption. 72 | /// The first value to decrypt from. 73 | /// The second value to decrypt from. 74 | /// The number of passes to crypt the data with. 75 | public static void SteamDrmpDecryptPass2(ref uint[] res, uint[] keys, uint v1, uint v2, uint n = 32) 76 | { 77 | const uint delta = 0x9E3779B9; 78 | const uint mask = 0xFFFFFFFF; 79 | var sum = (delta * n) & mask; 80 | 81 | for (var x = 0; x < n; x++) 82 | { 83 | v2 = (v2 - (((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + keys[sum >> 11 & 3]))) & mask; 84 | sum = (sum - delta) & mask; 85 | v1 = (v1 - (((v2 << 4 ^ v2 >> 5) + v2) ^ (sum + keys[sum & 3]))) & mask; 86 | } 87 | 88 | res[0] = v1; 89 | res[1] = v2; 90 | } 91 | 92 | /// 93 | /// The first pass of the decryption for the SteamDRMP.dll file. 94 | /// 95 | /// @note The encryption method here is known as XTEA. It is modded to include 96 | /// some basic xor'ing. 97 | /// 98 | /// The data to decrypt. 99 | /// The size of the data to decrypt. 100 | /// The keys used for the decryption. 101 | public static void SteamDrmpDecryptPass1(ref byte[] data, uint size, uint[] keys) 102 | { 103 | var v1 = (uint)0x55555555; 104 | var v2 = (uint)0x55555555; 105 | 106 | for (var x = 0; x < size; x += 8) 107 | { 108 | var d1 = BitConverter.ToUInt32(data, x + 0); 109 | var d2 = BitConverter.ToUInt32(data, x + 4); 110 | 111 | var res = new uint[2]; 112 | SteamDrmpDecryptPass2(ref res, keys, d1, d2); 113 | 114 | Array.Copy(BitConverter.GetBytes(res[0] ^ v1), 0, data, x + 0, 4); 115 | Array.Copy(BitConverter.GetBytes(res[1] ^ v2), 0, data, x + 4, 4); 116 | 117 | v1 = d1; 118 | v2 = d2; 119 | } 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x86/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant30.x86")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant v3.0 (x86) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant30.x86")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("b6bb7a32-ab23-4a25-8914-154879aad3fe")] 39 | [assembly: AssemblyVersion("1.0.0.1")] 40 | [assembly: AssemblyFileVersion("1.0.0.1")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant30.x86/Steamless.Unpacker.Variant30.x86.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {B6BB7A32-AB23-4A25-8914-154879AAD3FE} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant30.x86 11 | Steamless.Unpacker.Variant30.x86 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | DEBUG;TRACE 19 | 20 | 21 | x86 22 | ..\Steamless\bin\x86\Release\Plugins\ 23 | true 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | {56c95629-3b34-47fe-b988-04274409294f} 45 | Steamless.API 46 | False 47 | 48 | 49 | 50 | 57 | -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x64/Classes/SteamStubDrmFlags.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant31.x64.Classes 27 | { 28 | /// 29 | /// Steam Stub Variant 3.1 DRM Flags 30 | /// 31 | public enum SteamStubDrmFlags 32 | { 33 | NoModuleVerification = 0x02, 34 | NoEncryption = 0x04, 35 | NoOwnershipCheck = 0x10, 36 | NoDebuggerCheck = 0x20, 37 | NoErrorDialog = 0x40 38 | } 39 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x64/Classes/SteamStubHeader.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant31.x64.Classes 27 | { 28 | using System.Runtime.InteropServices; 29 | 30 | /// 31 | /// SteamStub DRM Variant 3.1 x64 Header 32 | /// 33 | [StructLayout(LayoutKind.Sequential)] 34 | public struct SteamStub64Var31Header 35 | { 36 | public uint XorKey; // The base xor key, if defined, to unpack the file with. 37 | public uint Signature; // The signature to ensure the xor decoding was successful. 38 | public ulong ImageBase; // The base of the image that was protected. 39 | public ulong AddressOfEntryPoint; // The entry point that is set from the DRM. 40 | public uint BindSectionOffset; // The starting offset to the .bind section data. RVA(AddressOfEntryPoint - BindSectionOffset) 41 | public uint Unknown0000; // [Cyanic: This field is most likely the .bind code size.] 42 | public ulong OriginalEntryPoint; // The original entry point of the binary before it was protected. 43 | public uint Unknown0001; // [Cyanic: This field is most likely an offset to a string table.] 44 | public uint PayloadSize; // The size of the payload data. 45 | public uint DRMPDllOffset; // The offset to the SteamDrmp.dll file. 46 | public uint DRMPDllSize; // The size of the SteamDrmp.dll file. 47 | public uint SteamAppId; // The Steam application id of this program. 48 | public uint Flags; // The DRM flags used while protecting this program. 49 | public uint BindSectionVirtualSize; // The .bind section virtual size. 50 | public uint Unknown0002; // [Cyanic: This field is most likely a hash of some sort.] 51 | public ulong CodeSectionVirtualAddress; // The code section virtual address. 52 | public ulong CodeSectionRawSize; // The code section raw size. 53 | 54 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] 55 | public byte[] AES_Key; // The AES encryption key. 56 | 57 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 58 | public byte[] AES_IV; // The AES encryption IV. 59 | 60 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 61 | public byte[] CodeSectionStolenData; // The first 16 bytes of the code section stolen. 62 | 63 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x04)] 64 | public uint[] EncryptionKeys; // Encryption keys used to decrypt the SteamDrmp.dll file. 65 | 66 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x08)] 67 | public uint[] Unknown0003; // Unknown unused data. 68 | 69 | public ulong GetModuleHandleA_Rva; // The rva to GetModuleHandleA. 70 | public ulong GetModuleHandleW_Rva; // The rva to GetModuleHandleW. 71 | public ulong LoadLibraryA_Rva; // The rva to LoadLibraryA. 72 | public ulong LoadLibraryW_Rva; // The rva to LoadLibraryW. 73 | public ulong GetProcAddress_Rva; // The rva to GetProcAddress. 74 | } 75 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x64/Classes/SteamStubHelpers.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant31.x64.Classes 27 | { 28 | using System; 29 | 30 | public static class SteamStubHelpers 31 | { 32 | /// 33 | /// Xor decrypts the given data starting with the given key, if any. 34 | /// 35 | /// @note If no key is given (0) then the first key is read from the first 36 | /// 4 bytes inside of the data given. 37 | /// 38 | /// The data to xor decode. 39 | /// The size of the data to decode. 40 | /// The starting xor key to decode with. 41 | /// 42 | public static uint SteamXor(ref byte[] data, uint size, uint key = 0) 43 | { 44 | var offset = (uint)0; 45 | 46 | // Read the first key as the base xor key if we had none given.. 47 | if (key == 0) 48 | { 49 | offset += 4; 50 | key = BitConverter.ToUInt32(data, 0); 51 | } 52 | 53 | // Decode the data.. 54 | for (var x = offset; x < size; x += 4) 55 | { 56 | var val = BitConverter.ToUInt32(data, (int)x); 57 | Array.Copy(BitConverter.GetBytes(val ^ key), 0, data, x, 4); 58 | 59 | key = val; 60 | } 61 | 62 | return key; 63 | } 64 | 65 | /// 66 | /// The second pass of decryption for the SteamDRMP.dll file. 67 | /// 68 | /// @note The encryption method here is known as XTEA. 69 | /// 70 | /// The result value buffer to write our returns to. 71 | /// The keys used for the decryption. 72 | /// The first value to decrypt from. 73 | /// The second value to decrypt from. 74 | /// The number of passes to crypt the data with. 75 | public static void SteamDrmpDecryptPass2(ref uint[] res, uint[] keys, uint v1, uint v2, uint n = 32) 76 | { 77 | const uint delta = 0x9E3779B9; 78 | const uint mask = 0xFFFFFFFF; 79 | var sum = (delta * n) & mask; 80 | 81 | for (var x = 0; x < n; x++) 82 | { 83 | v2 = (v2 - (((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + keys[sum >> 11 & 3]))) & mask; 84 | sum = (sum - delta) & mask; 85 | v1 = (v1 - (((v2 << 4 ^ v2 >> 5) + v2) ^ (sum + keys[sum & 3]))) & mask; 86 | } 87 | 88 | res[0] = v1; 89 | res[1] = v2; 90 | } 91 | 92 | /// 93 | /// The first pass of the decryption for the SteamDRMP.dll file. 94 | /// 95 | /// @note The encryption method here is known as XTEA. It is modded to include 96 | /// some basic xor'ing. 97 | /// 98 | /// The data to decrypt. 99 | /// The size of the data to decrypt. 100 | /// The keys used for the decryption. 101 | public static void SteamDrmpDecryptPass1(ref byte[] data, uint size, uint[] keys) 102 | { 103 | var v1 = (uint)0x55555555; 104 | var v2 = (uint)0x55555555; 105 | 106 | for (var x = 0; x < size; x += 8) 107 | { 108 | var d1 = BitConverter.ToUInt32(data, x + 0); 109 | var d2 = BitConverter.ToUInt32(data, x + 4); 110 | 111 | var res = new uint[2]; 112 | SteamDrmpDecryptPass2(ref res, keys, d1, d2); 113 | 114 | Array.Copy(BitConverter.GetBytes(res[0] ^ v1), 0, data, x + 0, 4); 115 | Array.Copy(BitConverter.GetBytes(res[1] ^ v2), 0, data, x + 4, 4); 116 | 117 | v1 = d1; 118 | v2 = d2; 119 | } 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x64/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant31.x64")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant v3.1 (x64) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant31.x64")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("05f540fb-d14b-4966-8de2-591b76361cf0")] 39 | [assembly: AssemblyVersion("1.0.0.3")] 40 | [assembly: AssemblyFileVersion("1.0.0.3")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x64/Steamless.Unpacker.Variant31.x64.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {05F540FB-D14B-4966-8DE2-591B76361CF0} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant31.x64 11 | Steamless.Unpacker.Variant31.x64 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | TRACE;DEBUG 19 | 20 | 21 | x86 22 | ..\Steamless\bin\x86\Release\Plugins\ 23 | true 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | {56c95629-3b34-47fe-b988-04274409294f} 45 | Steamless.API 46 | 47 | 48 | 49 | 56 | -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x86/Classes/SteamStubDrmFlags.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant31.x86.Classes 27 | { 28 | /// 29 | /// Steam Stub Variant 3.1 DRM Flags 30 | /// 31 | public enum SteamStubDrmFlags 32 | { 33 | NoModuleVerification = 0x02, 34 | NoEncryption = 0x04, 35 | NoOwnershipCheck = 0x10, 36 | NoDebuggerCheck = 0x20, 37 | NoErrorDialog = 0x40 38 | } 39 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x86/Classes/SteamStubHeader.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant31.x86.Classes 27 | { 28 | using System.Runtime.InteropServices; 29 | 30 | /// 31 | /// SteamStub DRM Variant 3.1 Header 32 | /// 33 | [StructLayout(LayoutKind.Sequential)] 34 | public struct SteamStub32Var31Header 35 | { 36 | public uint XorKey; // The base xor key, if defined, to unpack the file with. 37 | public uint Signature; // The signature to ensure the xor decoding was successful. 38 | public ulong ImageBase; // The base of the image that was protected. 39 | public ulong AddressOfEntryPoint; // The entry point that is set from the DRM. 40 | public uint BindSectionOffset; // The starting offset to the .bind section data. RVA(AddressOfEntryPoint - BindSectionOffset) 41 | public uint Unknown0000; // [Cyanic: This field is most likely the .bind code size.] 42 | public ulong OriginalEntryPoint; // The original entry point of the binary before it was protected. 43 | public uint Unknown0001; // [Cyanic: This field is most likely an offset to a string table.] 44 | public uint PayloadSize; // The size of the payload data. 45 | public uint DRMPDllOffset; // The offset to the SteamDrmp.dll file. 46 | public uint DRMPDllSize; // The size of the SteamDrmp.dll file. 47 | public uint SteamAppId; // The Steam application id of this program. 48 | public uint Flags; // The DRM flags used while protecting this program. 49 | public uint BindSectionVirtualSize; // The .bind section virtual size. 50 | public uint Unknown0002; // [Cyanic: This field is most likely a hash of some sort.] 51 | public ulong CodeSectionVirtualAddress; // The code section virtual address. 52 | public ulong CodeSectionRawSize; // The code section raw size. 53 | 54 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x20)] 55 | public byte[] AES_Key; // The AES encryption key. 56 | 57 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 58 | public byte[] AES_IV; // The AES encryption IV. 59 | 60 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x10)] 61 | public byte[] CodeSectionStolenData; // The first 16 bytes of the code section stolen. 62 | 63 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x04)] 64 | public uint[] EncryptionKeys; // Encryption keys used to decrypt the SteamDrmp.dll file. 65 | 66 | [MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x08)] 67 | public uint[] Unknown0003; // Unknown unused data. 68 | 69 | public ulong GetModuleHandleA_Rva; // The rva to GetModuleHandleA. 70 | public ulong GetModuleHandleW_Rva; // The rva to GetModuleHandleW. 71 | public ulong LoadLibraryA_Rva; // The rva to LoadLibraryA. 72 | public ulong LoadLibraryW_Rva; // The rva to LoadLibraryW. 73 | public ulong GetProcAddress_Rva; // The rva to GetProcAddress. 74 | } 75 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x86/Classes/SteamStubHelpers.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless.Unpacker.Variant31.x86.Classes 27 | { 28 | using System; 29 | 30 | public static class SteamStubHelpers 31 | { 32 | /// 33 | /// Xor decrypts the given data starting with the given key, if any. 34 | /// 35 | /// @note If no key is given (0) then the first key is read from the first 36 | /// 4 bytes inside of the data given. 37 | /// 38 | /// The data to xor decode. 39 | /// The size of the data to decode. 40 | /// The starting xor key to decode with. 41 | /// 42 | public static uint SteamXor(ref byte[] data, uint size, uint key = 0) 43 | { 44 | var offset = (uint)0; 45 | 46 | // Read the first key as the base xor key if we had none given.. 47 | if (key == 0) 48 | { 49 | offset += 4; 50 | key = BitConverter.ToUInt32(data, 0); 51 | } 52 | 53 | // Decode the data.. 54 | for (var x = offset; x < size; x += 4) 55 | { 56 | var val = BitConverter.ToUInt32(data, (int)x); 57 | Array.Copy(BitConverter.GetBytes(val ^ key), 0, data, x, 4); 58 | 59 | key = val; 60 | } 61 | 62 | return key; 63 | } 64 | 65 | /// 66 | /// The second pass of decryption for the SteamDRMP.dll file. 67 | /// 68 | /// @note The encryption method here is known as XTEA. 69 | /// 70 | /// The result value buffer to write our returns to. 71 | /// The keys used for the decryption. 72 | /// The first value to decrypt from. 73 | /// The second value to decrypt from. 74 | /// The number of passes to crypt the data with. 75 | public static void SteamDrmpDecryptPass2(ref uint[] res, uint[] keys, uint v1, uint v2, uint n = 32) 76 | { 77 | const uint delta = 0x9E3779B9; 78 | const uint mask = 0xFFFFFFFF; 79 | var sum = (delta * n) & mask; 80 | 81 | for (var x = 0; x < n; x++) 82 | { 83 | v2 = (v2 - (((v1 << 4 ^ v1 >> 5) + v1) ^ (sum + keys[sum >> 11 & 3]))) & mask; 84 | sum = (sum - delta) & mask; 85 | v1 = (v1 - (((v2 << 4 ^ v2 >> 5) + v2) ^ (sum + keys[sum & 3]))) & mask; 86 | } 87 | 88 | res[0] = v1; 89 | res[1] = v2; 90 | } 91 | 92 | /// 93 | /// The first pass of the decryption for the SteamDRMP.dll file. 94 | /// 95 | /// @note The encryption method here is known as XTEA. It is modded to include 96 | /// some basic xor'ing. 97 | /// 98 | /// The data to decrypt. 99 | /// The size of the data to decrypt. 100 | /// The keys used for the decryption. 101 | public static void SteamDrmpDecryptPass1(ref byte[] data, uint size, uint[] keys) 102 | { 103 | var v1 = (uint)0x55555555; 104 | var v2 = (uint)0x55555555; 105 | 106 | for (var x = 0; x < size; x += 8) 107 | { 108 | var d1 = BitConverter.ToUInt32(data, x + 0); 109 | var d2 = BitConverter.ToUInt32(data, x + 4); 110 | 111 | var res = new uint[2]; 112 | SteamDrmpDecryptPass2(ref res, keys, d1, d2); 113 | 114 | Array.Copy(BitConverter.GetBytes(res[0] ^ v1), 0, data, x + 0, 4); 115 | Array.Copy(BitConverter.GetBytes(res[1] ^ v2), 0, data, x + 4, 4); 116 | 117 | v1 = d1; 118 | v2 = d2; 119 | } 120 | } 121 | } 122 | } -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x86/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | using System.Reflection; 27 | using System.Runtime.InteropServices; 28 | 29 | [assembly: AssemblyTitle("Steamless.Unpacker.Variant31.x86")] 30 | [assembly: AssemblyDescription("Steamless SteamStub Variant v3.1 (x86) Unpacker")] 31 | [assembly: AssemblyConfiguration("Release")] 32 | [assembly: AssemblyCompany("atom0s")] 33 | [assembly: AssemblyProduct("Steamless.Unpacker.Variant31.x86")] 34 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")] 35 | [assembly: AssemblyTrademark("")] 36 | [assembly: AssemblyCulture("")] 37 | [assembly: ComVisible(false)] 38 | [assembly: Guid("0f2fae37-f898-4392-b4f6-711954beeb4f")] 39 | [assembly: AssemblyVersion("1.0.0.3")] 40 | [assembly: AssemblyFileVersion("1.0.0.3")] -------------------------------------------------------------------------------- /Steamless.Unpacker.Variant31.x86/Steamless.Unpacker.Variant31.x86.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {0F2FAE37-F898-4392-B4F6-711954BEEB4F} 8 | Library 9 | Properties 10 | Steamless.Unpacker.Variant31.x86 11 | Steamless.Unpacker.Variant31.x86 12 | v4.5.2 13 | 512 14 | 15 | 16 | x86 17 | ..\Steamless\bin\x86\Debug\Plugins\ 18 | DEBUG;TRACE 19 | 20 | 21 | x86 22 | ..\Steamless\bin\x86\Release\Plugins\ 23 | true 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | {56c95629-3b34-47fe-b988-04274409294f} 45 | Steamless.API 46 | False 47 | 48 | 49 | 50 | 57 | -------------------------------------------------------------------------------- /Steamless/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /Steamless/App.xaml: -------------------------------------------------------------------------------- 1 |  25 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /Steamless/App.xaml.cs: -------------------------------------------------------------------------------- 1 | /** 2 | * Steamless - Copyright (c) 2015 - 2024 atom0s [atom0s@live.com] 3 | * 4 | * This work is licensed under the Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License. 5 | * To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-nd/4.0/ or send a letter to 6 | * Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. 7 | * 8 | * By using Steamless, you agree to the above license and its terms. 9 | * 10 | * Attribution - You must give appropriate credit, provide a link to the license and indicate if changes were 11 | * made. You must do so in any reasonable manner, but not in any way that suggests the licensor 12 | * endorses you or your use. 13 | * 14 | * Non-Commercial - You may not use the material (Steamless) for commercial purposes. 15 | * 16 | * No-Derivatives - If you remix, transform, or build upon the material (Steamless), you may not distribute the 17 | * modified material. You are, however, allowed to submit the modified works back to the original 18 | * Steamless project in attempt to have it added to the original project. 19 | * 20 | * You may not apply legal terms or technological measures that legally restrict others 21 | * from doing anything the license permits. 22 | * 23 | * No warranties are given. 24 | */ 25 | 26 | namespace Steamless 27 | { 28 | using System; 29 | using System.IO; 30 | using System.Reflection; 31 | 32 | /// 33 | /// Interaction logic for App.xaml 34 | /// 35 | public partial class App 36 | { 37 | /// 38 | /// Default Constructor 39 | /// 40 | public App() 41 | { 42 | // Override the assembly resolve event.. 43 | AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve; 44 | } 45 | 46 | /// 47 | /// Assembly resolve override to allow loading of embedded modules. 48 | /// 49 | /// 50 | /// 51 | /// 52 | private static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args) 53 | { 54 | // Obtain the name of the assembly being loaded.. 55 | var name = args.Name.Contains(",") ? args.Name.Substring(0, args.Name.IndexOf(",", StringComparison.InvariantCultureIgnoreCase)) : args.Name.Replace(".dll", ""); 56 | 57 | // Ignore resource assembly loading.. 58 | if (name.ToLower().EndsWith(".resources")) 59 | return null; 60 | 61 | // Build a full path to the possible embedded file.. 62 | var fullName = $"{Assembly.GetExecutingAssembly().EntryPoint.DeclaringType?.Namespace}.Embedded.{new AssemblyName(args.Name).Name}.dll"; 63 | using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(fullName)) 64 | { 65 | // If not embedded try to load from the plugin folder.. 66 | if (stream == null) 67 | { 68 | var file = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Plugins", name + ".dll"); 69 | return File.Exists(file) ? Assembly.Load(File.ReadAllBytes(file)) : null; 70 | } 71 | 72 | // Read and load the embedded resource.. 73 | var data = new byte[stream.Length]; 74 | stream.Read(data, 0, (int)stream.Length); 75 | return Assembly.Load(data); 76 | } 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /Steamless/Assets/Animations.xaml: -------------------------------------------------------------------------------- 1 |  25 | 27 | 28 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /Steamless/Assets/Window.xaml: -------------------------------------------------------------------------------- 1 |  25 | 27 | 28 | 82 | 96 |