├── .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 |
99 |
--------------------------------------------------------------------------------
/Steamless/Assets/steam.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Assets/steam.ico
--------------------------------------------------------------------------------
/Steamless/Assets/steam.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Assets/steam.png
--------------------------------------------------------------------------------
/Steamless/Classes/ControlsHelper.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.Classes
27 | {
28 | using System.Windows;
29 |
30 | ///
31 | /// Contains helper functions for WPF controls.
32 | ///
33 | /// Credits to the functions within this class:
34 | /// https://github.com/MahApps/MahApps.Metro
35 | ///
36 | public static class ControlsHelper
37 | {
38 | ///
39 | /// This property can be used to set vertical scrollbar left side from the tabpanel (look at MetroAnimatedSingleRowTabControl)
40 | ///
41 | public static readonly DependencyProperty VerticalScrollBarOnLeftSideProperty =
42 | DependencyProperty.RegisterAttached("VerticalScrollBarOnLeftSide", typeof(bool), typeof(ControlsHelper),
43 | new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsArrange | FrameworkPropertyMetadataOptions.Inherits));
44 |
45 | public static bool GetVerticalScrollBarOnLeftSide(DependencyObject obj)
46 | {
47 | return (bool)obj.GetValue(VerticalScrollBarOnLeftSideProperty);
48 | }
49 |
50 | public static void SetVerticalScrollBarOnLeftSide(DependencyObject obj, bool value)
51 | {
52 | obj.SetValue(VerticalScrollBarOnLeftSideProperty, value);
53 | }
54 | }
55 | }
--------------------------------------------------------------------------------
/Steamless/Classes/GridViewColumnWidthFromItemsBehavior.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.Classes
27 | {
28 | using API.Events;
29 | using System.Collections.Specialized;
30 | using System.Globalization;
31 | using System.Linq;
32 | using System.Windows;
33 | using System.Windows.Controls;
34 | using System.Windows.Controls.Primitives;
35 | using System.Windows.Media;
36 |
37 | public static class GridViewColumnWidthFromItemsBehavior
38 | {
39 | public static readonly DependencyProperty GridViewColumnWidthFromItemsProperty =
40 | DependencyProperty.RegisterAttached("Enabled", typeof(bool), typeof(GridViewColumnWidthFromItemsBehavior), new UIPropertyMetadata(false, OnGridViewColumnWidthFromItemsPropertyChanged));
41 |
42 | public static bool GetEnabled(DependencyObject obj)
43 | {
44 | return (bool)obj.GetValue(GridViewColumnWidthFromItemsProperty);
45 | }
46 |
47 | public static void SetEnabled(DependencyObject obj, bool value)
48 | {
49 | obj.SetValue(GridViewColumnWidthFromItemsProperty, value);
50 | }
51 |
52 | private static void OnGridViewColumnWidthFromItemsPropertyChanged(DependencyObject dpo, DependencyPropertyChangedEventArgs e)
53 | {
54 | if (dpo is ListView lv)
55 | {
56 | if ((bool)e.NewValue)
57 | lv.Loaded += OnListViewLoaded;
58 | else
59 | lv.Loaded -= OnListViewLoaded;
60 | }
61 | }
62 |
63 | private static void OnListViewLoaded(object sender, RoutedEventArgs routedEventArgs)
64 | {
65 | var lv = sender as ListView;
66 | var nc = ((INotifyCollectionChanged)lv?.Items);
67 |
68 | if (nc == null)
69 | return;
70 |
71 | nc.CollectionChanged += (o, args) =>
72 | {
73 | if (lv.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
74 | return;
75 |
76 | // Obtain the largest item width..
77 | var width = lv.Items.OfType()
78 | .Select(msg => new FormattedText(msg.Message, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface("Tahoma"), 11, Brushes.Black))
79 | .Select(txt => txt.Width)
80 | .Concat(new double[] { 0.0f })
81 | .Max();
82 |
83 | // Resize the message column..
84 | var gv = lv.View as GridView;
85 | if (gv != null)
86 | gv.Columns[1].Width = width + 24.0f;
87 |
88 | // Scroll to the last item..
89 | if (lv.Items.Count > 0)
90 | lv.ScrollIntoView(lv.Items[lv.Items.Count - 1]);
91 | else
92 | {
93 | if (gv != null)
94 | gv.Columns[1].Width = 600;
95 | }
96 | };
97 | }
98 | }
99 | }
--------------------------------------------------------------------------------
/Steamless/Embedded/GalaSoft.MvvmLight.Extras.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Embedded/GalaSoft.MvvmLight.Extras.dll
--------------------------------------------------------------------------------
/Steamless/Embedded/GalaSoft.MvvmLight.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Embedded/GalaSoft.MvvmLight.dll
--------------------------------------------------------------------------------
/Steamless/Embedded/Microsoft.Practices.ServiceLocation.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Embedded/Microsoft.Practices.ServiceLocation.dll
--------------------------------------------------------------------------------
/Steamless/Embedded/Newtonsoft.Json.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Embedded/Newtonsoft.Json.dll
--------------------------------------------------------------------------------
/Steamless/Embedded/System.Windows.Interactivity.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/Steamless/Embedded/System.Windows.Interactivity.dll
--------------------------------------------------------------------------------
/Steamless/Model/ApplicationState.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.Model
27 | {
28 | public enum ApplicationState
29 | {
30 | ///
31 | /// Initializing
32 | ///
33 | /// The state when the application is loading and/or updating.
34 | ///
35 | Initializing,
36 |
37 | ///
38 | /// Running
39 | ///
40 | /// The state when the application is done initializing and is running.
41 | ///
42 | Running,
43 |
44 | ///
45 | /// Closing
46 | ///
47 | /// The state when the launcher is closing.
48 | ///
49 | Closing,
50 |
51 | ///
52 | /// Closed
53 | ///
54 | /// The state when the launcher is closed.
55 | ///
56 | Closed
57 | }
58 | }
--------------------------------------------------------------------------------
/Steamless/Model/IDataService.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.Model
27 | {
28 | using API.Model;
29 | using System;
30 | using System.Collections.Generic;
31 | using System.Threading.Tasks;
32 |
33 | public interface IDataService
34 | {
35 | ///
36 | /// Obtains the version of Steamless.
37 | ///
38 | ///
39 | Task GetSteamlessVersion();
40 |
41 | ///
42 | /// Obtains a list of available Steamless plugins.
43 | ///
44 | ///
45 | Task> GetSteamlessPlugins();
46 | }
47 | }
--------------------------------------------------------------------------------
/Steamless/Model/Tasks/BaseTask.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.Model.Tasks
27 | {
28 | using API.Model;
29 | using System.Threading.Tasks;
30 |
31 | public abstract class BaseTask : NotifiableModel
32 | {
33 | ///
34 | /// Starts the task.
35 | ///
36 | public Task StartTask()
37 | {
38 | return Task.Run(async () =>
39 | {
40 | this.Completed = false;
41 | await this.DoTask();
42 | this.Completed = true;
43 | });
44 | }
45 |
46 | ///
47 | /// The tasks main function to execute when started.
48 | ///
49 | public abstract Task DoTask();
50 |
51 | ///
52 | /// Gets or sets the tasks completed state.
53 | ///
54 | public bool Completed
55 | {
56 | get => this.Get("Completed");
57 | set => this.Set("Completed", value);
58 | }
59 |
60 | ///
61 | /// Gets or sets the tasks progress.
62 | ///
63 | public double Progress
64 | {
65 | get => this.Get("Progress");
66 | set => this.Set("Progress", value);
67 | }
68 |
69 | ///
70 | /// Gets or sets the tasks total progress.
71 | ///
72 | public double ProgressTotal
73 | {
74 | get => this.Get("ProgressTotal");
75 | set => this.Set("ProgressTotal", value);
76 | }
77 |
78 | ///
79 | /// Gets or sets the text to display for this task.
80 | ///
81 | public string Text
82 | {
83 | get => this.Get("Text");
84 | set => this.Set("Text", value);
85 | }
86 | }
87 | }
--------------------------------------------------------------------------------
/Steamless/Model/Tasks/LoadPluginsTask.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.Model.Tasks
27 | {
28 | using API.Events;
29 | using API.Model;
30 | using System.Collections.ObjectModel;
31 | using System.Linq;
32 | using System.Threading.Tasks;
33 | using System.Windows;
34 | using ViewModel;
35 |
36 | public class LoadPluginsTask : BaseTask
37 | {
38 | ///
39 | /// Default Constructor
40 | ///
41 | public LoadPluginsTask()
42 | {
43 | this.Text = "Loading plugins...";
44 | }
45 |
46 | ///
47 | /// The tasks main function to execute when started.
48 | ///
49 | public override Task DoTask()
50 | {
51 | return Task.Run(async () =>
52 | {
53 | // Obtain the view model locator..
54 | var vml = Application.Current.FindResource("ViewModelLocator") as ViewModelLocator;
55 | if (vml == null)
56 | return;
57 |
58 | vml.MainWindow.SelectedPluginIndex = -1;
59 |
60 | // Obtain the list of plugins..
61 | var plugins = await vml.DataService.GetSteamlessPlugins();
62 |
63 | // Sort the plugins..
64 | var sorted = plugins.OrderBy(p => p.Name).ToList();
65 |
66 | // Print out the loaded plugins..
67 | sorted.ForEach(p =>
68 | {
69 | Application.Current.Dispatcher.Invoke(() =>
70 | {
71 | vml.LoggingService.OnAddLogMessage(this, new LogMessageEventArgs($"Loaded plugin: {p.Name} - by {p.Author} (v.{p.Version})", LogMessageType.Success));
72 | });
73 | });
74 |
75 | // Add the automatic plugin at the start of the list..
76 | var auto = new AutomaticPlugin();
77 | auto.Initialize(vml.LoggingService);
78 | sorted.Insert(0, auto);
79 |
80 | // Set the plugins..
81 | vml.MainWindow.Plugins = new ObservableCollection(sorted);
82 | vml.MainWindow.SelectedPluginIndex = 0;
83 | });
84 | }
85 | }
86 | }
--------------------------------------------------------------------------------
/Steamless/Model/Tasks/StartSteamlessTask.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.Model.Tasks
27 | {
28 | using System.Threading;
29 | using System.Threading.Tasks;
30 |
31 | public class StartSteamlessTask : BaseTask
32 | {
33 | ///
34 | /// Default Constructor
35 | ///
36 | public StartSteamlessTask()
37 | {
38 | this.Text = "Starting Steamless...";
39 | }
40 |
41 | ///
42 | /// The tasks main function to execute when started.
43 | ///
44 | public override Task DoTask()
45 | {
46 | return Task.Run(() =>
47 | {
48 | Thread.Sleep(1000);
49 | });
50 | }
51 | }
52 | }
--------------------------------------------------------------------------------
/Steamless/Model/Tasks/StatusTask.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.Model.Tasks
27 | {
28 | using System.Threading;
29 | using System.Threading.Tasks;
30 |
31 | public class StatusTask : BaseTask
32 | {
33 | ///
34 | /// Default Constructor
35 | ///
36 | ///
37 | public StatusTask(string msg)
38 | {
39 | this.Text = msg;
40 | }
41 |
42 | ///
43 | /// The tasks main function to execute when started.
44 | ///
45 | public override Task DoTask()
46 | {
47 | return Task.Run(() =>
48 | {
49 | Thread.Sleep(1000);
50 | });
51 | }
52 | }
53 | }
--------------------------------------------------------------------------------
/Steamless/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 | using System.Windows;
29 |
30 | [assembly: AssemblyTitle("Steamless")]
31 | [assembly: AssemblyDescription("Removes the SteamStub DRM protection from Steam applications.")]
32 | [assembly: AssemblyConfiguration("Release")]
33 | [assembly: AssemblyCompany("atom0s")]
34 | [assembly: AssemblyProduct("Steamless")]
35 | [assembly: AssemblyCopyright("Copyright © atom0s 2015 - 2024")]
36 | [assembly: AssemblyTrademark("")]
37 | [assembly: AssemblyCulture("")]
38 | [assembly: ComVisible(false)]
39 | [assembly: ThemeInfo(ResourceDictionaryLocation.None, ResourceDictionaryLocation.SourceAssembly)]
40 | [assembly: AssemblyVersion("3.1.0.5")]
41 | [assembly: AssemblyFileVersion("3.1.0.5")]
--------------------------------------------------------------------------------
/Steamless/Properties/Resources.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Steamless.Properties
12 | {
13 |
14 |
15 | ///
16 | /// A strongly-typed resource class, for looking up localized strings, etc.
17 | ///
18 | // This class was auto-generated by the StronglyTypedResourceBuilder
19 | // class via a tool like ResGen or Visual Studio.
20 | // To add or remove a member, edit your .ResX file then rerun ResGen
21 | // with the /str option, or rebuild your VS project.
22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
25 | internal class Resources
26 | {
27 |
28 | private static global::System.Resources.ResourceManager resourceMan;
29 |
30 | private static global::System.Globalization.CultureInfo resourceCulture;
31 |
32 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
33 | internal Resources()
34 | {
35 | }
36 |
37 | ///
38 | /// Returns the cached ResourceManager instance used by this class.
39 | ///
40 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
41 | internal static global::System.Resources.ResourceManager ResourceManager
42 | {
43 | get
44 | {
45 | if ((resourceMan == null))
46 | {
47 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Steamless.Properties.Resources", typeof(Resources).Assembly);
48 | resourceMan = temp;
49 | }
50 | return resourceMan;
51 | }
52 | }
53 |
54 | ///
55 | /// Overrides the current thread's CurrentUICulture property for all
56 | /// resource lookups using this strongly typed resource class.
57 | ///
58 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
59 | internal static global::System.Globalization.CultureInfo Culture
60 | {
61 | get
62 | {
63 | return resourceCulture;
64 | }
65 | set
66 | {
67 | resourceCulture = value;
68 | }
69 | }
70 | }
71 | }
72 |
--------------------------------------------------------------------------------
/Steamless/Properties/Resources.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 | text/microsoft-resx
107 |
108 |
109 | 2.0
110 |
111 |
112 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
113 |
114 |
115 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
--------------------------------------------------------------------------------
/Steamless/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // This code was generated by a tool.
4 | // Runtime Version:4.0.30319.42000
5 | //
6 | // Changes to this file may cause incorrect behavior and will be lost if
7 | // the code is regenerated.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace Steamless.Properties
12 | {
13 |
14 |
15 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
16 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
17 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
18 | {
19 |
20 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
21 |
22 | public static Settings Default
23 | {
24 | get
25 | {
26 | return defaultInstance;
27 | }
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Steamless/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/Steamless/View/AboutView.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.View
27 | {
28 | ///
29 | /// Interaction logic for AboutView.xaml
30 | ///
31 | public partial class AboutView
32 | {
33 | ///
34 | /// Default Constructor
35 | ///
36 | public AboutView()
37 | {
38 | this.InitializeComponent();
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/Steamless/View/MainView.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.View
27 | {
28 | ///
29 | /// Interaction logic for MainView.xaml
30 | ///
31 | public partial class MainView
32 | {
33 | ///
34 | /// Default Constructor
35 | ///
36 | public MainView()
37 | {
38 | this.InitializeComponent();
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/Steamless/View/MainWindow.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.View
27 | {
28 | ///
29 | /// Interaction logic for MainWindow.xaml
30 | ///
31 | public partial class MainWindow
32 | {
33 | ///
34 | /// Default Constructor
35 | ///
36 | public MainWindow()
37 | {
38 | this.InitializeComponent();
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/Steamless/View/SplashView.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.View
27 | {
28 | ///
29 | /// Interaction logic for SplashView.xaml
30 | ///
31 | public partial class SplashView
32 | {
33 | ///
34 | /// Default Constructor
35 | ///
36 | public SplashView()
37 | {
38 | this.InitializeComponent();
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/Steamless/ViewModel/ViewModelLocator.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.ViewModel
27 | {
28 | using API.Services;
29 | using GalaSoft.MvvmLight.Ioc;
30 | using Microsoft.Practices.ServiceLocation;
31 | using Model;
32 |
33 | public class ViewModelLocator
34 | {
35 | ///
36 | /// Default Constructor
37 | ///
38 | static ViewModelLocator()
39 | {
40 | // Setup the locator provider..
41 | ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
42 |
43 | // Register our types..
44 | SimpleIoc.Default.Register();
45 | SimpleIoc.Default.Register();
46 | SimpleIoc.Default.Register();
47 | }
48 |
49 | ///
50 | /// Gets the main window view model.
51 | ///
52 | public MainWindowViewModel MainWindow => ServiceLocator.Current.GetInstance();
53 |
54 | ///
55 | /// Gets the main data service.
56 | ///
57 | public IDataService DataService => ServiceLocator.Current.GetInstance();
58 |
59 | ///
60 | /// Gets the logging service.
61 | ///
62 | public LoggingService LoggingService => ServiceLocator.Current.GetInstance();
63 | }
64 | }
--------------------------------------------------------------------------------
/repo/steamless.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/atom0s/Steamless/cd770bf9749d3e4f438d23ac643917ad1a804257/repo/steamless.png
--------------------------------------------------------------------------------