├── .github └── FUNDING.yml ├── .gitignore ├── LICENSE ├── README.md ├── SteamAccCreator.sln ├── SteamAccCreator ├── App.config ├── Defaults │ ├── Mail.cs │ └── Web.cs ├── Enums │ ├── CaptchaService.cs │ ├── ProxyStatus.cs │ └── ProxyType.cs ├── File │ ├── FileManager.cs │ └── SaveType.cs ├── Firefox │ ├── AccessibleHandler.dll │ ├── AccessibleMarshal.dll │ ├── IA2Marshal.dll │ ├── breakpadinjector.dll │ ├── d3dcompiler_47.dll │ ├── freebl3.dll │ ├── lgpllibs.dll │ ├── libEGL.dll │ ├── libGLESv2.dll │ ├── mozavcodec.dll │ ├── mozavutil.dll │ ├── mozglue.dll │ ├── nss3.dll │ ├── nssckbi.dll │ ├── nssdbm3.dll │ ├── omni.ja │ ├── plugin-container.exe │ ├── plugin-hang-ui.exe │ ├── qipcap.dll │ ├── softokn3.dll │ └── xul.dll ├── FodyWeavers.xml ├── FodyWeavers.xsd ├── Gui │ ├── AccountCreator.cs │ ├── AddGameDialog.Designer.cs │ ├── AddGameDialog.cs │ ├── AddGameDialog.resx │ ├── CaptchaDialog.Designer.cs │ ├── CaptchaDialog.cs │ ├── CaptchaDialog.resx │ ├── InputDialog.Designer.cs │ ├── InputDialog.cs │ ├── InputDialog.resx │ ├── MainForm.Designer.cs │ ├── MainForm.cs │ ├── MainForm.resx │ ├── ReCaptchaDialog.Designer.cs │ ├── ReCaptchaDialog.cs │ └── ReCaptchaDialog.resx ├── Interfaces │ └── ICaptchaDialog.cs ├── Logger.cs ├── Models │ ├── CaptchaSolutionsConfig.cs │ ├── CaptchaSolvingConfig.cs │ ├── Configuration.cs │ ├── CredentialConfig.cs │ ├── GameInfo.cs │ ├── GamesConfig.cs │ ├── MailConfig.cs │ ├── OutputConfig.cs │ ├── ProfileConfig.cs │ ├── ProxyConfig.cs │ ├── ProxyItem.cs │ ├── RuCaptchaConfig.cs │ └── Steam │ │ ├── CaptchaResponse.cs │ │ └── UploadProfileImage.cs ├── NLog.config ├── Pathes.cs ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── DataSources │ │ ├── SteamAccCreator.Models.ProfileConfig.datasource │ │ └── SteamAccCreator.Models.ProxyItem.datasource │ ├── Resources.Designer.cs │ ├── Resources.resx │ ├── Settings.Designer.cs │ └── Settings.settings ├── SteamAccCreator.csproj ├── Utility.cs ├── Web │ ├── Captcha │ │ └── CaptchaSolution.cs │ ├── Error.cs │ ├── HttpHandler.cs │ ├── MailHandler.cs │ ├── ProxyManager.cs │ └── Updater │ │ ├── Enums │ │ └── UpdateChannelEnum.cs │ │ ├── Models │ │ ├── DownloadLinks.cs │ │ ├── Misc.cs │ │ ├── Updates.cs │ │ └── VersionInfo.cs │ │ ├── UpdateInfo.cs │ │ └── UpdaterHandler.cs ├── packages.config └── photo_2018-12-26_15-38-43.ico └── appveyor.yml /.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: sac_desktop 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: earskilla 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | custom: https://www.buymeacoffee.com/KejOif4Tu 9 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.suo 8 | *.user 9 | *.userosscache 10 | *.sln.docstates 11 | 12 | # User-specific files (MonoDevelop/Xamarin Studio) 13 | *.userprefs 14 | 15 | # Build results 16 | [Dd]ebug/ 17 | [Dd]ebugPublic/ 18 | [Rr]elease/ 19 | [Rr]eleases/ 20 | x64/ 21 | x86/ 22 | bld/ 23 | [Bb]in/ 24 | [Oo]bj/ 25 | [Ll]og/ 26 | 27 | # Visual Studio 2015/2017 cache/options directory 28 | .vs/ 29 | # Uncomment if you have tasks that create the project's static files in wwwroot 30 | #wwwroot/ 31 | 32 | # Visual Studio 2017 auto generated files 33 | Generated\ Files/ 34 | 35 | # MSTest test Results 36 | [Tt]est[Rr]esult*/ 37 | [Bb]uild[Ll]og.* 38 | 39 | # NUNIT 40 | *.VisualState.xml 41 | TestResult.xml 42 | 43 | # Build Results of an ATL Project 44 | [Dd]ebugPS/ 45 | [Rr]eleasePS/ 46 | dlldata.c 47 | 48 | # Benchmark Results 49 | BenchmarkDotNet.Artifacts/ 50 | 51 | # .NET Core 52 | project.lock.json 53 | project.fragment.lock.json 54 | artifacts/ 55 | **/Properties/launchSettings.json 56 | 57 | # StyleCop 58 | StyleCopReport.xml 59 | 60 | # Files built by Visual Studio 61 | *_i.c 62 | *_p.c 63 | *_i.h 64 | *.ilk 65 | *.meta 66 | *.obj 67 | *.iobj 68 | *.pch 69 | *.pdb 70 | *.ipdb 71 | *.pgc 72 | *.pgd 73 | *.rsp 74 | *.sbr 75 | *.tlb 76 | *.tli 77 | *.tlh 78 | *.tmp 79 | *.tmp_proj 80 | *.log 81 | *.vspscc 82 | *.vssscc 83 | .builds 84 | *.pidb 85 | *.svclog 86 | *.scc 87 | 88 | # Chutzpah Test files 89 | _Chutzpah* 90 | 91 | # Visual C++ cache files 92 | ipch/ 93 | *.aps 94 | *.ncb 95 | *.opendb 96 | *.opensdf 97 | *.sdf 98 | *.cachefile 99 | *.VC.db 100 | *.VC.VC.opendb 101 | 102 | # Visual Studio profiler 103 | *.psess 104 | *.vsp 105 | *.vspx 106 | *.sap 107 | 108 | # Visual Studio Trace Files 109 | *.e2e 110 | 111 | # TFS 2012 Local Workspace 112 | $tf/ 113 | 114 | # Guidance Automation Toolkit 115 | *.gpState 116 | 117 | # ReSharper is a .NET coding add-in 118 | _ReSharper*/ 119 | *.[Rr]e[Ss]harper 120 | *.DotSettings.user 121 | 122 | # JustCode is a .NET coding add-in 123 | .JustCode 124 | 125 | # TeamCity is a build add-in 126 | _TeamCity* 127 | 128 | # DotCover is a Code Coverage Tool 129 | *.dotCover 130 | 131 | # AxoCover is a Code Coverage Tool 132 | .axoCover/* 133 | !.axoCover/settings.json 134 | 135 | # Visual Studio code coverage results 136 | *.coverage 137 | *.coveragexml 138 | 139 | # NCrunch 140 | _NCrunch_* 141 | .*crunch*.local.xml 142 | nCrunchTemp_* 143 | 144 | # MightyMoose 145 | *.mm.* 146 | AutoTest.Net/ 147 | 148 | # Web workbench (sass) 149 | .sass-cache/ 150 | 151 | # Installshield output folder 152 | [Ee]xpress/ 153 | 154 | # DocProject is a documentation generator add-in 155 | DocProject/buildhelp/ 156 | DocProject/Help/*.HxT 157 | DocProject/Help/*.HxC 158 | DocProject/Help/*.hhc 159 | DocProject/Help/*.hhk 160 | DocProject/Help/*.hhp 161 | DocProject/Help/Html2 162 | DocProject/Help/html 163 | 164 | # Click-Once directory 165 | publish/ 166 | 167 | # Publish Web Output 168 | *.[Pp]ublish.xml 169 | *.azurePubxml 170 | # Note: Comment the next line if you want to checkin your web deploy settings, 171 | # but database connection strings (with potential passwords) will be unencrypted 172 | *.pubxml 173 | *.publishproj 174 | 175 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 176 | # checkin your Azure Web App publish settings, but sensitive information contained 177 | # in these scripts will be unencrypted 178 | PublishScripts/ 179 | 180 | # NuGet Packages 181 | *.nupkg 182 | # The packages folder can be ignored because of Package Restore 183 | **/[Pp]ackages/* 184 | # except build/, which is used as an MSBuild target. 185 | !**/[Pp]ackages/build/ 186 | # Uncomment if necessary however generally it will be regenerated when needed 187 | #!**/[Pp]ackages/repositories.config 188 | # NuGet v3's project.json files produces more ignorable files 189 | *.nuget.props 190 | *.nuget.targets 191 | 192 | # Microsoft Azure Build Output 193 | csx/ 194 | *.build.csdef 195 | 196 | # Microsoft Azure Emulator 197 | ecf/ 198 | rcf/ 199 | 200 | # Windows Store app package directories and files 201 | AppPackages/ 202 | BundleArtifacts/ 203 | Package.StoreAssociation.xml 204 | _pkginfo.txt 205 | *.appx 206 | 207 | # Visual Studio cache files 208 | # files ending in .cache can be ignored 209 | *.[Cc]ache 210 | # but keep track of directories ending in .cache 211 | !*.[Cc]ache/ 212 | 213 | # Others 214 | ClientBin/ 215 | ~$* 216 | *~ 217 | *.dbmdl 218 | *.dbproj.schemaview 219 | *.jfm 220 | *.pfx 221 | *.publishsettings 222 | orleans.codegen.cs 223 | 224 | # Including strong name files can present a security risk 225 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 226 | #*.snk 227 | 228 | # Since there are multiple workflows, uncomment next line to ignore bower_components 229 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 230 | #bower_components/ 231 | 232 | # RIA/Silverlight projects 233 | Generated_Code/ 234 | 235 | # Backup & report files from converting an old project file 236 | # to a newer Visual Studio version. Backup files are not needed, 237 | # because we have git ;-) 238 | _UpgradeReport_Files/ 239 | Backup*/ 240 | UpgradeLog*.XML 241 | UpgradeLog*.htm 242 | ServiceFabricBackup/ 243 | *.rptproj.bak 244 | 245 | # SQL Server files 246 | *.mdf 247 | *.ldf 248 | *.ndf 249 | 250 | # Business Intelligence projects 251 | *.rdl.data 252 | *.bim.layout 253 | *.bim_*.settings 254 | *.rptproj.rsuser 255 | 256 | # Microsoft Fakes 257 | FakesAssemblies/ 258 | 259 | # GhostDoc plugin setting file 260 | *.GhostDoc.xml 261 | 262 | # Node.js Tools for Visual Studio 263 | .ntvs_analysis.dat 264 | node_modules/ 265 | 266 | # Visual Studio 6 build log 267 | *.plg 268 | 269 | # Visual Studio 6 workspace options file 270 | *.opt 271 | 272 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 273 | *.vbw 274 | 275 | # Visual Studio LightSwitch build output 276 | **/*.HTMLClient/GeneratedArtifacts 277 | **/*.DesktopClient/GeneratedArtifacts 278 | **/*.DesktopClient/ModelManifest.xml 279 | **/*.Server/GeneratedArtifacts 280 | **/*.Server/ModelManifest.xml 281 | _Pvt_Extensions 282 | 283 | # Paket dependency manager 284 | .paket/paket.exe 285 | paket-files/ 286 | 287 | # FAKE - F# Make 288 | .fake/ 289 | 290 | # JetBrains Rider 291 | .idea/ 292 | *.sln.iml 293 | 294 | # CodeRush 295 | .cr/ 296 | 297 | # Python Tools for Visual Studio (PTVS) 298 | __pycache__/ 299 | *.pyc 300 | 301 | # Cake - Uncomment if you are using it 302 | # tools/** 303 | # !tools/packages.config 304 | 305 | # Tabs Studio 306 | *.tss 307 | 308 | # Telerik's JustMock configuration file 309 | *.jmconfig 310 | 311 | # BizTalk build output 312 | *.btp.cs 313 | *.btm.cs 314 | *.odx.cs 315 | *.xsd.cs 316 | 317 | # OpenCover UI analysis results 318 | OpenCover/ 319 | 320 | # Azure Stream Analytics local run output 321 | ASALocalRun/ 322 | 323 | # MSBuild Binary and Structured Log 324 | *.binlog 325 | 326 | # NVidia Nsight GPU debugger configuration file 327 | *.nvuser 328 | 329 | # MFractors (Xamarin productivity tool) working folder 330 | .mfractor/ 331 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Hax0r 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Steam-Account-Creator 2 | Steam Account Generator 3 | 4 | # This project was abandoned for a long time 5 | So.. I decided to archive this repository. See #77 issue from 2020 year for details 6 | 7 | Web generator: https://accgen.cathook.club/ (not maintained by [EarsKilla](https://github.com/EarsKilla)) 8 | 9 | |Branch|CI status| 10 | |------|---------| 11 | |[MASTER](https://github.com/EarsKilla/Steam-Account-Generator/tree/master)|[![Build status](https://ci.appveyor.com/api/projects/status/b60sjwtl69ln5ir6/branch/master?svg=true)](https://ci.appveyor.com/project/EarsKilla/steam-account-generator/branch/master)| 12 | |[DEV](https://github.com/EarsKilla/Steam-Account-Generator/tree/dev)|[![Build status](https://ci.appveyor.com/api/projects/status/b60sjwtl69ln5ir6/branch/dev?svg=true)](https://ci.appveyor.com/project/EarsKilla/steam-account-generator/branch/dev)| 13 | 14 | ![screenshot](https://i.vgy.me/cgb0Bo.png) 15 | 16 | Mass Steam Account generator features: 17 | - [x] Auto generate and verify email 18 | - [x] Custom email domain ([How to do this](https://github.com/EarsKilla/Steam-Account-Generator/wiki/Using-custom-mail-domain)) 19 | - [x] Auto generate username 20 | - [x] Auto generate password 21 | - [x] Update profile info 22 | - Name 23 | - Real name 24 | - Bio 25 | - Profile image 26 | - Location (country, city, etc) 27 | - Set url with your username (like this: `https://steamcommunity.com/id/`) 28 | - [x] Auto add free games to account 29 | - [x] Export/import this list 30 | - **Note:** [How to find sub ID](https://github.com/EarsKilla/Steam-Account-Generator/wiki/Find-sub-ID) 31 | - [x] Resolve Steam ID of created account 32 | - [x] Auto save to text file 33 | - Can save accounts in CSV format and it can be imported for example in KeePass 34 | - [x] Manual and auto captcha services: 35 | - Captchasolutions 36 | - 2Captcha/RuCaptcha 37 | - **Note:** You can replace hosts of auto captcha services ([here is how to do this](https://github.com/EarsKilla/Steam-Account-Generator/releases/tag/v1.1.2-pre3)) 38 | - [x] Proxy support 39 | - [x] Multiple proxies are supported 40 | It will work with http/https/socks4/socks5 41 | - [x] Save most settings in JSON file. 42 | 43 | # Download 44 | [Steam-Account-Generator/releases](https://github.com/EarsKilla/Steam-Account-Generator/releases) 45 | 46 | # Requirements 47 | - [.NET Framework 4.7.2](https://dotnet.microsoft.com/download/dotnet-framework-runtime/net472) 48 | - [Visual C++ Redistributable for Visual Studio 2015](https://www.microsoft.com/en-us/download/details.aspx?id=48145) 49 | This link will download x86 and x64 versions. You need to install both of them. 50 | 51 | # Communication 52 | 🇫 Discord was died. 53 | - [Telegram](https://t.me/joinchat/KlzcPlIIzac3vF3ZjC2SrA) 54 | **Note:** [Secondary link](https://onem3.cf/sac/) | GitHub hosted page 55 | This is alternative for those who was born in country with "good" government (like me) 56 | --- 57 | - Read [F.A.Q.](https://github.com/EarsKilla/Steam-Account-Generator/wiki/F.A.Q.) 58 | - Look [Issues](https://github.com/EarsKilla/Steam-Account-Generator/issues) 59 | - If you're still having issue that not solved or solution not found in places above. You can: 60 | - Ask for it in telegram chat (you will see link in [communication](#communication) part) 61 | - Create new issue 62 | -------------------------------------------------------------------------------- /SteamAccCreator.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.27428.2037 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SteamAccCreator", "SteamAccCreator\SteamAccCreator.csproj", "{0D27F487-C4E3-4F60-9DDE-6C0924280B79}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Pre-Release|Any CPU = Pre-Release|Any CPU 12 | Release|Any CPU = Release|Any CPU 13 | EndGlobalSection 14 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 15 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 16 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79}.Debug|Any CPU.Build.0 = Debug|Any CPU 17 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79}.Pre-Release|Any CPU.ActiveCfg = Pre-Release|Any CPU 18 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79}.Pre-Release|Any CPU.Build.0 = Pre-Release|Any CPU 19 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79}.Release|Any CPU.ActiveCfg = Release|Any CPU 20 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79}.Release|Any CPU.Build.0 = Release|Any CPU 21 | EndGlobalSection 22 | GlobalSection(SolutionProperties) = preSolution 23 | HideSolutionNode = FALSE 24 | EndGlobalSection 25 | GlobalSection(ExtensibilityGlobals) = postSolution 26 | SolutionGuid = {467B3D80-FE32-4703-8BC0-1B5CDF172B91} 27 | EndGlobalSection 28 | EndGlobal 29 | -------------------------------------------------------------------------------- /SteamAccCreator/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /SteamAccCreator/Defaults/Mail.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Defaults 2 | { 3 | public partial class Mail 4 | { 5 | public const string MAILBOX_ADDRESS = "https://newemailsrv.now.sh/"; 6 | 7 | public const int COUNT_OF_CHECKS_MAIL_USER = 300; 8 | public const int COUNT_OF_CHECKS_MAIL_AUTO = 5; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SteamAccCreator/Defaults/Web.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Defaults 4 | { 5 | public partial class Web 6 | { 7 | public const string USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:67.0) Gecko/20100101 Firefox/67.0"; 8 | 9 | public const string STEAM_ADDRESS = "https://store.steampowered.com/"; 10 | 11 | public const string STEAM_RESOURCE_JOIN = "join/"; 12 | public const string STEAM_JOIN_ADDRESS = STEAM_ADDRESS + STEAM_RESOURCE_JOIN; 13 | public static readonly Uri STEAM_JOIN_URI = new Uri(STEAM_JOIN_ADDRESS); 14 | 15 | public const string STEAM_RESOURCE_LOGIN = "login/"; 16 | public const string STEAM_LOGIN_ADDRESS = STEAM_ADDRESS + STEAM_RESOURCE_LOGIN; 17 | public const string STEAM_RESOURCE_RENDER_CAPTCHA = "rendercaptcha"; 18 | public const string STEAM_RENDER_CAPTCHA_ADDRESS = STEAM_LOGIN_ADDRESS + STEAM_RESOURCE_RENDER_CAPTCHA; 19 | 20 | public const string STEAM_RESOURCE_AJAX_VERIFY_EMAIL = "ajaxverifyemail"; 21 | public const string STEAM_AJAX_VERIFY_EMAIL_ADDRESS = STEAM_JOIN_ADDRESS + STEAM_RESOURCE_AJAX_VERIFY_EMAIL; 22 | public static readonly Uri STEAM_AJAX_VERIFY_EMAIL_URI = new Uri(STEAM_AJAX_VERIFY_EMAIL_ADDRESS); 23 | 24 | public const string STEAM_RESOURCE_AJAX_CHECK_VERIFIED = "ajaxcheckemailverified"; 25 | public const string STEAM_AJAX_CHECK_VERIFIED_ADDRESS = STEAM_JOIN_ADDRESS + STEAM_RESOURCE_AJAX_CHECK_VERIFIED; 26 | public static readonly Uri STEAM_AJAX_CHECK_VERIFIED_URI = new Uri(STEAM_AJAX_CHECK_VERIFIED_ADDRESS); 27 | 28 | public const string STEAM_RESOURCE_CHECK_AVAILABLE = "checkavail"; 29 | public const string STEAM_CHECK_AVAILABLE_ADDRESS = STEAM_JOIN_ADDRESS + STEAM_RESOURCE_CHECK_AVAILABLE; 30 | public static readonly Uri STEAM_CHECK_AVAILABLE_URI = new Uri(STEAM_CHECK_AVAILABLE_ADDRESS); 31 | 32 | public const string STEAM_RESOURCE_CHECK_AVAILABLE_PASSWORD = "checkpasswordavail"; 33 | public const string STEAM_CHECK_AVAILABLE_PASSWORD_ADDRESS = STEAM_JOIN_ADDRESS + STEAM_RESOURCE_CHECK_AVAILABLE_PASSWORD; 34 | public static readonly Uri STEAM_CHECK_AVAILABLE_PASSWORD_URI = new Uri(STEAM_CHECK_AVAILABLE_PASSWORD_ADDRESS); 35 | 36 | public const string STEAM_RESOURCE_CREATE_ACCOUNT = "createaccount"; 37 | public const string STEAM_CREATE_ACCOUNT_ADDRESS = STEAM_JOIN_ADDRESS + STEAM_RESOURCE_CREATE_ACCOUNT; 38 | public static readonly Uri STEAM_CREATE_ACCOUNT_URI = new Uri(STEAM_CREATE_ACCOUNT_ADDRESS); 39 | 40 | public const string STEAM_ACCOUNT_VERIFY_ADDRESS = STEAM_ADDRESS + "account/newaccountverification"; 41 | public static readonly Uri STEAM_ACCOUNT_VERIFY_URI = new Uri(STEAM_ACCOUNT_VERIFY_ADDRESS); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SteamAccCreator/Enums/CaptchaService.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Enums 2 | { 3 | public enum CaptchaService 4 | { 5 | None = -1, 6 | Captchasolutions, 7 | RuCaptcha 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SteamAccCreator/Enums/ProxyStatus.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Enums 2 | { 3 | public enum ProxyStatus 4 | { 5 | Unknown, 6 | Working, 7 | Broken 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SteamAccCreator/Enums/ProxyType.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Enums 2 | { 3 | public enum ProxyType 4 | { 5 | Unknown, 6 | Http, 7 | Https, 8 | Socks4, 9 | Socks5 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SteamAccCreator/File/FileManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.IO; 3 | using System.Threading.Tasks; 4 | using SteamAccCreator.Gui; 5 | 6 | namespace SteamAccCreator.File 7 | { 8 | public class FileManager 9 | { 10 | private static readonly Random Random = new Random(); 11 | 12 | public static int GetRandomNumber(int min, int max) 13 | { 14 | lock (Random) // synchronize 15 | { 16 | return Random.Next(min, max); 17 | } 18 | } 19 | public void WriteIntoFile(string mail, bool writeMail, string alias, string pass, long steamId, string path, SaveType fwType) 20 | { 21 | Logger.Trace("Creating account: Writing to file..."); 22 | try 23 | { 24 | Task.Delay(GetRandomNumber(100, 5000)).Wait(); 25 | 26 | using (var writer = new StreamWriter(path, true)) 27 | { 28 | switch (fwType) 29 | { 30 | case SaveType.FormattedTxt: 31 | { 32 | Logger.Trace("Writing to file: formatted text"); 33 | if (writeMail) 34 | writer.WriteLine("Mail: \t\t" + mail); 35 | 36 | writer.WriteLine("Alias: \t\t" + alias); 37 | writer.WriteLine("Pass: \t\t" + pass); 38 | writer.WriteLine("Creation: \t" + DateTime.Now); 39 | 40 | if (steamId != 0) 41 | writer.WriteLine($"URL: \t\thttps://steamcommunity.com/profiles/{steamId}"); 42 | 43 | writer.WriteLine("###########################"); 44 | } 45 | break; 46 | case SaveType.PlainTxt: 47 | { 48 | Logger.Trace("Writing to file: plain text"); 49 | if (writeMail == false) 50 | writer.WriteLine(alias + ":" + pass); 51 | else 52 | writer.WriteLine(alias + ":" + pass + ":" + mail); 53 | } 54 | break; 55 | case SaveType.KeepassCsv: 56 | { 57 | Logger.Trace("Writing to file: CSV data"); 58 | writer.WriteLine($"{alias},{alias},{pass},https://steamcommunity.com/profiles/{steamId}/,{((writeMail) ? mail : "")}"); 59 | } 60 | break; 61 | } 62 | } 63 | } 64 | catch (Exception ex) 65 | { 66 | Logger.Error("Creating account: Writing to file error", ex); 67 | } 68 | Logger.Trace("Creating account: Writing to file done!"); 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /SteamAccCreator/File/SaveType.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.File 2 | { 3 | public enum SaveType 4 | { 5 | PlainTxt, 6 | FormattedTxt, 7 | KeepassCsv 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/AccessibleHandler.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/AccessibleHandler.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/AccessibleMarshal.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/AccessibleMarshal.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/IA2Marshal.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/IA2Marshal.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/breakpadinjector.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/breakpadinjector.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/d3dcompiler_47.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/d3dcompiler_47.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/freebl3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/freebl3.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/lgpllibs.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/lgpllibs.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/libEGL.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/libEGL.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/libGLESv2.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/libGLESv2.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/mozavcodec.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/mozavcodec.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/mozavutil.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/mozavutil.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/mozglue.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/mozglue.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/nss3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/nss3.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/nssckbi.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/nssckbi.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/nssdbm3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/nssdbm3.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/omni.ja: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/omni.ja -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/plugin-container.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/plugin-container.exe -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/plugin-hang-ui.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/plugin-hang-ui.exe -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/qipcap.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/qipcap.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/softokn3.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/softokn3.dll -------------------------------------------------------------------------------- /SteamAccCreator/Firefox/xul.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/Firefox/xul.dll -------------------------------------------------------------------------------- /SteamAccCreator/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | -------------------------------------------------------------------------------- /SteamAccCreator/FodyWeavers.xsd: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks 13 | 14 | 15 | 16 | 17 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. 18 | 19 | 20 | 21 | 22 | A list of unmanaged 32 bit assembly names to include, delimited with line breaks. 23 | 24 | 25 | 26 | 27 | A list of unmanaged 64 bit assembly names to include, delimited with line breaks. 28 | 29 | 30 | 31 | 32 | The order of preloaded assemblies, delimited with line breaks. 33 | 34 | 35 | 36 | 37 | 38 | This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. 39 | 40 | 41 | 42 | 43 | Controls if .pdbs for reference assemblies are also embedded. 44 | 45 | 46 | 47 | 48 | Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. 49 | 50 | 51 | 52 | 53 | As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. 54 | 55 | 56 | 57 | 58 | Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. 59 | 60 | 61 | 62 | 63 | Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. 64 | 65 | 66 | 67 | 68 | A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | 69 | 70 | 71 | 72 | 73 | A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. 74 | 75 | 76 | 77 | 78 | A list of unmanaged 32 bit assembly names to include, delimited with |. 79 | 80 | 81 | 82 | 83 | A list of unmanaged 64 bit assembly names to include, delimited with |. 84 | 85 | 86 | 87 | 88 | The order of preloaded assemblies, delimited with |. 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. 97 | 98 | 99 | 100 | 101 | A comma-separated list of error codes that can be safely ignored in assembly verification. 102 | 103 | 104 | 105 | 106 | 'false' to turn off automatic generation of the XML Schema file. 107 | 108 | 109 | 110 | 111 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/AccountCreator.cs: -------------------------------------------------------------------------------- 1 | using SteamAccCreator.File; 2 | using SteamAccCreator.Web; 3 | using System; 4 | using System.Collections; 5 | using System.Collections.Generic; 6 | using System.Globalization; 7 | using System.Net; 8 | using System.Text.RegularExpressions; 9 | using System.Threading.Tasks; 10 | using System.Windows.Forms; 11 | 12 | namespace SteamAccCreator.Gui 13 | { 14 | public class AccountCreator 15 | { 16 | #region Animals 17 | private static readonly string[] Animals = new[] 18 | { 19 | "Aardvark", "Albatross", "Alligator", "Alpaca", 20 | "Ant", "Anteater", "Antelope", "Ape", "Armadillo", 21 | "Donkey", "Baboon", "Badger", "Barracuda", "Bat", 22 | "Bear", "Beaver", "Bee", "Bison", "Boar", "Buffalo", 23 | "Butterfly", "Camel", "Capybara", "Caribou", 24 | "Cassowary", "Cat", "Caterpillar", "Cattle", 25 | "Chamois", "Cheetah", "Chicken", "Chimpanzee", 26 | "Chinchilla", "Chough", "Clam", "Cobra", 27 | "Cockroach", "Cod", "Cormorant", "Coyote", "Crab", 28 | "Crane", "Crocodile", "Crow", "Curlew", "Deer", 29 | "Dinosaur", "Dog", "Dogfish", "Dolphin", "Dotterel", 30 | "Dove", "Dragonfly", "Duck", "Dugong", "Dunlin", 31 | "Eagle", "Echidna", "Eel", "Eland", "Elephant", 32 | "Elk", "Emu", "Falcon", "Ferret", "Finch", "Fish", 33 | "Flamingo", "Fly", "Fox", "Frog", "Gaur", "Gazelle", 34 | "Gerbil", "Giraffe", "Gnat", "Gnu", "Goat", "Goldfinch", 35 | "Goldfish", "Goose", "Gorilla", "Goshawk", "Grasshopper", 36 | "Grouse", "Guanaco", "Gull", "Hamster", "Hare", "Hawk", 37 | "Hedgehog", "Heron", "Herring", "Hippopotamus", "Hornet", 38 | "Horse", "Human", "Hummingbird", "Hyena", "Ibex", "Ibis", 39 | "Jackal", "Jaguar", "Jay", "Jellyfish", "Kangaroo", 40 | "Kingfisher", "Koala", "Kookabura", "Kouprey", "Kudu", 41 | "Lapwing", "Lark", "Lemur", "Leopard", "Lion", "Llama", 42 | "Lobster", "Locust", "Loris", "Louse", "Lyrebird", 43 | "Magpie", "Mallard", "Manatee", "Mandrill", "Mantis", 44 | "Marten", "Meerkat", "Mink", "Mole", "Mongoose", "Monkey", 45 | "Moose", "Mosquito", "Mouse", "Mule", "Narwhal", "Newt", 46 | "Nightingale", "Octopus", "Okapi", "Opossum", "Oryx", 47 | "Ostrich", "Otter", "Owl", "Oyster", "Panther", "Parrot", 48 | "Partridge", "Peafowl", "Pelican", "Penguin", "Pheasant", 49 | "Pig", "Pigeon", "Pony", "Porcupine", "Porpoise", "Quail", 50 | "Quelea", "Quetzal", "Rabbit", "Raccoon", "Rail", "Ram", 51 | "Rat", "Raven", "RedDeer", "RedPanda", "Reindeer", 52 | "Rhinoceros", "Rook", "Salamander", "Salmon", "SandDollar", 53 | "Sandpiper", "Sardine", "Scorpion", "Seahorse", "Seal", 54 | "Shark", "Sheep", "Shrew", "Skunk", "Snail", "Snake", 55 | "Sparrow", "Spider", "Spoonbill", "Squid", "Squirrel", 56 | "Starling", "Stingray", "Stinkbug", "Stork", "Swallow", 57 | "Swan", "Tapir", "Tarsier", "Termite", "Tiger", "Toad", 58 | "Trout", "Turkey", "Turtle", "Viper", "Vulture", "Wallaby", 59 | "Walrus", "Wasp", "Weasel", "Whale", "Wildcat", "Wolf", 60 | "Wolverine", "Wombat", "Woodcock", "Woodpecker", "Worm", 61 | "Wren", "Yak", "Zebra" 62 | }; 63 | #endregion 64 | #region Adj 65 | private static readonly string[] Adj = new[] 66 | { 67 | "aback", "abaft", "abandoned", "abashed", "aberrant", 68 | "abhorrent", "abiding", "abject", "ablaze", "able", 69 | "abnormal", "aboard", "aboriginal", "abortive", 70 | "abounding", "abrasive", "abrupt", "absent", "absorbed", 71 | "absorbing", "abstracted", "absurd", "abundant", 72 | "abusive", "acceptable", "accessible", "accidental", 73 | "accurate", "acid", "acidic", "acoustic", "acrid", 74 | "actually", "ad", "hoc", "adamant", "adaptable", 75 | "addicted", "adhesive", "adjoining", "adorable", 76 | "adventurous", "afraid", "aggressive", "agonizing", 77 | "agreeable", "ahead", "ajar", "alcoholic", "alert", 78 | "alike", "alive", "alleged", "alluring", "aloof", "amazing", 79 | "ambiguous", "ambitious", "amuck", "amused", "amusing", 80 | "ancient", "angry", "animated", "annoyed", "annoying", 81 | "anxious", "apathetic", "aquatic", "aromatic", "arrogant", 82 | "ashamed", "aspiring", "assorted", "astonishing", 83 | "attractive", "auspicious", "automatic", "available", 84 | "average", "awake", "aware", "awesome", "awful", "axiomatic", 85 | "bad", "barbarous", "bashful", "bawdy", "beautiful", 86 | "befitting", "belligerent", "beneficial", "bent", "berserk", 87 | "best", "better", "bewildered", "big", "billowy", "bitesized", 88 | "bitter", "bizarre", "black", "blackandwhite", "bloody", 89 | "blue", "blueeyed", "blushing", "boiling", "boorish", "bored", 90 | "boring", "bouncy", "boundless", "brainy", "brash", "brave", 91 | "brawny", "breakable", "breezy", "brief", "bright", "bright", 92 | "broad", "broken", "brown", "bumpy", "burly", "bustling", "busy", 93 | "cagey", "calculating", "callous", "calm", "capable", 94 | "capricious", "careful", "careless", "caring", "cautious", 95 | "ceaseless", "certain", "changeable", "charming", "cheap", 96 | "cheerful", "chemical", "chief", "childlike", "chilly", 97 | "chivalrous", "chubby", "chunky", "clammy", "classy", "clean", 98 | "clear", "clever", "cloistered", "cloudy", "closed", "clumsy", 99 | "cluttered", "coherent", "cold", "colorful", "colossal", 100 | "combative", "comfortable", "common", "complete", "complex", 101 | "concerned", "condemned", "confused", "conscious", "cooing", 102 | "cool", "cooperative", "coordinated", "courageous", "cowardly", 103 | "crabby", "craven", "crazy", "creepy", "crooked", "crowded", 104 | "cruel", "cuddly", "cultured", "cumbersome", "curious", "curly", 105 | "curved", "curvy", "cut", "cute", "cute", "cynical", "daffy", 106 | "daily", "damaged", "damaging", "damp", "dangerous", "dapper", 107 | "dark", "dashing", "dazzling", "dead", "deadpan", "deafening", 108 | "dear", "debonair", "decisive", "decorous", "deep", "deeply", 109 | "defeated", "defective", "defiant", "delicate", "delicious", 110 | "delightful", "demonic", "delirious", "dependent", "depressed", 111 | "deranged", "descriptive", "deserted", "detailed", "determined", 112 | "devilish", "didactic", "different", "difficult", "diligent", 113 | "direful", "dirty", "disagreeable", "disastrous", "discreet", 114 | "disgusted", "disgusting", "disillusioned", "dispensable", 115 | "distinct", "disturbed", "divergent", "dizzy", "domineering", 116 | "doubtful", "drab", "draconian", "dramatic", "dreary", "drunk", 117 | "dry", "dull", "dusty", "dynamic", "dysfunctional", "eager", 118 | "early", "earsplitting", "earthy", "easy", "eatable", 119 | "economic", "educated", "efficacious", "efficient", "eight", 120 | "elastic", "elated", "elderly", "electric", "elegant", "elfin", 121 | "elite", "embarrassed", "eminent", "empty", "enchanted", 122 | "enchanting", "encouraging", "endurable", "energetic", 123 | "enormous", "entertaining", "enthusiastic", "envious", 124 | "equable", "equal", "erect", "erratic", "ethereal", 125 | "evanescent", "evasive", "even", "excellent", "excited", 126 | "exciting", "exclusive", "exotic", "expensive", "extralarge", 127 | "extrasmall", "exuberant", "exultant", "fabulous", "faded", 128 | "faint", "fair", "faithful", "fallacious", "false", "familiar", 129 | "famous", "fanatical", "fancy", "fantastic", "far", "farflung", 130 | "fascinated", "fast", "fat", "faulty", "fearful", "fearless", 131 | "feeble", "feigned", "female", "fertile", "festive", "few", 132 | "fierce", "filthy", "fine", "finicky", "first", "five", 133 | "fixed", "flagrant", "flaky", "flashy", "flat", "flawless", 134 | "flimsy", "flippant", "flowery", "fluffy", "fluttering", 135 | "foamy", "foolish", "foregoing", "forgetful", "fortunate", 136 | "four", "frail", "fragile", "frantic", "free", "freezing", 137 | "frequent", "fresh", "fretful", "friendly", "frightened", 138 | "frightening", "full", "fumbling", "functional", "funny", 139 | "furry", "furtive", "future", "futuristic", "fuzzy", "gabby", 140 | "gainful", "gamy", "gaping", "garrulous", "gaudy", "general", 141 | "gentle", "giant", "giddy", "gifted", "gigantic", "glamorous", 142 | "gleaming", "glib", "glistening", "glorious", "glossy", "godly", 143 | "good", "goofy", "gorgeous", "graceful", "grandiose", "grateful", 144 | "gratis", "gray", "greasy", "great", "greedy", "green", "grey", 145 | "grieving", "groovy", "grotesque", "grouchy", "grubby", "gruesome", 146 | "grumpy", "guarded", "guiltless", "gullible", "gusty", "guttural", 147 | "habitual", "half", "hallowed", "halting", "handsome", "handsomely", 148 | "handy", "hanging", "hapless", "happy", "hard", "hardtofind", 149 | "harmonious", "harsh", "hateful", "heady", "healthy", 150 | "heartbreaking", "heavenly", "heavy", "hellish", "helpful", 151 | "helpless", "hentai", "hesitant", "hideous", "high", "highfalutin", 152 | "highpitched", "hilarious", "hissing", "historical", "holistic", 153 | "hollow", "homeless", "homely", "honorable", "horrible", "hospitable", 154 | "hot", "huge", "hulking", "humdrum", "humorous", "hungry", "hurried", 155 | "hurt", "hushed", "husky", "hypnotic", "hysterical", "icky", "icy", 156 | "idiotic", "ignorant", "ill", "illegal", "illfated", "illinformed", 157 | "illustrious", "imaginary", "immense", "imminent", "impartial", 158 | "imperfect", "impolite", "important", "imported", "impossible", 159 | "incandescent", "incompetent", "inconclusive", "industrious", 160 | "incredible", "inexpensive", "infamous", "innate", "innocent", 161 | "inquisitive", "insidious", "instinctive", "intelligent", 162 | "interesting", "internal", "invincible", "irate", "irritating", "itchy", 163 | "jaded", "jagged", "jazzy", "jealous", "jittery", "jobless", "jolly", 164 | "joyous", "judicious", "juicy", "jumbled", "jumpy", "juvenile", "kaput", 165 | "keen", "kind", "kindhearted", "kindly", "knotty", "knowing", 166 | "knowledgeable", "known", "labored", "lackadaisical", "lacking", "lame", 167 | "lamentable", "languid", "large", "last", "late", "laughable", "lavish", 168 | "lazy", "lean", "learned", "left", "legal", "lethal", "level", "lewd", 169 | "light", "like", "likeable", "limping", "literate", "little", "lively", 170 | "lively", "living", "lonely", "long", "longing", "longterm", "loose", 171 | "lopsided", "loud", "loutish", "lovely", "loving", "low", "lowly", 172 | "lucky", "ludicrous", "lumpy", "lush", "luxuriant", "lying", "lyrical", 173 | "macabre", "macho", "maddening", "madly", "magenta", "magical", 174 | "magnificent", "majestic", "makeshift", "male", "malicious", "mammoth", 175 | "maniacal", "many", "marked", "massive", "married", "marvelous", 176 | "material", "materialistic", "mature", "mean", "measly", "meaty", 177 | "medical", "meek", "mellow", "melodic", "melted", "merciful", "mere", 178 | "messy", "mighty", "military", "milky", "mindless", "miniature", 179 | "minor", "miscreant", "misty", "mixed", "moaning", "modern", "moldy", 180 | "momentous", "motionless", "mountainous", "muddled", "mundane", "murky", 181 | "mushy", "mute", "mysterious", "naive", "nappy", "narrow", "nasty", 182 | "natural", "naughty", "nauseating", "near", "neat", "nebulous", 183 | "necessary", "needless", "needy", "neighborly", "nervous", "new", "next", 184 | "nice", "nifty", "nimble", "nine", "nippy", "noiseless", "noisy", 185 | "nonchalant", "nondescript", "nonstop", "normal", "nostalgic", "nosy", 186 | "noxious", "null", "numberless", "numerous", "nutritious", "nutty", 187 | "oafish", "obedient", "obeisant", "obese", "obnoxious", "obscene", 188 | "obsequious", "observant", "obsolete", "obtainable", "oceanic", "odd", 189 | "offbeat", "old", "oldfashioned", "omniscient", "one", "onerous", "open", 190 | "opposite", "optimal", "orange", "ordinary", "organic", "ossified", 191 | "outgoing", "outrageous", "outstanding", "oval", "overconfident", 192 | "overjoyed", "overrated", "overt", "overwrought", "painful", "painstaking", 193 | "pale", "paltry", "panicky", "panoramic", "parallel", "parched", 194 | "parsimonious", "past", "pastoral", "pathetic", "peaceful", "penitent", 195 | "perfect", "periodic", "permissible", "perpetual", "petite", "petite", 196 | "phobic", "physical", "picayune", "pink", "piquant", "placid", "plain", 197 | "plant", "plastic", "plausible", "pleasant", "plucky", "pointless", 198 | "poised", "polite", "political", "poor", "possessive", "possible", 199 | "powerful", "precious", "premium", "present", "pretty", "previous", 200 | "pricey", "prickly", "private", "probable", "productive", "profuse", 201 | "protective", "proud", "psychedelic", "psychotic", "public", "puffy", 202 | "pumped", "puny", "purple", "purring", "pushy", "puzzled", "puzzling", 203 | "quack", "quaint", "quarrelsome", "questionable", "quick", "quickest", 204 | "quiet", "quirky", "quixotic", "quizzical", "rabid", "racial", "ragged", 205 | "rainy", "rambunctious", "rampant", "rapid", "rare", "raspy", "ratty", 206 | "ready", "real", "rebel", "receptive", "recondite", "red", "redundant", 207 | "reflective", "regular", "relieved", "remarkable", "reminiscent", 208 | "repulsive", "resolute", "resonant", "responsible", "rhetorical", "rich", 209 | "right", "righteous", "rightful", "rigid", "ripe", "ritzy", "roasted", 210 | "robust", "romantic", "roomy", "rotten", "rough", "round", "royal", 211 | "ruddy", "rude", "rural", "rustic", "ruthless", "sable", "sad", "safe", 212 | "salty", "same", "sassy", "satisfying", "savory", "scandalous", "scarce", 213 | "scared", "scary", "scattered", "scientific", "scintillating", "scrawny", 214 | "screeching", "second", "secondhand", "secret", "secretive", "sedate", 215 | "seemly", "selective", "selfish", "separate", "serious", "shaggy", 216 | "shaky", "shallow", "sharp", "shiny", "shivering", "shocking", "short", 217 | "shrill", "shut", "shy", "sick", "silent", "silent", "silky", "silly", 218 | "simple", "simplistic", "sincere", "six", "skillful", "skinny", "sleepy", 219 | "slim", "slimy", "slippery", "sloppy", "slow", "small", "smart", "smelly", 220 | "smiling", "smoggy", "smooth", "sneaky", "snobbish", "snotty", "soft", 221 | "soggy", "solid", "somber", "sophisticated", "sordid", "sore", "sore", 222 | "sour", "sparkling", "special", "spectacular", "spicy", "spiffy", "spiky", 223 | "spiritual", "spiteful", "splendid", "spooky", "spotless", "spotted", 224 | "spotty", "spurious", "squalid", "square", "squealing", "squeamish", 225 | "staking", "stale", "standing", "statuesque", "steadfast", "steady", 226 | "steep", "stereotyped", "sticky", "stiff", "stimulating", "stingy", "stormy", 227 | "straight", "strange", "striped", "strong", "stupendous", "stupid", "sturdy", 228 | "subdued", "subsequent", "substantial", "successful", "succinct", "sudden", 229 | "sulky", "super", "superb", "superficial", "supreme", "swanky", "sweet", 230 | "sweltering", "swift", "symptomatic", "synonymous", "taboo", "tacit", 231 | "tacky", "talented", "tall", "tame", "tan", "tangible", "tangy", "tart", 232 | "tasteful", "tasteless", "tasty", "tawdry", "tearful", "tedious", "teeny", 233 | "teenytiny", "telling", "temporary", "ten", "tender", "tense", "tense", 234 | "tenuous", "terrible", "terrific", "tested", "testy", "thankful", 235 | "therapeutic", "thick", "thin", "thinkable", "third", "thirsty", 236 | "thoughtful", "thoughtless", "threatening", "three", "thundering", "tidy", 237 | "tight", "tightfisted", "tiny", "tired", "tiresome", "toothsome", "torpid", 238 | "tough", "towering", "tranquil", "trashy", "tremendous", "tricky", "trite", 239 | "troubled", "truculent", "true", "truthful", "two", "typical", "ubiquitous", 240 | "ugliest", "ugly", "ultra", "unable", "unaccountable", "unadvised", "unarmed", 241 | "unbecoming", "unbiased", "uncovered", "understood", "undesirable", "unequal", 242 | "unequaled", "uneven", "unhealthy", "uninterested", "unique", "unkempt", 243 | "unknown", "unnatural", "unruly", "unsightly", "unsuitable", "untidy", 244 | "unused", "unusual", "unwieldy", "unwritten", "upbeat", "uppity", "upset", 245 | "uptight", "used", "useful", "useless", "utopian", "utter", "uttermost", 246 | "vacuous", "vagabond", "vague", "valuable", "various", "vast", "vengeful", 247 | "venomous", "verdant", "versed", "victorious", "vigorous", "violent", "violet", 248 | "vivacious", "voiceless", "volatile", "voracious", "vulgar", "wacky", "waggish", 249 | "waiting", "wakeful", "wandering", "wanting", "warlike", "warm", "wary", 250 | "wasteful", "watery", "weak", "wealthy", "weary", "wellgroomed", "wellmade", 251 | "welloff", "welltodo", "wet", "whimsical", "whispering", "white", "whole", 252 | "wholesale", "wicked", "wide", "wideeyed", "wiggly", "wild", "willing", 253 | "windy", "wiry", "wise", "wistful", "witty", "woebegone", "womanly", 254 | "wonderful", "wooden", "woozy", "workable", "worried", "worthless", "wrathful", 255 | "wretched", "wrong", "wry", "xenophobic", "yellow", "yielding", "young", 256 | "youthful", "yummy", "zany", "zealous", "zesty", "zippy", "zonked" 257 | }; 258 | #endregion 259 | 260 | private readonly HttpHandler _httpHandler; 261 | private readonly FileManager _fileManager = new FileManager(); 262 | private readonly MailHandler _mailHandler; 263 | public readonly MainForm _mainForm; 264 | 265 | public readonly Models.Configuration Config; 266 | private string Mail 267 | { 268 | get => Config.Mail.Value; 269 | set => Config.Mail.Value = value; 270 | } 271 | public string Login 272 | { 273 | get => Config.Login.Value; 274 | set => Config.Login.Value = value; 275 | } 276 | public string Password 277 | { 278 | get => Config.Password.Value; 279 | set => Config.Password.Value = value; 280 | } 281 | private IEnumerable AddThisGames 282 | => (Config.Games.AddGames) ? Config.Games.GamesToAdd : new Models.GameInfo[0]; 283 | 284 | public string MailProvider { get; private set; } = ""; 285 | public bool IsCustomProvider { get; private set; } = false; 286 | 287 | private long SteamId = 0; 288 | private int GamesNotAdded = 0; 289 | private string Status; 290 | private Web.Captcha.CaptchaSolution CaptchaSolved; 291 | 292 | private readonly string EnteredLogin; 293 | private readonly int TableIndex; 294 | 295 | public AccountCreator(MainForm mainForm, Models.Configuration config) 296 | { 297 | Logger.Trace("Creating account: init..."); 298 | CaptchaSolved = new Web.Captcha.CaptchaSolution(false, "Something went wrong...", config.Captcha); 299 | 300 | Status = "Init..."; 301 | _mainForm = mainForm; 302 | 303 | Config = config; 304 | if (Config.Login.Random) 305 | Config.Login.Value = "Init..."; 306 | if (Config.Password.Random) 307 | Config.Password.Value = "Init..."; 308 | 309 | if ((Config.Mail.Value ?? "").StartsWith("@")) 310 | { 311 | MailProvider = Config.Mail.Value; 312 | IsCustomProvider = true; 313 | } 314 | 315 | if (Config.Mail.Random) 316 | Config.Mail.Value = "Init..."; 317 | 318 | EnteredLogin = (Config.Login.Random) ? string.Empty : Login; 319 | 320 | _mailHandler = new MailHandler(mainForm.ProxyManager.Current, IsCustomProvider); 321 | 322 | TableIndex = _mainForm.AddToTable(Mail, Login, Password, SteamId, Status); 323 | 324 | _httpHandler = new HttpHandler(_mainForm, config.Proxy); 325 | Logger.Trace("Creating account: init done"); 326 | } 327 | 328 | private bool CheckMailCommunication(RestSharp.IRestResponse restResponse) 329 | { 330 | if (restResponse.IsSuccessful) 331 | return true; 332 | 333 | Logger.Warn("Cannot communicate with mail service.", restResponse.ErrorException); 334 | UpdateStatus("Cannot communicate with mail service."); 335 | return false; 336 | } 337 | 338 | public async void Run() 339 | { 340 | Logger.Trace("Creating account: starting..."); 341 | if (Config.Login.Random) 342 | { 343 | if (Config.Login.Neat) 344 | Login = Adj.RandomElement().ToTitleCase() + 345 | Adj.RandomElement().ToTitleCase() + 346 | Adj.RandomElement().ToTitleCase() + 347 | Animals.RandomElement(); 348 | else 349 | Login = Utility.GetRandomString(12); 350 | 351 | Login += Utility.GetRandomNumber(100, 9999); 352 | } 353 | else 354 | Login = EnteredLogin + TableIndex; 355 | 356 | UpdateStatusFull(); 357 | 358 | if (Config.Password.Random) 359 | { 360 | if (Config.Password.Neat) 361 | { 362 | string neatOffline() 363 | => Adj.RandomElement().ToTitleCase() + 364 | Adj.RandomElement().ToTitleCase() + 365 | Adj.RandomElement().ToTitleCase() + 366 | Utility.GetRandomString(2) + Utility.GetRandomNumber(100, 1000); 367 | 368 | Password = Utility.GetRandomString(24) + Utility.GetRandomNumber(100, 1000); 369 | 370 | try 371 | { 372 | var _client21 = new RestSharp.RestClient("https://makemeapassword.ligos.net"); 373 | var request21 = new RestSharp.RestRequest("api/v1/passphrase/plain?pc=1&wc=3&sp=n&maxCh=30", RestSharp.Method.GET); 374 | var queryResult1 = _client21.Execute(request21); 375 | var neatPasw = queryResult1.Content.Trim(); 376 | if (Regex.IsMatch(neatPasw, @"automatically\swithin\s(\d+)\shour", RegexOptions.IgnoreCase)) 377 | Password = neatOffline(); 378 | else 379 | Password = neatPasw + Utility.GetRandomString(2) + Utility.GetRandomNumber(100, 1000); 380 | } 381 | catch (Exception ex) 382 | { 383 | Logger.Error("Neat password error", ex); 384 | Password = neatOffline(); 385 | } 386 | } 387 | else 388 | Password = Utility.GetRandomString(24) + Utility.GetRandomNumber(100, 1000); 389 | } 390 | 391 | UpdateStatusFull(); 392 | 393 | if (Config.Mail.Random) 394 | { 395 | ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; 396 | var _cli = new RestSharp.RestClient(MailHandler.MailboxUri); 397 | 398 | if (!MailProvider.StartsWith("@")) 399 | { 400 | var _reqProvider = new RestSharp.RestRequest(RestSharp.Method.GET); 401 | var providerResult = _cli.Execute(_reqProvider); 402 | 403 | if (!CheckMailCommunication(providerResult)) 404 | return; 405 | 406 | var _provider = providerResult.Content; 407 | if (!_provider.StartsWith("@")) 408 | { 409 | Logger.Warn($"Creating account: temp. mail service error: {_provider}"); 410 | UpdateStatus("No email service... Try again (later)?..."); 411 | return; 412 | } 413 | 414 | MailProvider = _provider; 415 | } 416 | 417 | Mail = (Login + MailProvider).ToLower(); 418 | 419 | var mailCheck = new RestSharp.RestRequest((IsCustomProvider) ? "v2" : "", RestSharp.Method.GET); 420 | mailCheck.AddParameter("alias", (IsCustomProvider) ? Mail : Login); 421 | var mailCheckResult = _cli.Execute(mailCheck); 422 | if (!CheckMailCommunication(mailCheckResult)) 423 | return; 424 | 425 | if (mailCheckResult.Content != "ok") 426 | { 427 | Logger.Warn($"Creating account: Something went wrong with temp. mail service...\nResponse: {mailCheckResult.Content}\n---------\nHTTP Status-Code: {mailCheckResult.StatusCode}\n====== END ======"); 428 | UpdateStatus($"Something went wrong... {mailCheckResult.Content}"); 429 | return; 430 | } 431 | } 432 | 433 | UpdateStatusFull(); 434 | 435 | if (!StartCreation()) 436 | return; 437 | 438 | var verified = false; 439 | var tries = (Config.Mail.Random) 440 | ? MailHandler.CheckRandomMailVerifyCount 441 | : MailHandler.CheckUserMailVerifyCount; 442 | 443 | do 444 | { 445 | VerifyMail(); 446 | 447 | var bShouldRetry = false; 448 | verified = CheckIfMailIsVerified(ref bShouldRetry); 449 | if (!verified && !bShouldRetry) 450 | tries--; 451 | 452 | Logger.Debug($"Creating account: mail verified = {verified}, should retry = {bShouldRetry}, tries left = {tries}"); 453 | 454 | await Task.Delay(2000).ConfigureAwait(false); 455 | } 456 | while (!verified && tries > 0); 457 | 458 | if (verified) 459 | { 460 | FinishCreation(); 461 | 462 | WriteAccountIntoFile(); 463 | 464 | Logger.Debug("Creating account: DONE!"); 465 | UpdateStatus($"Finished{(((Config.Games.AddGames) ? $" | Games skipped: {GamesNotAdded}" : ""))}"); 466 | } 467 | else 468 | { 469 | Logger.Debug("Creating account: Error, email not verified."); 470 | UpdateStatus("No Email Received.. Try again!"); 471 | } 472 | } 473 | 474 | private bool StartCreation() 475 | { 476 | var success = false; 477 | 478 | do 479 | { 480 | if (Config.Captcha.Enabled) 481 | UpdateStatus("Recognizing Captcha..."); 482 | else 483 | UpdateStatus("Waiting for captcha solution..."); 484 | 485 | CaptchaSolved = SolveCaptcha(); 486 | if (!CaptchaSolved.Solved) 487 | { 488 | Logger.Warn($"Captcha solving: Error: {CaptchaSolved.Message}"); 489 | 490 | if (CaptchaSolved.RetryAvailable) 491 | { 492 | UpdateStatus($"{CaptchaSolved.Message} | Retrying..."); 493 | continue; 494 | } 495 | 496 | UpdateStatus(CaptchaSolved.Message); 497 | return false; 498 | } 499 | 500 | UpdateStatus("Creating Account..."); 501 | var bShouldStop = false; 502 | success = _httpHandler.CreateAccount(Mail, CaptchaSolved, UpdateStatus, ref bShouldStop); 503 | 504 | if (bShouldStop) 505 | return false; 506 | } 507 | while (!success); 508 | 509 | return success; 510 | } 511 | 512 | private void VerifyMail() 513 | { 514 | if (Config.Mail.Random) 515 | _mailHandler.ConfirmMail(Mail); 516 | } 517 | 518 | private bool CheckIfMailIsVerified(ref bool shouldRetry) 519 | => _httpHandler.CheckEmailVerified((s) => UpdateStatus(s), ref shouldRetry); 520 | 521 | private void FinishCreation() 522 | { 523 | var _status = ""; 524 | while (!_httpHandler.CompleteSignup(Login, Password, 525 | (s) => UpdateStatus(_status = s), 526 | ref SteamId, ref GamesNotAdded, 527 | AddThisGames, 528 | Config.Profile)) 529 | { 530 | switch (_status) 531 | { 532 | case Error.PASSWORD_UNSAFE: 533 | Logger.Warn($"Creating account: {Error.PASSWORD_UNSAFE}"); 534 | Password = ShowUpdateInfoBox(_status); 535 | UpdateStatusFull(); 536 | break; 537 | case Error.ALIAS_UNAVAILABLE: 538 | Logger.Warn($"Creating account: {Error.ALIAS_UNAVAILABLE}"); 539 | Login = ShowUpdateInfoBox(_status); 540 | UpdateStatusFull(); 541 | break; 542 | default: 543 | return; 544 | } 545 | } 546 | } 547 | 548 | private void WriteAccountIntoFile() 549 | { 550 | if (Config.Output.Enabled) 551 | { 552 | UpdateStatus("Writing to file..."); 553 | _fileManager.WriteIntoFile(Mail, Config.Output.WriteEmails, Login, Password, SteamId, Environment.ExpandEnvironmentVariables(Config.Output.Path), Config.Output.SaveType); 554 | } 555 | } 556 | 557 | public void UpdateStatusFull() 558 | => _mainForm.UpdateStatus(TableIndex, Mail, Login, Password, SteamId, Status); 559 | public void UpdateStatus(string status) 560 | => _mainForm.UpdateStatus(TableIndex, Status = status, SteamId); 561 | 562 | private string ShowUpdateInfoBox(string status) 563 | { 564 | var inputDialog = new InputDialog(status); 565 | var update = string.Empty; 566 | 567 | if (inputDialog.ShowDialog() == DialogResult.OK) 568 | { 569 | update = inputDialog.txtInfo.Text; 570 | } 571 | inputDialog.Dispose(); 572 | return update; 573 | } 574 | 575 | private Web.Captcha.CaptchaSolution SolveCaptcha() 576 | => _httpHandler.SolveCaptcha(UpdateStatus, Config); 577 | } 578 | } 579 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/AddGameDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Gui 2 | { 3 | partial class AddGameDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.label1 = new System.Windows.Forms.Label(); 32 | this.TbName = new System.Windows.Forms.TextBox(); 33 | this.label2 = new System.Windows.Forms.Label(); 34 | this.BtnOk = new System.Windows.Forms.Button(); 35 | this.BtnCancel = new System.Windows.Forms.Button(); 36 | this.NumSubId = new System.Windows.Forms.NumericUpDown(); 37 | ((System.ComponentModel.ISupportInitialize)(this.NumSubId)).BeginInit(); 38 | this.SuspendLayout(); 39 | // 40 | // label1 41 | // 42 | this.label1.AutoSize = true; 43 | this.label1.ForeColor = System.Drawing.Color.White; 44 | this.label1.Location = new System.Drawing.Point(15, 15); 45 | this.label1.Name = "label1"; 46 | this.label1.Size = new System.Drawing.Size(38, 13); 47 | this.label1.TabIndex = 0; 48 | this.label1.Text = "Name:"; 49 | // 50 | // TbName 51 | // 52 | this.TbName.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(32)))), ((int)(((byte)(36))))); 53 | this.TbName.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 54 | this.TbName.ForeColor = System.Drawing.Color.White; 55 | this.TbName.Location = new System.Drawing.Point(54, 12); 56 | this.TbName.Name = "TbName"; 57 | this.TbName.Size = new System.Drawing.Size(235, 20); 58 | this.TbName.TabIndex = 1; 59 | // 60 | // label2 61 | // 62 | this.label2.AutoSize = true; 63 | this.label2.ForeColor = System.Drawing.Color.White; 64 | this.label2.Location = new System.Drawing.Point(10, 41); 65 | this.label2.Name = "label2"; 66 | this.label2.Size = new System.Drawing.Size(43, 13); 67 | this.label2.TabIndex = 2; 68 | this.label2.Text = "Sub ID:"; 69 | // 70 | // BtnOk 71 | // 72 | this.BtnOk.Location = new System.Drawing.Point(133, 65); 73 | this.BtnOk.Name = "BtnOk"; 74 | this.BtnOk.Size = new System.Drawing.Size(75, 23); 75 | this.BtnOk.TabIndex = 4; 76 | this.BtnOk.Text = "OK"; 77 | this.BtnOk.UseVisualStyleBackColor = true; 78 | this.BtnOk.Click += new System.EventHandler(this.BtnOk_Click); 79 | // 80 | // BtnCancel 81 | // 82 | this.BtnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 83 | this.BtnCancel.Location = new System.Drawing.Point(214, 65); 84 | this.BtnCancel.Name = "BtnCancel"; 85 | this.BtnCancel.Size = new System.Drawing.Size(75, 23); 86 | this.BtnCancel.TabIndex = 5; 87 | this.BtnCancel.Text = "Cancel"; 88 | this.BtnCancel.UseVisualStyleBackColor = true; 89 | this.BtnCancel.Click += new System.EventHandler(this.BtnCancel_Click); 90 | // 91 | // NumSubId 92 | // 93 | this.NumSubId.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(32)))), ((int)(((byte)(36))))); 94 | this.NumSubId.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; 95 | this.NumSubId.ForeColor = System.Drawing.Color.White; 96 | this.NumSubId.Location = new System.Drawing.Point(54, 39); 97 | this.NumSubId.Maximum = new decimal(new int[] { 98 | -727379969, 99 | 232, 100 | 0, 101 | 0}); 102 | this.NumSubId.Name = "NumSubId"; 103 | this.NumSubId.Size = new System.Drawing.Size(235, 20); 104 | this.NumSubId.TabIndex = 3; 105 | // 106 | // AddGameDialog 107 | // 108 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 109 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 110 | this.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(30)))), ((int)(((byte)(32)))), ((int)(((byte)(36))))); 111 | this.CancelButton = this.BtnCancel; 112 | this.ClientSize = new System.Drawing.Size(303, 105); 113 | this.Controls.Add(this.NumSubId); 114 | this.Controls.Add(this.BtnCancel); 115 | this.Controls.Add(this.BtnOk); 116 | this.Controls.Add(this.label2); 117 | this.Controls.Add(this.TbName); 118 | this.Controls.Add(this.label1); 119 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle; 120 | this.MaximizeBox = false; 121 | this.MinimizeBox = false; 122 | this.Name = "AddGameDialog"; 123 | this.ShowIcon = false; 124 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 125 | this.Text = "Game"; 126 | ((System.ComponentModel.ISupportInitialize)(this.NumSubId)).EndInit(); 127 | this.ResumeLayout(false); 128 | this.PerformLayout(); 129 | 130 | } 131 | 132 | #endregion 133 | 134 | private System.Windows.Forms.Label label1; 135 | private System.Windows.Forms.TextBox TbName; 136 | private System.Windows.Forms.Label label2; 137 | private System.Windows.Forms.Button BtnOk; 138 | private System.Windows.Forms.Button BtnCancel; 139 | private System.Windows.Forms.NumericUpDown NumSubId; 140 | } 141 | } -------------------------------------------------------------------------------- /SteamAccCreator/Gui/AddGameDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace SteamAccCreator.Gui 5 | { 6 | public partial class AddGameDialog : Form 7 | { 8 | public Models.GameInfo GameInfo { get; private set; } 9 | 10 | public AddGameDialog() 11 | { 12 | InitializeComponent(); 13 | } 14 | 15 | public AddGameDialog(Models.GameInfo gameInfo) : this() 16 | { 17 | if (gameInfo == null) 18 | return; 19 | 20 | GameInfo = gameInfo; 21 | 22 | TbName.Text = gameInfo.Name; 23 | NumSubId.Value = gameInfo.SubId; 24 | } 25 | 26 | private void BtnOk_Click(object sender, EventArgs e) 27 | { 28 | GameInfo = new Models.GameInfo() 29 | { 30 | Name = TbName.Text, 31 | SubId = (int)NumSubId.Value 32 | }; 33 | DialogResult = DialogResult.OK; 34 | Close(); 35 | } 36 | 37 | private void BtnCancel_Click(object sender, EventArgs e) 38 | { 39 | DialogResult = DialogResult.Cancel; 40 | Close(); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/AddGameDialog.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 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/CaptchaDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Gui 2 | { 3 | partial class CaptchaDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.boxCaptcha = new System.Windows.Forms.PictureBox(); 32 | this.txtCaptcha = new System.Windows.Forms.TextBox(); 33 | this.btnConfirm = new System.Windows.Forms.Button(); 34 | this.button1 = new System.Windows.Forms.Button(); 35 | ((System.ComponentModel.ISupportInitialize)(this.boxCaptcha)).BeginInit(); 36 | this.SuspendLayout(); 37 | // 38 | // boxCaptcha 39 | // 40 | this.boxCaptcha.Location = new System.Drawing.Point(12, 12); 41 | this.boxCaptcha.Name = "boxCaptcha"; 42 | this.boxCaptcha.Size = new System.Drawing.Size(206, 40); 43 | this.boxCaptcha.TabIndex = 0; 44 | this.boxCaptcha.TabStop = false; 45 | // 46 | // txtCaptcha 47 | // 48 | this.txtCaptcha.Location = new System.Drawing.Point(12, 58); 49 | this.txtCaptcha.Name = "txtCaptcha"; 50 | this.txtCaptcha.Size = new System.Drawing.Size(206, 20); 51 | this.txtCaptcha.TabIndex = 5; 52 | this.txtCaptcha.KeyDown += new System.Windows.Forms.KeyEventHandler(this.TxtCaptcha_KeyDown); 53 | this.txtCaptcha.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.TxtCaptcha_KeyPress); 54 | // 55 | // btnConfirm 56 | // 57 | this.btnConfirm.Location = new System.Drawing.Point(93, 84); 58 | this.btnConfirm.Name = "btnConfirm"; 59 | this.btnConfirm.Size = new System.Drawing.Size(125, 23); 60 | this.btnConfirm.TabIndex = 6; 61 | this.btnConfirm.Text = "Confirm"; 62 | this.btnConfirm.UseVisualStyleBackColor = true; 63 | this.btnConfirm.Click += new System.EventHandler(this.BtnConfirm_Click); 64 | // 65 | // button1 66 | // 67 | this.button1.Location = new System.Drawing.Point(12, 84); 68 | this.button1.Name = "button1"; 69 | this.button1.Size = new System.Drawing.Size(75, 23); 70 | this.button1.TabIndex = 7; 71 | this.button1.Text = "Refresh"; 72 | this.button1.UseVisualStyleBackColor = true; 73 | this.button1.Click += new System.EventHandler(this.Button1_Click); 74 | // 75 | // CaptchaDialog 76 | // 77 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 78 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 79 | this.ClientSize = new System.Drawing.Size(229, 117); 80 | this.Controls.Add(this.button1); 81 | this.Controls.Add(this.btnConfirm); 82 | this.Controls.Add(this.txtCaptcha); 83 | this.Controls.Add(this.boxCaptcha); 84 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 85 | this.MaximizeBox = false; 86 | this.MinimizeBox = false; 87 | this.Name = "CaptchaDialog"; 88 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 89 | this.Text = "Enter Captcha"; 90 | this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.CaptchaDialog_FormClosing); 91 | ((System.ComponentModel.ISupportInitialize)(this.boxCaptcha)).EndInit(); 92 | this.ResumeLayout(false); 93 | this.PerformLayout(); 94 | 95 | } 96 | 97 | #endregion 98 | private System.Windows.Forms.Button btnConfirm; 99 | private System.Windows.Forms.Button button1; 100 | public System.Windows.Forms.TextBox txtCaptcha; 101 | private System.Windows.Forms.PictureBox boxCaptcha; 102 | } 103 | } -------------------------------------------------------------------------------- /SteamAccCreator/Gui/CaptchaDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | using SteamAccCreator.Web; 4 | using SteamAccCreator.Web.Captcha; 5 | 6 | namespace SteamAccCreator.Gui 7 | { 8 | public partial class CaptchaDialog : Form, Interfaces.ICaptchaDialog 9 | { 10 | private readonly HttpHandler _httpHandler; 11 | private readonly Models.Configuration Config; 12 | private readonly Action UpdateStatus; 13 | 14 | private CaptchaSolution Solution; 15 | 16 | public CaptchaDialog(HttpHandler httpHandler, Action updateStatus, Models.Configuration config) 17 | { 18 | Logger.Debug("Init. solving captcha..."); 19 | 20 | Solution = new CaptchaSolution(false, "Something went wrong...", config.Captcha); 21 | 22 | _httpHandler = httpHandler; 23 | 24 | InitializeComponent(); 25 | 26 | Config = config; 27 | UpdateStatus = updateStatus; 28 | 29 | LoadCaptcha(); 30 | } 31 | 32 | private void DrawCaptcha() 33 | { 34 | var img = _httpHandler.GetCaptchaImageraw(); 35 | if (img == null) 36 | { 37 | MessageBox.Show(this, "Someting went wrong with loading captcha image...", "Captcha getting error!", MessageBoxButtons.OK, MessageBoxIcon.Error); 38 | return; 39 | } 40 | boxCaptcha.Image = img; 41 | } 42 | 43 | private void LoadCaptcha() 44 | { 45 | if (Config.Captcha.Enabled) 46 | { 47 | Logger.Debug("Solving captcha using services..."); 48 | Solution = _httpHandler.SolveCaptcha(UpdateStatus, Config); 49 | } 50 | else 51 | { 52 | Logger.Debug("Solving captcha using dialog box..."); 53 | DrawCaptcha(); 54 | } 55 | } 56 | 57 | private void Button1_Click(object sender, EventArgs e) 58 | { 59 | DrawCaptcha(); 60 | } 61 | 62 | private void BtnConfirm_Click(object sender, EventArgs e) 63 | { 64 | Solution = new CaptchaSolution(txtCaptcha.Text, null, Config.Captcha); 65 | DialogResult = DialogResult.OK; 66 | Close(); 67 | } 68 | 69 | private void TxtCaptcha_KeyDown(object sender, KeyEventArgs e) 70 | { 71 | if (e.KeyCode == Keys.Enter) 72 | BtnConfirm_Click(sender, e); 73 | } 74 | 75 | private void TxtCaptcha_KeyPress(object sender, KeyPressEventArgs e) 76 | { 77 | e.KeyChar = char.ToUpper(e.KeyChar); 78 | } 79 | 80 | private void CaptchaDialog_FormClosing(object sender, FormClosingEventArgs e) 81 | { 82 | if (e.CloseReason == CloseReason.UserClosing && 83 | DialogResult != DialogResult.OK) 84 | { 85 | Solution = new CaptchaSolution(false, "You closed captcha dialog box.", Config.Captcha); 86 | DialogResult = DialogResult.Cancel; 87 | } 88 | } 89 | 90 | public DialogResult ShowDialog(out CaptchaSolution solution) 91 | { 92 | var result = this.ShowDialog(); 93 | solution = this.Solution; 94 | return result; 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/CaptchaDialog.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 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/InputDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Gui 2 | { 3 | partial class InputDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.lblError = new System.Windows.Forms.Label(); 32 | this.txtInfo = new System.Windows.Forms.TextBox(); 33 | this.btnConfirm = new System.Windows.Forms.Button(); 34 | this.SuspendLayout(); 35 | // 36 | // lblError 37 | // 38 | this.lblError.AutoSize = true; 39 | this.lblError.Location = new System.Drawing.Point(12, 9); 40 | this.lblError.Name = "lblError"; 41 | this.lblError.Size = new System.Drawing.Size(96, 13); 42 | this.lblError.TabIndex = 0; 43 | this.lblError.Text = "Example Error Text"; 44 | // 45 | // txtInfo 46 | // 47 | this.txtInfo.Location = new System.Drawing.Point(12, 25); 48 | this.txtInfo.Name = "txtInfo"; 49 | this.txtInfo.Size = new System.Drawing.Size(170, 20); 50 | this.txtInfo.TabIndex = 1; 51 | // 52 | // btnConfirm 53 | // 54 | this.btnConfirm.Location = new System.Drawing.Point(12, 51); 55 | this.btnConfirm.Name = "btnConfirm"; 56 | this.btnConfirm.Size = new System.Drawing.Size(170, 23); 57 | this.btnConfirm.TabIndex = 2; 58 | this.btnConfirm.Text = "Confirm"; 59 | this.btnConfirm.UseVisualStyleBackColor = true; 60 | this.btnConfirm.Click += new System.EventHandler(this.BtnConfirm_Click); 61 | // 62 | // InputDialog 63 | // 64 | this.AcceptButton = this.btnConfirm; 65 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 66 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 67 | this.ClientSize = new System.Drawing.Size(194, 81); 68 | this.Controls.Add(this.btnConfirm); 69 | this.Controls.Add(this.txtInfo); 70 | this.Controls.Add(this.lblError); 71 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; 72 | this.MaximizeBox = false; 73 | this.MinimizeBox = false; 74 | this.Name = "InputDialog"; 75 | this.ShowInTaskbar = false; 76 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; 77 | this.Text = "Update Info"; 78 | this.ResumeLayout(false); 79 | this.PerformLayout(); 80 | 81 | } 82 | 83 | #endregion 84 | 85 | private System.Windows.Forms.Label lblError; 86 | private System.Windows.Forms.Button btnConfirm; 87 | public System.Windows.Forms.TextBox txtInfo; 88 | } 89 | } -------------------------------------------------------------------------------- /SteamAccCreator/Gui/InputDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace SteamAccCreator.Gui 5 | { 6 | public partial class InputDialog : Form 7 | { 8 | public InputDialog(string error) 9 | { 10 | InitializeComponent(); 11 | lblError.Text = error; 12 | } 13 | 14 | private void BtnConfirm_Click(object sender, EventArgs e) 15 | { 16 | DialogResult = DialogResult.OK; 17 | Close(); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/InputDialog.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 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/ReCaptchaDialog.Designer.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Gui 2 | { 3 | partial class ReCaptchaDialog 4 | { 5 | /// 6 | /// Required designer variable. 7 | /// 8 | private System.ComponentModel.IContainer components = null; 9 | 10 | /// 11 | /// Clean up any resources being used. 12 | /// 13 | /// true if managed resources should be disposed; otherwise, false. 14 | protected override void Dispose(bool disposing) 15 | { 16 | if (disposing && (components != null)) 17 | { 18 | components.Dispose(); 19 | } 20 | base.Dispose(disposing); 21 | } 22 | 23 | #region Windows Form Designer generated code 24 | 25 | /// 26 | /// Required method for Designer support - do not modify 27 | /// the contents of this method with the code editor. 28 | /// 29 | private void InitializeComponent() 30 | { 31 | this.geckoWebBrowser1 = new Gecko.GeckoWebBrowser(); 32 | this.btnAccept = new System.Windows.Forms.Button(); 33 | this.btnCancel = new System.Windows.Forms.Button(); 34 | this.btnReload = new System.Windows.Forms.Button(); 35 | this.SuspendLayout(); 36 | // 37 | // geckoWebBrowser1 38 | // 39 | this.geckoWebBrowser1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 40 | | System.Windows.Forms.AnchorStyles.Left) 41 | | System.Windows.Forms.AnchorStyles.Right))); 42 | this.geckoWebBrowser1.ConsoleMessageEventReceivesConsoleLogCalls = true; 43 | this.geckoWebBrowser1.FrameEventsPropagateToMainWindow = false; 44 | this.geckoWebBrowser1.Location = new System.Drawing.Point(12, 12); 45 | this.geckoWebBrowser1.Name = "geckoWebBrowser1"; 46 | this.geckoWebBrowser1.Size = new System.Drawing.Size(360, 508); 47 | this.geckoWebBrowser1.TabIndex = 0; 48 | this.geckoWebBrowser1.UseHttpActivityObserver = false; 49 | this.geckoWebBrowser1.Navigating += new System.EventHandler(this.geckoWebBrowser1_Navigating); 50 | this.geckoWebBrowser1.ReadyStateChange += new System.EventHandler(this.geckoWebBrowser1_ReadyStateChange); 51 | // 52 | // btnAccept 53 | // 54 | this.btnAccept.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right))); 55 | this.btnAccept.Location = new System.Drawing.Point(297, 526); 56 | this.btnAccept.Name = "btnAccept"; 57 | this.btnAccept.Size = new System.Drawing.Size(75, 23); 58 | this.btnAccept.TabIndex = 1; 59 | this.btnAccept.Text = "OK"; 60 | this.btnAccept.UseVisualStyleBackColor = true; 61 | this.btnAccept.Click += new System.EventHandler(this.btnAccept_Click); 62 | // 63 | // btnCancel 64 | // 65 | this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 66 | this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; 67 | this.btnCancel.Location = new System.Drawing.Point(12, 526); 68 | this.btnCancel.Name = "btnCancel"; 69 | this.btnCancel.Size = new System.Drawing.Size(75, 23); 70 | this.btnCancel.TabIndex = 2; 71 | this.btnCancel.Text = "Cancel"; 72 | this.btnCancel.UseVisualStyleBackColor = true; 73 | this.btnCancel.Click += new System.EventHandler(this.btnCancel_Click); 74 | // 75 | // btnReload 76 | // 77 | this.btnReload.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left))); 78 | this.btnReload.Location = new System.Drawing.Point(93, 526); 79 | this.btnReload.Name = "btnReload"; 80 | this.btnReload.Size = new System.Drawing.Size(83, 23); 81 | this.btnReload.TabIndex = 3; 82 | this.btnReload.Text = "Refresh page"; 83 | this.btnReload.UseVisualStyleBackColor = true; 84 | this.btnReload.Click += new System.EventHandler(this.btnReload_Click); 85 | // 86 | // ReCaptchaDialog 87 | // 88 | this.AcceptButton = this.btnAccept; 89 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); 90 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; 91 | this.CancelButton = this.btnCancel; 92 | this.ClientSize = new System.Drawing.Size(384, 561); 93 | this.Controls.Add(this.btnReload); 94 | this.Controls.Add(this.btnCancel); 95 | this.Controls.Add(this.btnAccept); 96 | this.Controls.Add(this.geckoWebBrowser1); 97 | this.MinimizeBox = false; 98 | this.MinimumSize = new System.Drawing.Size(400, 500); 99 | this.Name = "ReCaptchaDialog"; 100 | this.ShowIcon = false; 101 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 102 | this.Text = "ReCaptcha"; 103 | this.ResumeLayout(false); 104 | 105 | } 106 | 107 | #endregion 108 | 109 | private Gecko.GeckoWebBrowser geckoWebBrowser1; 110 | private System.Windows.Forms.Button btnAccept; 111 | private System.Windows.Forms.Button btnCancel; 112 | private System.Windows.Forms.Button btnReload; 113 | } 114 | } -------------------------------------------------------------------------------- /SteamAccCreator/Gui/ReCaptchaDialog.cs: -------------------------------------------------------------------------------- 1 | using Gecko; 2 | using SteamAccCreator.Web.Captcha; 3 | using System; 4 | using System.Collections.Generic; 5 | using System.ComponentModel; 6 | using System.Data; 7 | using System.Drawing; 8 | using System.Linq; 9 | using System.Text; 10 | using System.Text.RegularExpressions; 11 | using System.Threading.Tasks; 12 | using System.Windows.Forms; 13 | 14 | namespace SteamAccCreator.Gui 15 | { 16 | public partial class ReCaptchaDialog : Form, Interfaces.ICaptchaDialog 17 | { 18 | private CaptchaSolution Solution = new CaptchaSolution(false, "Something went wrong.", null); 19 | private Models.Configuration Configuration; 20 | 21 | public ReCaptchaDialog(Models.Configuration configuration, Models.ProxyItem proxy) 22 | { 23 | Configuration = configuration; 24 | Solution = new CaptchaSolution(false, Solution.Message, configuration.Captcha); 25 | InitializeComponent(); 26 | 27 | if ((proxy?.Enabled ?? false)) 28 | { 29 | GeckoPreferences.Default["network.proxy.type"] = 1; 30 | 31 | // clear proxies 32 | GeckoSetProxy(Enums.ProxyType.Http, "", 0); 33 | GeckoSetProxy(Enums.ProxyType.Socks4, "", 0); 34 | 35 | GeckoSetProxy(proxy.ProxyType, proxy.Host, proxy.Port); 36 | } 37 | else 38 | GeckoPreferences.Default["network.proxy.type"] = 0; 39 | } 40 | 41 | private void GeckoSetProxy(Enums.ProxyType proxyType, string host, int port) 42 | { 43 | switch (proxyType) 44 | { 45 | case Enums.ProxyType.Socks4: 46 | case Enums.ProxyType.Socks5: 47 | GeckoPreferences.Default["network.proxy.socks"] = host; 48 | GeckoPreferences.Default["network.proxy.socks_port"] = port; 49 | break; 50 | case Enums.ProxyType.Unknown: 51 | case Enums.ProxyType.Http: 52 | case Enums.ProxyType.Https: 53 | default: 54 | GeckoPreferences.Default["network.proxy.http"] = host; 55 | GeckoPreferences.Default["network.proxy.http_port"] = port; 56 | GeckoPreferences.Default["network.proxy.ssl"] = host; 57 | GeckoPreferences.Default["network.proxy.ssl_port"] = port; 58 | break; 59 | } 60 | 61 | if (proxyType == Enums.ProxyType.Socks4) 62 | GeckoPreferences.Default["network.proxy.socks_version"] = 4; 63 | else if (proxyType == Enums.ProxyType.Socks5) 64 | GeckoPreferences.Default["network.proxy.socks_version"] = 5; 65 | } 66 | 67 | private void btnCancel_Click(object sender, EventArgs e) 68 | { 69 | DialogResult = DialogResult.Cancel; 70 | Solution = new CaptchaSolution(false, "Closed captcha dialog.", Configuration.Captcha); 71 | Close(); 72 | } 73 | 74 | private void btnAccept_Click(object sender, EventArgs e) 75 | { 76 | var resps = geckoWebBrowser1.Document.GetElementsByName("g-recaptcha-response"); 77 | var solutionText = string.Empty; 78 | foreach (var resp in resps) 79 | { 80 | var textArea = resp as Gecko.DOM.GeckoTextAreaElement; 81 | var captchaText = textArea?.Value ?? ""; 82 | if (string.IsNullOrEmpty(captchaText)) 83 | continue; 84 | 85 | solutionText += $"{captchaText}\n\n"; 86 | } 87 | 88 | var captchagid = (geckoWebBrowser1.Document.GetElementById("captchagid") 89 | ?? geckoWebBrowser1.Document.GetElementsByName("captchagid")?.FirstOrDefault(x => x != null)) 90 | as Gecko.DOM.GeckoInputElement; 91 | 92 | Solution = new CaptchaSolution(solutionText, captchagid?.Value, Configuration.Captcha); 93 | 94 | DialogResult = DialogResult.OK; 95 | Close(); 96 | } 97 | 98 | private void geckoWebBrowser1_Navigating(object sender, Gecko.Events.GeckoNavigatingEventArgs e) 99 | { 100 | if (Regex.IsMatch(e.Uri?.Segments?.LastOrDefault() ?? "", 101 | @"join\/?", RegexOptions.IgnoreCase) 102 | || (e.Uri?.Host ?? "").ToLower() != (Defaults.Web.STEAM_JOIN_URI?.Host?.ToLower() ?? "NULL")) 103 | { 104 | Logger.Trace("Navigated to /join/."); 105 | return; 106 | } 107 | 108 | try 109 | { 110 | Logger.Info("Stopping navigation to new location..."); 111 | e.Cancel = true; 112 | } 113 | catch (Exception ex) 114 | { 115 | Logger.Error("Failed to stop navigation...", ex); 116 | try 117 | { 118 | geckoWebBrowser1.Navigate(Defaults.Web.STEAM_JOIN_ADDRESS); 119 | } 120 | catch (Exception exNav) 121 | { 122 | Logger.Error("Navigation error", exNav); 123 | } 124 | } 125 | } 126 | 127 | private void geckoWebBrowser1_ReadyStateChange(object sender, DomEventArgs e) 128 | { 129 | var accFormBox = geckoWebBrowser1.Document.GetElementById("account_form_box"); 130 | foreach (var accChild in accFormBox.ChildNodes) 131 | { 132 | if (accChild == null) 133 | continue; 134 | 135 | if (accChild.NodeType != NodeType.Element) 136 | continue; 137 | 138 | var joinRow = accChild as GeckoHtmlElement; 139 | if (!(joinRow?.ClassName?.Contains("join_form") ?? false)) 140 | continue; 141 | 142 | foreach (var jRowChild in joinRow.ChildNodes) 143 | { 144 | if (jRowChild == null) 145 | continue; 146 | if (jRowChild.NodeType != NodeType.Element) 147 | continue; 148 | 149 | var jForm = jRowChild as GeckoHtmlElement; 150 | if (jForm == null) 151 | continue; 152 | if (!(jForm.ClassName?.Contains("form_row") ?? false)) 153 | continue; 154 | if (jForm.ChildNodes 155 | .Where(x => x != null && x.NodeType == NodeType.Element) 156 | .Select(x => x as GeckoHtmlElement) 157 | .Any(x => x?.Id?.ToLower()?.Contains("captcha_entry") ?? false)) 158 | continue; 159 | 160 | joinRow.RemoveChild(jRowChild); 161 | } 162 | } 163 | } 164 | 165 | private void geckoWebBrowser1_CreateWindow(object sender, GeckoCreateWindowEventArgs e) 166 | { 167 | e.Cancel = true; 168 | } 169 | 170 | public DialogResult ShowDialog(out CaptchaSolution solution) 171 | { 172 | btnReload_Click(null, null); 173 | 174 | var result = this.ShowDialog(); 175 | solution = this.Solution; 176 | return result; 177 | } 178 | 179 | private void btnReload_Click(object sender, EventArgs e) 180 | { 181 | geckoWebBrowser1.Navigate(Defaults.Web.STEAM_JOIN_ADDRESS); 182 | } 183 | } 184 | } 185 | -------------------------------------------------------------------------------- /SteamAccCreator/Gui/ReCaptchaDialog.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 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | -------------------------------------------------------------------------------- /SteamAccCreator/Interfaces/ICaptchaDialog.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace SteamAccCreator.Interfaces 5 | { 6 | public interface ICaptchaDialog : IDisposable 7 | { 8 | DialogResult ShowDialog(out Web.Captcha.CaptchaSolution solution); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SteamAccCreator/Logger.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Text.RegularExpressions; 4 | 5 | namespace SteamAccCreator 6 | { 7 | public static class Logger 8 | { 9 | private static readonly Type FILE_TARGET_TYPE = typeof(NLog.Targets.FileTarget); 10 | 11 | #if IS_GUI_APP 12 | public static bool SuppressErrorDialogs = false; 13 | public static bool SuppressAllErrorDialogs = false; 14 | #else // IS_GUI_APP 15 | public static bool SuppressErrorConsole = false; 16 | public static bool SuppressAllErrorConsole = false; 17 | #endif // IS_GUI_APP 18 | 19 | public static string GetCurrentStackMethod() 20 | { 21 | try 22 | { 23 | var tracePlain = Environment.StackTrace; 24 | var trace = tracePlain.Split(new[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries); 25 | var traceAt = trace.FirstOrDefault(x => Regex.IsMatch(x, $@"{Regex.Escape(nameof(SteamAccCreator))}\.(?!{Regex.Escape(nameof(Logger))}\.)\w+")); 26 | var at = ""; 27 | var atRegex = Regex.Match(traceAt ?? "", @"at\s([^)]+\))", RegexOptions.IgnoreCase); 28 | if (atRegex.Success) 29 | at = atRegex.Groups[1].Value; 30 | else 31 | at = traceAt ?? "UNKNOWN"; 32 | return at; 33 | } 34 | catch { return "UNKNOWN:ERR"; } 35 | } 36 | 37 | private static NLog.Logger GetLogger(string loggerName) 38 | { 39 | var logger = NLog.LogManager.GetLogger(loggerName); 40 | 41 | // idk why, but even if createDirs="true", it won't create directories so... 42 | foreach (var logTarget in logger.Factory.Configuration.AllTargets) 43 | { 44 | if (!Equals(logTarget.GetType(), FILE_TARGET_TYPE)) 45 | continue; 46 | 47 | var target = logTarget as NLog.Targets.FileTarget; 48 | if (target == null) 49 | continue; // lol 50 | 51 | var file = target.FileName.Render(new NLog.LogEventInfo()); 52 | var dir = new System.IO.FileInfo(file).Directory; 53 | if (!dir.Exists) 54 | dir.Create(); 55 | } 56 | 57 | return logger; 58 | } 59 | 60 | public static void Trace(string message) 61 | => Trace(GetCurrentStackMethod(), message); 62 | public static void Trace(string loggerName, string message) 63 | { 64 | try 65 | { 66 | var logger = GetLogger(loggerName); 67 | logger?.Trace(message); 68 | } 69 | #if LOGGER_TRACE 70 | catch (Exception ex) 71 | { 72 | var msg = $"{message}:\nError in trace:\n{ex}"; 73 | #if IS_GUI_APP 74 | if (SuppressErrorDialogs || SuppressAllErrorDialogs) 75 | return; 76 | 77 | System.Windows.Forms.MessageBox.Show(msg, "Trace", 78 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 79 | #else // IS_GUI_APP 80 | if (SuppressErrorConsole || SuppressAllErrorConsole) 81 | return; 82 | 83 | Console.WriteLine(msg); 84 | #endif // IS_GUI_APP 85 | } 86 | #else // LOGGER_TRACE 87 | catch {} 88 | #endif // LOGGER_TRACE 89 | } 90 | 91 | public static void Debug(string message) 92 | => Debug(GetCurrentStackMethod(), message); 93 | public static void Debug(string loggerName, string message) 94 | { 95 | try 96 | { 97 | var logger = GetLogger(loggerName); 98 | logger?.Debug(message); 99 | } 100 | #if LOGGER_TRACE 101 | catch (Exception ex) 102 | { 103 | var msg = $"{message}:\nError in debug:\n{ex}"; 104 | #if IS_GUI_APP 105 | if (SuppressErrorDialogs || SuppressAllErrorDialogs) 106 | return; 107 | 108 | System.Windows.Forms.MessageBox.Show(msg, "Debug", 109 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 110 | #else // IS_GUI_APP 111 | if (SuppressErrorConsole || SuppressAllErrorConsole) 112 | return; 113 | 114 | Console.WriteLine(msg); 115 | #endif // IS_GUI_APP 116 | } 117 | #else // LOGGER_TRACE 118 | catch {} 119 | #endif // LOGGER_TRACE 120 | } 121 | 122 | public static void Info(string message) 123 | => Info(GetCurrentStackMethod(), message); 124 | public static void Info(string loggerName, string message) 125 | { 126 | try 127 | { 128 | var logger = GetLogger(loggerName); 129 | logger?.Info(message); 130 | } 131 | #if LOGGER_TRACE 132 | catch (Exception ex) 133 | { 134 | var msg = $"{message}:\nError in info:\n{ex}"; 135 | #if IS_GUI_APP 136 | if (SuppressErrorDialogs || SuppressAllErrorDialogs) 137 | return; 138 | 139 | System.Windows.Forms.MessageBox.Show(msg, "Info", 140 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 141 | #else // IS_GUI_APP 142 | if (SuppressErrorConsole || SuppressAllErrorConsole) 143 | return; 144 | 145 | Console.WriteLine(msg); 146 | #endif // IS_GUI_APP 147 | } 148 | #else // LOGGER_TRACE 149 | catch {} 150 | #endif // LOGGER_TRACE 151 | } 152 | 153 | public static void Warn(string message) 154 | => Warn(GetCurrentStackMethod(), message); 155 | public static void Warn(string loggerName, string message) 156 | { 157 | try 158 | { 159 | var logger = GetLogger(loggerName); 160 | logger?.Warn(message); 161 | } 162 | #if LOGGER_TRACE 163 | catch (Exception ex) 164 | { 165 | var msg = $"{message}:\nError in warning:\n{ex}"; 166 | #if IS_GUI_APP 167 | if (SuppressErrorDialogs || SuppressAllErrorDialogs) 168 | return; 169 | 170 | System.Windows.Forms.MessageBox.Show(msg, "Warn", 171 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 172 | #else // IS_GUI_APP 173 | if (SuppressErrorConsole || SuppressAllErrorConsole) 174 | return; 175 | 176 | Console.WriteLine(msg); 177 | #endif // IS_GUI_APP 178 | } 179 | #else // LOGGER_TRACE 180 | catch {} 181 | #endif // LOGGER_TRACE 182 | } 183 | public static void Warn(string message, Exception exception) 184 | => Warn(GetCurrentStackMethod(), message, exception); 185 | public static void Warn(string loggerName, string message, Exception exception) 186 | { 187 | try 188 | { 189 | var logger = GetLogger(loggerName); 190 | logger?.Warn(exception, message); 191 | } 192 | catch (Exception ex) 193 | { 194 | var msg = $"{message}:\n{exception}\n\nError in warning (lol):\n{ex}"; 195 | #if IS_GUI_APP 196 | if (SuppressErrorDialogs || SuppressAllErrorDialogs) 197 | return; 198 | 199 | System.Windows.Forms.MessageBox.Show(msg, "Warn", 200 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 201 | #else 202 | if (SuppressErrorConsole || SuppressAllErrorConsole) 203 | return; 204 | 205 | Console.WriteLine(msg); 206 | #endif 207 | } 208 | } 209 | 210 | public static void Error(string message, Exception exception) 211 | => Error(GetCurrentStackMethod(), message, exception); 212 | public static void Error(string loggerName, string message, Exception exception) 213 | { 214 | try 215 | { 216 | var logger = GetLogger(loggerName); 217 | logger?.Error(exception, message); 218 | } 219 | catch (Exception ex) 220 | { 221 | var msg = $"{message}:\n{exception}\n\nError in error (lol):\n{ex}"; 222 | #if IS_GUI_APP 223 | if (SuppressAllErrorDialogs) 224 | return; 225 | 226 | System.Windows.Forms.MessageBox.Show(msg, "Error", 227 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 228 | #else 229 | if (SuppressAllErrorConsole) 230 | return; 231 | 232 | Console.WriteLine(msg); 233 | #endif 234 | } 235 | } 236 | 237 | public static void Fatal(string message, Exception exception) 238 | => Fatal(GetCurrentStackMethod(), message, exception); 239 | public static void Fatal(string loggerName, string message, Exception exception) 240 | { 241 | try 242 | { 243 | var logger = GetLogger(loggerName); 244 | logger?.Fatal(exception, message); 245 | } 246 | catch (Exception ex) 247 | { 248 | var msg = $"{message}:\n{exception}\n\nError in fatal (lol):\n{ex}"; 249 | #if IS_GUI_APP 250 | if (SuppressAllErrorDialogs) 251 | return; 252 | 253 | System.Windows.Forms.MessageBox.Show(msg, "Fatal", 254 | System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error); 255 | #else 256 | if (SuppressAllErrorConsole) 257 | return; 258 | 259 | Console.WriteLine(msg); 260 | #endif 261 | } 262 | } 263 | } 264 | } 265 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/CaptchaSolutionsConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace SteamAccCreator.Models 5 | { 6 | [Serializable] 7 | [DebuggerDisplay("{ApiKey}:{ApiSecret}")] 8 | public class CaptchaSolutionsConfig 9 | { 10 | public string ApiKey { get; set; } = ""; 11 | public string ApiSecret { get; set; } = ""; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/CaptchaSolvingConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace SteamAccCreator.Models 5 | { 6 | [Serializable] 7 | [DebuggerDisplay("on={Enabled}|hand={HandMode}|service={Service}")] 8 | public class CaptchaSolvingConfig 9 | { 10 | public bool Enabled { get; set; } = false; 11 | public bool HandMode { get; set; } = false; 12 | public Enums.CaptchaService Service { get; set; } 13 | public CaptchaSolutionsConfig CaptchaSolutions { get; set; } = new CaptchaSolutionsConfig(); 14 | public RuCaptchaConfig RuCaptcha { get; set; } = new RuCaptchaConfig(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/Configuration.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Models 4 | { 5 | [Serializable] 6 | public class Configuration 7 | { 8 | public MailConfig Mail { get; set; } = new MailConfig(); 9 | public CredentialConfig Login { get; set; } = new CredentialConfig(); 10 | public CredentialConfig Password { get; set; } = new CredentialConfig(); 11 | public GamesConfig Games { get; set; } = new GamesConfig(); 12 | public ProfileConfig Profile { get; set; } = new ProfileConfig(); 13 | public CaptchaSolvingConfig Captcha { get; set; } = new CaptchaSolvingConfig(); 14 | public OutputConfig Output { get; set; } = new OutputConfig(); 15 | public ProxyConfig Proxy { get; set; } = new ProxyConfig(); 16 | 17 | public void FixNulls() 18 | { 19 | Mail = Mail ?? new MailConfig(); 20 | Login = Login ?? new CredentialConfig(); 21 | Password = Password ?? new CredentialConfig(); 22 | Games = Games ?? new GamesConfig(); 23 | Profile = Profile ?? new ProfileConfig(); 24 | Captcha = Captcha ?? new CaptchaSolvingConfig(); 25 | Output = Output ?? new OutputConfig(); 26 | Proxy = Proxy ?? new ProxyConfig(); 27 | } 28 | 29 | public Configuration Clone() 30 | => this.DeepClone(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/CredentialConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Models 4 | { 5 | [Serializable] 6 | public class CredentialConfig 7 | { 8 | public bool Random { get; set; } 9 | public bool Neat { get; set; } 10 | public string Value { get; set; } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/GameInfo.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Models 4 | { 5 | [Serializable] 6 | public class GameInfo 7 | { 8 | public string Name { get; set; } 9 | public int SubId { get; set; } 10 | 11 | public override bool Equals(object obj) 12 | { 13 | var _obj = obj as GameInfo; 14 | if (_obj == null) 15 | return false; 16 | 17 | return _obj.SubId == SubId; 18 | } 19 | 20 | public override int GetHashCode() 21 | => SubId.GetHashCode(); 22 | 23 | public override string ToString() 24 | => $"{Name ?? "NULL"} ({SubId})"; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/GamesConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace SteamAccCreator.Models 5 | { 6 | [Serializable] 7 | public class GamesConfig 8 | { 9 | public bool AddGames { get; set; } 10 | public IEnumerable GamesToAdd { get; set; } = new GameInfo[0]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/MailConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Models 4 | { 5 | [Serializable] 6 | public class MailConfig 7 | { 8 | public bool Random { get; set; } 9 | public string Value { get; set; } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/OutputConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Models 4 | { 5 | [Serializable] 6 | public class OutputConfig 7 | { 8 | public bool Enabled { get; set; } 9 | public bool WriteEmails { get; set; } 10 | public File.SaveType SaveType { get; set; } 11 | public string Path { get; set; } = System.IO.Path.Combine(Environment.CurrentDirectory, "accounts.txt"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/ProfileConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace SteamAccCreator.Models 4 | { 5 | [Serializable] 6 | public class ProfileConfig 7 | { 8 | public bool Enabled { get; set; } = false; 9 | public string Name { get; set; } = ""; 10 | public string RealName { get; set; } = ""; 11 | public bool Url { get; set; } = false; 12 | public string Bio { get; set; } = ""; 13 | public string Image { get; set; } = ""; 14 | public string Country { get; set; } = ""; 15 | public string State { get; set; } = ""; 16 | public string City { get; set; } = ""; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/ProxyConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace SteamAccCreator.Models 5 | { 6 | [Serializable] 7 | public class ProxyConfig 8 | { 9 | public bool Enabled { get; set; } = false; 10 | public IEnumerable List { get; set; } = new ProxyItem[0]; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/ProxyItem.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using pYove; 3 | using System; 4 | using System.Net; 5 | using System.Text.RegularExpressions; 6 | 7 | namespace SteamAccCreator.Models 8 | { 9 | [Serializable] 10 | public class ProxyItem 11 | { 12 | public bool Enabled { get; set; } = false; 13 | public string Host { get; set; } = string.Empty; 14 | public int Port { get; set; } = 0; 15 | public Enums.ProxyType ProxyType { get; set; } = Enums.ProxyType.Unknown; 16 | [JsonIgnore] 17 | public Enums.ProxyStatus Status { get; set; } = Enums.ProxyStatus.Unknown; 18 | 19 | public string UserName { get; set; } 20 | public string Password { get; set; } 21 | 22 | public ProxyItem() { } 23 | public ProxyItem(string plain) 24 | { 25 | var match = Regex.Match(plain, @"((http[s]?|socks[45]?)\:\/\/)?(([^:]+)\:([^@]+)\@)?([^:]+)\:(\d+)[\/$]?", RegexOptions.IgnoreCase); 26 | if (!match.Success) 27 | throw new Exception("Cannot parse this proxy!"); 28 | 29 | Enabled = true; 30 | 31 | UserName = match.Groups[4].Value; 32 | Password = match.Groups[5].Value; 33 | 34 | Host = match.Groups[6].Value; 35 | Port = int.Parse(match.Groups[7].Value); 36 | if (Port < 0) Port = 0; 37 | if (Port > 65535) Port = 65535; 38 | 39 | var type = match.Groups[2].Value.ToLower(); 40 | switch (type) 41 | { 42 | case "http": 43 | ProxyType = Enums.ProxyType.Http; 44 | break; 45 | case "https": 46 | ProxyType = Enums.ProxyType.Https; 47 | break; 48 | case "socks4": 49 | ProxyType = Enums.ProxyType.Socks4; 50 | break; 51 | case "socks": 52 | case "socks5": 53 | ProxyType = Enums.ProxyType.Socks5; 54 | break; 55 | } 56 | } 57 | public ProxyItem(string host, int port, Enums.ProxyType type) 58 | : this(host, port, type, null, null) { } 59 | public ProxyItem(string host, int port, Enums.ProxyType type, string user, string password) 60 | { 61 | Enabled = true; 62 | Host = host; 63 | Port = port; 64 | ProxyType = type; 65 | UserName = user; 66 | Password = password; 67 | } 68 | 69 | public IWebProxy ToWebProxy() 70 | { 71 | var credentials = default(ICredentials); 72 | if (!string.IsNullOrEmpty(UserName) && 73 | !string.IsNullOrEmpty(Password)) 74 | { 75 | credentials = new NetworkCredential(UserName, Password); 76 | } 77 | 78 | if (Port < 0) Port = 0; 79 | if (Port > 65535) Port = 65535; 80 | 81 | switch (ProxyType) 82 | { 83 | case Enums.ProxyType.Socks4: 84 | return new ProxyClient(Host, Port, pYove.ProxyType.Socks4) { Credentials = credentials }; 85 | case Enums.ProxyType.Socks5: 86 | return new ProxyClient(Host, Port, pYove.ProxyType.Socks5) { Credentials = credentials }; 87 | case Enums.ProxyType.Http: 88 | case Enums.ProxyType.Https: 89 | case Enums.ProxyType.Unknown: 90 | default: 91 | return new WebProxy(Host, Port) { Credentials = credentials }; 92 | } 93 | } 94 | 95 | public override string ToString() 96 | => $"{ProxyType.ToString().ToLower()}://{Host}:{Port}"; 97 | 98 | public override bool Equals(object obj) 99 | => Equals(this, obj); 100 | 101 | public override int GetHashCode() 102 | => $"{ProxyType.ToString().ToLower()}://{UserName}:{Password}@{Host}:{Port}/".GetHashCode(); 103 | 104 | public static bool operator ==(ProxyItem a, ProxyItem b) 105 | { 106 | if (Equals(a, null) && Equals(b, null)) 107 | return true; 108 | 109 | if (Equals(a, null) || Equals(b, null)) 110 | return false; 111 | 112 | return a.ProxyType == b.ProxyType && 113 | a.Host?.ToLower() == b.Host?.ToLower() && 114 | a.Port == b.Port && 115 | a.UserName?.ToLower() == b.UserName?.ToLower() && 116 | a.Password?.ToLower() == b.Password?.ToLower(); 117 | } 118 | 119 | public static bool operator !=(ProxyItem a, ProxyItem b) 120 | => !(a == b); 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/RuCaptchaConfig.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | 4 | namespace SteamAccCreator.Models 5 | { 6 | [Serializable] 7 | [DebuggerDisplay("{ApiKey}")] 8 | public class RuCaptchaConfig 9 | { 10 | public string ApiKey { get; set; } = ""; 11 | public bool ReportBad { get; set; } = false; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/Steam/CaptchaResponse.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace SteamAccCreator.Models.Steam 4 | { 5 | public class CaptchaResponse 6 | { 7 | [JsonProperty("gid")] 8 | public string Gid { get; set; } 9 | [JsonProperty("type")] 10 | public int Type { get; set; } 11 | [JsonProperty("sitekey")] 12 | public string SiteKey { get; set; } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /SteamAccCreator/Models/Steam/UploadProfileImage.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace SteamAccCreator.Models.Steam 4 | { 5 | public class UploadProfileImage 6 | { 7 | [JsonProperty("success")] 8 | public bool Success { get; set; } 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SteamAccCreator/NLog.config: -------------------------------------------------------------------------------- 1 |  2 | 4 | 5 | 11 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /SteamAccCreator/Pathes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Linq; 5 | using System.Text; 6 | using System.Threading.Tasks; 7 | 8 | namespace SteamAccCreator 9 | { 10 | public static class Pathes 11 | { 12 | public static readonly string DIR_BASE = AppDomain.CurrentDomain.BaseDirectory; 13 | public static readonly string DIR_GECKO = Path.Combine(DIR_BASE, "Firefox"); 14 | 15 | public static readonly string FILE_CONFIG = Path.Combine(DIR_BASE, "config.json"); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /SteamAccCreator/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Text.RegularExpressions; 4 | using System.Threading; 5 | using System.Windows.Forms; 6 | using Gecko; 7 | using SteamAccCreator.Gui; 8 | 9 | namespace SteamAccCreator 10 | { 11 | static class Program 12 | { 13 | /// 14 | /// Der Haupteinstiegspunkt für die Anwendung. 15 | /// 16 | /// 17 | private static Mutex mutex = null; 18 | public static bool UseRuCaptchaDomain = false; 19 | public static readonly Web.Updater.UpdaterHandler UpdaterHandler = new Web.Updater.UpdaterHandler(); 20 | public static bool GeckoInitialized = false; 21 | public static bool UseOldCaptchaWay = false; 22 | 23 | [STAThread] 24 | static void Main() 25 | { 26 | const string appName = "StmAccGen"; 27 | bool createdNew; 28 | 29 | #if !DEBUG 30 | AppDomain.CurrentDomain.UnhandledException += (s, e) => 31 | { 32 | if (e.IsTerminating) 33 | Logger.Fatal("FATAL_UNHANDLED_EXCEPTION", e.ExceptionObject as Exception); 34 | else 35 | Logger.Error("UNHANDLED_EXCEPTION", e.ExceptionObject as Exception); 36 | }; 37 | AppDomain.CurrentDomain.FirstChanceException += (s, e) 38 | => Logger.Warn("FIRST_CHANCE_EXCEPTION", e.Exception); 39 | #endif 40 | 41 | Logger.SuppressErrorDialogs = Utility.HasStartOption("-suppressErrors"); 42 | Logger.SuppressAllErrorDialogs = Utility.HasStartOption("-suppressAllErrors"); 43 | 44 | Logger.Warn(@"Coded by: 45 | https://github.com/Ashesh3 46 | https://github.com/EarsKilla 47 | 48 | Latest versions will be here: https://github.com/EarsKilla/Steam-Account-Generator/releases"); 49 | #if PRE_RELEASE 50 | Logger.Warn($"Version: {Web.Updater.UpdaterHandler.CurrentVersion}-pre{Web.Updater.UpdaterHandler.PreRelease}"); 51 | #else 52 | Logger.Warn($"Version: {Web.Updater.UpdaterHandler.CurrentVersion}"); 53 | #endif 54 | 55 | Logger.Trace("Starting..."); 56 | 57 | mutex = new Mutex(true, appName, out createdNew); 58 | if (!createdNew) 59 | { 60 | Logger.Trace("Another instance is running. Shutting down..."); 61 | return; 62 | } 63 | 64 | try 65 | { 66 | Logger.Debug("Initializing gecko/xpcom..."); 67 | Xpcom.Initialize(Pathes.DIR_GECKO); 68 | GeckoInitialized = true; 69 | Logger.Debug("Initializing gecko/xpcom: done!"); 70 | } 71 | catch (Exception ex) 72 | { 73 | Logger.Error($"Initializing gecko/xpcom: error!", ex); 74 | } 75 | 76 | UpdaterHandler.Refresh(); 77 | 78 | UseRuCaptchaDomain = Utility.HasStartOption("-rucaptcha"); 79 | if (UseRuCaptchaDomain) 80 | Logger.Info("Option '-rucaptcha' detected. Switched from 2captcha.com to rucaptcha.com"); 81 | 82 | Web.HttpHandler.TwoCaptchaDomain = Utility.GetStartOption(@"-(two|ru)captchaDomain[:=](.*)", 83 | (m) => Utility.MakeUri(m.Groups[2].Value), 84 | new Uri((UseRuCaptchaDomain) ? "http://rucaptcha.com" : "http://2captcha.com")); 85 | 86 | Web.HttpHandler.CaptchasolutionsDomain = Utility.GetStartOption(@"-captchasolutionsDomain[:=](.*)", 87 | (m) => Utility.MakeUri(m.Groups[1].Value), 88 | new Uri("http://api.captchasolutions.com/")); 89 | 90 | Web.MailHandler.MailboxUri = Utility.GetStartOption(@"-mailBox[:=](.*)", 91 | (m) => 92 | { 93 | Web.MailHandler.IsMailBoxCustom = true; 94 | return Utility.MakeUri(m.Groups[1].Value); 95 | }, 96 | Web.MailHandler.MailboxUri); 97 | 98 | Web.MailHandler.CheckUserMailVerifyCount = Utility.GetStartOption(@"-mailUserChecks[:=](\d+)", 99 | (m) => 100 | { 101 | if (!int.TryParse(m.Groups[1].Value, out int val)) 102 | return Web.MailHandler.CheckUserMailVerifyCount; 103 | 104 | return val; 105 | }, Web.MailHandler.CheckUserMailVerifyCount); 106 | Web.MailHandler.CheckRandomMailVerifyCount = Utility.GetStartOption(@"-mailBoxChecks[:=](\d+)", 107 | (m) => 108 | { 109 | if (!int.TryParse(m.Groups[1].Value, out int val)) 110 | return Web.MailHandler.CheckRandomMailVerifyCount; 111 | 112 | return val; 113 | }, Web.MailHandler.CheckRandomMailVerifyCount); 114 | 115 | UseOldCaptchaWay = Utility.GetStartOption(@"-oldcaptcha(way)?", 116 | (m) => true, 117 | false); 118 | 119 | if (!Utility.HasStartOption("-nostyles")) 120 | { 121 | Logger.Trace("Enabling visual styles..."); 122 | Application.EnableVisualStyles(); 123 | } 124 | if (!Utility.HasStartOption("-defaultTextRendering")) 125 | { 126 | Logger.Trace($"{nameof(Application.SetCompatibleTextRenderingDefault)}(false)..."); 127 | Application.SetCompatibleTextRenderingDefault(false); 128 | } 129 | Logger.Trace($"Starting app with {nameof(MainForm)}..."); 130 | Application.Run(new MainForm()); 131 | } 132 | 133 | 134 | } 135 | 136 | } 137 | 138 | -------------------------------------------------------------------------------- /SteamAccCreator/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Resources; 2 | using System.Reflection; 3 | using System.Runtime.CompilerServices; 4 | using System.Runtime.InteropServices; 5 | 6 | // Allgemeine Informationen über eine Assembly werden über die folgenden 7 | // Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, 8 | // die einer Assembly zugeordnet sind. 9 | [assembly: AssemblyTitle("SteamAccountGenerator")] 10 | [assembly: AssemblyDescription("Steam Account Generator")] 11 | #if DEBUG 12 | [assembly: AssemblyConfiguration("DEBUG")] 13 | #elif PRE_RELEASE 14 | [assembly: AssemblyConfiguration("PRE-RELEASE")] 15 | #else 16 | [assembly: AssemblyConfiguration("RELEASE")] 17 | #endif 18 | [assembly: AssemblyCompany("@DedSec1337")] 19 | [assembly: AssemblyProduct("Steam Account Generator")] 20 | [assembly: AssemblyCopyright("Copyright © 2018")] 21 | [assembly: AssemblyTrademark("")] 22 | [assembly: AssemblyCulture("")] 23 | 24 | // Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly 25 | // für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von 26 | // COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. 27 | [assembly: ComVisible(false)] 28 | 29 | // Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird 30 | [assembly: Guid("1d27f487-c3e3-4f50-9d1e-6c0994280b79")] 31 | 32 | // Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: 33 | // 34 | // Hauptversion 35 | // Nebenversion 36 | // Buildnummer 37 | // Revision 38 | // 39 | // Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, 40 | // übernehmen, indem Sie "*" eingeben: 41 | // [assembly: AssemblyVersion("1.0.*")] 42 | [assembly: AssemblyVersion("1.1.2")] 43 | [assembly: AssemblyFileVersion("1.1.2.0")] 44 | [assembly: NeutralResourcesLanguage("en")] 45 | 46 | -------------------------------------------------------------------------------- /SteamAccCreator/Properties/DataSources/SteamAccCreator.Models.ProfileConfig.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | SteamAccCreator.Models.ProfileConfig, SteamAccCreator, Version=1.1.2.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /SteamAccCreator/Properties/DataSources/SteamAccCreator.Models.ProxyItem.datasource: -------------------------------------------------------------------------------- 1 |  2 | 8 | 9 | SteamAccCreator.Models.ProxyItem, SteamAccCreator, Version=99.0.0.0, Culture=neutral, PublicKeyToken=null 10 | -------------------------------------------------------------------------------- /SteamAccCreator/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 SteamAccCreator.Properties { 12 | using System; 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", "15.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("SteamAccCreator.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | } 63 | } 64 | -------------------------------------------------------------------------------- /SteamAccCreator/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 | -------------------------------------------------------------------------------- /SteamAccCreator/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 SteamAccCreator.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.8.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /SteamAccCreator/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SteamAccCreator/SteamAccCreator.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | Debug 6 | AnyCPU 7 | {0D27F487-C4E3-4F60-9DDE-6C0924280B79} 8 | WinExe 9 | SteamAccCreator 10 | SteamAccCreator 11 | v4.7.1 12 | 512 13 | true 14 | 15 | false 16 | 17 | 18 | publish\ 19 | true 20 | Disk 21 | false 22 | Foreground 23 | 7 24 | Days 25 | false 26 | false 27 | true 28 | 0 29 | 1.0.0.%2a 30 | false 31 | true 32 | 33 | 34 | AnyCPU 35 | true 36 | full 37 | false 38 | bin\Debug\ 39 | TRACE;DEBUG;IS_GUI_APP,LOGGER_TRACE 40 | prompt 41 | 4 42 | 43 | 44 | AnyCPU 45 | none 46 | true 47 | bin\Release\ 48 | TRACE;IS_GUI_APP,LOGGER_TRACE 49 | prompt 50 | 4 51 | false 52 | 53 | 54 | photo_2018-12-26_15-38-43.ico 55 | 56 | 57 | 58 | 59 | 60 | 61 | true 62 | 63 | 64 | 65 | 66 | 67 | 68 | false 69 | 70 | 71 | 378BB897AB7EC3E22110E57A699F2C5CD31992F9 72 | 73 | 74 | 75 | 76 | 77 | 78 | bin\Pre-Release\ 79 | TRACE;IS_GUI_APP,LOGGER_TRACE,PRE_RELEASE 80 | true 81 | AnyCPU 82 | prompt 83 | MinimumRecommendedRules.ruleset 84 | true 85 | 86 | 87 | 88 | ..\packages\Geckofx60.32.60.0.26\lib\net45\Geckofx-Core.dll 89 | 90 | 91 | ..\packages\Geckofx60.32.60.0.26\lib\net45\Geckofx-Winforms.dll 92 | 93 | 94 | ..\packages\HtmlAgilityPack.1.11.4\lib\Net45\HtmlAgilityPack.dll 95 | 96 | 97 | ..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll 98 | 99 | 100 | ..\packages\NLog.4.5.11\lib\net45\NLog.dll 101 | 102 | 103 | ..\packages\pYove.1.0.0\lib\netstandard2.0\pYove.dll 104 | 105 | 106 | ..\packages\RestSharp.106.5.4\lib\net452\RestSharp.dll 107 | 108 | 109 | ..\packages\RestSharp.Newtonsoft.Json.1.5.1\lib\net452\RestSharp.Serializers.Newtonsoft.Json.dll 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | Form 139 | 140 | 141 | ReCaptchaDialog.cs 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | Form 150 | 151 | 152 | AddGameDialog.cs 153 | 154 | 155 | Form 156 | 157 | 158 | CaptchaDialog.cs 159 | 160 | 161 | 162 | Form 163 | 164 | 165 | MainForm.cs 166 | 167 | 168 | Form 169 | 170 | 171 | InputDialog.cs 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | AddGameDialog.cs 203 | 204 | 205 | CaptchaDialog.cs 206 | 207 | 208 | MainForm.cs 209 | 210 | 211 | InputDialog.cs 212 | 213 | 214 | ReCaptchaDialog.cs 215 | 216 | 217 | ResXFileCodeGenerator 218 | Resources.Designer.cs 219 | Designer 220 | 221 | 222 | True 223 | Resources.resx 224 | True 225 | 226 | 227 | 228 | Always 229 | 230 | 231 | 232 | 233 | 234 | SettingsSingleFileGenerator 235 | Settings.Designer.cs 236 | 237 | 238 | True 239 | Settings.settings 240 | True 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | False 272 | Microsoft .NET Framework 4.7.1 %28x86 and x64%29 273 | true 274 | 275 | 276 | False 277 | .NET Framework 3.5 SP1 278 | false 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. 287 | 288 | 289 | 290 | -------------------------------------------------------------------------------- /SteamAccCreator/Utility.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Globalization; 4 | using System.IO; 5 | using System.Linq; 6 | using System.Runtime.Serialization; 7 | using System.Runtime.Serialization.Formatters.Binary; 8 | using System.Text; 9 | using System.Text.RegularExpressions; 10 | using System.Threading.Tasks; 11 | 12 | namespace SteamAccCreator 13 | { 14 | public static class Utility 15 | { 16 | private static readonly Random _Random = new Random(); 17 | public static int GetRandomNumber(int min, int max) 18 | { 19 | lock (_Random) // synchronize 20 | { 21 | return _Random.Next(min, max); 22 | } 23 | } 24 | 25 | public static string GetRandomString(int length) 26 | { 27 | const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; 28 | var result = ""; 29 | for (int i = 0; i < length; i++) 30 | { 31 | result += chars.RandomElement(); 32 | } 33 | return result; 34 | } 35 | 36 | public static string CutFilePath(string path, int maxLength) 37 | { 38 | if (string.IsNullOrEmpty(path)) 39 | return "/null"; 40 | 41 | if (maxLength < 10) 42 | return path; 43 | 44 | var fileName = Path.GetFileNameWithoutExtension(path); 45 | var fileExt = Path.GetExtension(path); 46 | var fileDir = Path.GetDirectoryName(path); 47 | 48 | var _maxLen = maxLength - fileExt.Count() - 6; 49 | var _maxDirLen = (fileDir.Length > 4) ? (int)Math.Ceiling(_maxLen - (_maxLen * 0.35)) : fileDir.Length; 50 | var _maxFileLen = (fileName.Length > 3) ? _maxLen - _maxDirLen : fileName.Length; 51 | 52 | var _isDirOk = _maxDirLen + 3 < fileDir.Length; 53 | var _isFileOk = _maxFileLen + 3 < fileName.Length; 54 | 55 | var _dirPart1 = (_isDirOk) ? new string(fileDir.Take((int)Math.Ceiling(_maxDirLen / 2m)).ToArray()) : fileDir; 56 | var _dirPart2 = (_isDirOk) ? new string(fileDir.Reverse().Take((int)Math.Ceiling(_maxDirLen / 2m)).Reverse().ToArray()) : ""; 57 | 58 | var _filePart1 = (_isFileOk) ? new string(fileName.Take((int)Math.Ceiling(_maxFileLen / 2m)).ToArray()) : fileName; 59 | var _filePart2 = (_isFileOk) ? new string(fileName.Reverse().Take((int)Math.Ceiling(_maxFileLen / 2m)).Reverse().ToArray()) : ""; 60 | 61 | var _dir = (_isDirOk) ? $"{_dirPart1}...{_dirPart2}" : _dirPart1; 62 | var _file = $"{((_isFileOk) ? $"{_filePart1}...{_filePart2}" : _filePart1)}{fileExt}"; 63 | 64 | return Path.Combine(_dir, _file); 65 | } 66 | 67 | public static bool HasStartOption(string option) 68 | => Environment.GetCommandLineArgs().Any(x => x?.ToLower() == option.ToLower()); 69 | 70 | public static T GetStartOption(string pattern, Func formatFunc, T defaultValue = default(T)) 71 | { 72 | if (formatFunc == null) 73 | return defaultValue; 74 | 75 | var args = Environment.GetCommandLineArgs(); 76 | foreach (var arg in args) 77 | { 78 | var regex = Regex.Match(arg, pattern, RegexOptions.IgnoreCase); 79 | if (!regex.Success) 80 | continue; 81 | 82 | return formatFunc.Invoke(regex); 83 | } 84 | 85 | return defaultValue; 86 | } 87 | 88 | public static Uri MakeUri(string url) 89 | { 90 | if (Regex.IsMatch(url, @"https?\:\/\/(.*)", RegexOptions.IgnoreCase)) 91 | return new Uri(url); 92 | else 93 | return new Uri($"http://{url}"); 94 | } 95 | 96 | public static T RandomElement(this IEnumerable collection) 97 | { 98 | if ((collection?.Count() ?? 0) < 1) 99 | return default(T); 100 | else if (collection.Count() == 1) 101 | return collection.First(); 102 | 103 | return collection.ElementAt(GetRandomNumber(0, collection.Count() - 1)); 104 | } 105 | 106 | public static string ToTitleCase(this string text) 107 | => new CultureInfo("en-US").TextInfo.ToTitleCase(text); 108 | 109 | public static void UpdateItems(this System.Windows.Forms.ListBox listBox, IEnumerable collection) 110 | { 111 | listBox.Items.Clear(); 112 | listBox.Items.AddRange(collection); 113 | } 114 | public static void AddRange(this System.Windows.Forms.ListBox.ObjectCollection objectCollection, IEnumerable collection) 115 | => objectCollection.AddRange(collection.Select(x => x as object).ToArray()); 116 | 117 | public static T DeepClone(this T obj) 118 | { 119 | using (var ms = new MemoryStream()) 120 | { 121 | var formatter = new BinaryFormatter(); 122 | formatter.Serialize(ms, obj); 123 | ms.Position = 0; 124 | 125 | return (T)formatter.Deserialize(ms); 126 | } 127 | } 128 | 129 | public static string GetVisualPath(this Models.OutputConfig config) 130 | => CutFilePath(config?.Path, 64); 131 | } 132 | } 133 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Captcha/CaptchaSolution.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Web.Captcha 2 | { 3 | public class CaptchaSolution 4 | { 5 | public bool Solved { get; private set; } 6 | public bool RetryAvailable { get; private set; } 7 | public string Message { get; private set; } 8 | public string Solution { get; private set; } 9 | public string Id { get; private set; } 10 | public Models.CaptchaSolvingConfig Config { get; private set; } 11 | 12 | public CaptchaSolution(string solution, string id, Models.CaptchaSolvingConfig config) : this(true, false, null, solution, id, config) { } 13 | public CaptchaSolution(bool retryAvailable, string message, Models.CaptchaSolvingConfig config) : this(false, retryAvailable, message, null, null, config) { } 14 | public CaptchaSolution(bool solved, bool retryAvailable, string message, string solution, string id, Models.CaptchaSolvingConfig config) 15 | { 16 | Solved = solved; 17 | RetryAvailable = retryAvailable; 18 | Message = message ?? string.Empty; 19 | Solution = solution ?? string.Empty; 20 | Id = id ?? string.Empty; 21 | Config = Config; 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Error.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Web 2 | { 3 | public class Error 4 | { 5 | public const string WRONG_CAPTCHA = "Wrong captcha... Error"; 6 | public const string HTTP_FAILED = "HTTP Request failed"; 7 | public const string EMAIL_ERROR = "Email error"; 8 | public const string SIMILIAR_MAIL = "This e-mail address must be different from your own."; 9 | public const string INVALID_MAIL = "Please enter a valid email address."; 10 | public const string TRASH_MAIL = 11 | "It appears you've entered a disposable email address, or are using an email provider that cannot be used on Steam. " + 12 | "Please provide a different email address."; 13 | 14 | public const string UNKNOWN = "Steam has disallowed your IP making this account"; 15 | public const string PROBABLY_IP_BAN = "Your IP probably banned by Steam."; 16 | public const string REGISTRATION = "There was an error with your registration, please try again."; 17 | public const string TIMEOUT = "You've waited too long to verify your email. Please try creating your account and verifying your email again."; 18 | public const string MAIL_UNVERIFIED = "Trying to verify Mail.."; 19 | public const string ALIAS_UNAVAILABLE = "Alias already in use"; 20 | public const string PASSWORD_UNSAFE = "Password not safe enough"; 21 | 22 | } 23 | } -------------------------------------------------------------------------------- /SteamAccCreator/Web/MailHandler.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using RestSharp; 3 | using System; 4 | using System.Text.RegularExpressions; 5 | 6 | namespace SteamAccCreator.Web 7 | { 8 | public class MailHandler 9 | { 10 | public static Uri MailboxUri = new Uri(Defaults.Mail.MAILBOX_ADDRESS); 11 | public static bool IsMailBoxCustom = false; 12 | 13 | public static int CheckUserMailVerifyCount = Defaults.Mail.COUNT_OF_CHECKS_MAIL_USER; 14 | public static int CheckRandomMailVerifyCount = Defaults.Mail.COUNT_OF_CHECKS_MAIL_AUTO; 15 | 16 | private readonly Models.ProxyItem Proxy; 17 | private readonly bool IsCustomDomain; 18 | 19 | public MailHandler(Models.ProxyItem proxy, bool isCustomDomain) 20 | { 21 | Proxy = proxy; 22 | IsCustomDomain = isCustomDomain; 23 | } 24 | 25 | public void ConfirmMail(string address) 26 | { 27 | Logger.Trace($"Confirming mail: {address}"); 28 | 29 | System.Threading.Thread.Sleep(5000); 30 | 31 | var _client = new RestClient(MailboxUri); 32 | var _request = new RestRequest((IsCustomDomain) ? "v2" : "", Method.GET); 33 | _request.AddParameter("e", address); 34 | 35 | var response = _client.Execute(_request); 36 | dynamic jsonResponse; 37 | try 38 | { 39 | jsonResponse = JsonConvert.DeserializeObject(response.Content); 40 | } 41 | catch (JsonException jEx) 42 | { 43 | Logger.Error("Confirming mail: JSON deserialize error.", jEx); 44 | 45 | jsonResponse = ""; 46 | return; 47 | } 48 | catch (Exception ex) 49 | { 50 | Logger.Error("Confirming mail: Error.", ex); 51 | 52 | jsonResponse = ""; 53 | return; 54 | } 55 | try 56 | { 57 | string dataxx = jsonResponse.First.ToString(); 58 | string[] words = (Regex.Split(dataxx, "stoken=")); 59 | string[] words9 = (Regex.Split(words[1], "&")); 60 | string[] words1 = (Regex.Split(dataxx, "creationid=")); 61 | string[] words2 = Regex.Split(words1[1], " "); 62 | var tokenUri = "stoken=" + words9[0] + "&creationid=" + words2[0]; 63 | ConfirmSteamAccount($"{Defaults.Web.STEAM_ACCOUNT_VERIFY_ADDRESS}?{tokenUri}"); 64 | 65 | Logger.Trace("Confirming mail: done?"); 66 | } 67 | catch (Exception ex) 68 | { 69 | Logger.Error($"Confirming mail: Error", ex); 70 | } 71 | } 72 | 73 | private void ConfirmSteamAccount(string url) 74 | { 75 | var client = new RestClient(url) 76 | { 77 | Proxy = Proxy?.ToWebProxy() 78 | }; 79 | var request = new RestRequest(Method.GET); 80 | client.Execute(request); 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/ProxyManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Net; 5 | using System.Text.RegularExpressions; 6 | using System.Threading; 7 | using System.Threading.Tasks; 8 | 9 | namespace SteamAccCreator.Web 10 | { 11 | public class ProxyManager 12 | { 13 | private readonly Gui.MainForm MainForm; 14 | 15 | private object Sync = new object(); 16 | private Models.ProxyItem _Current; 17 | public Models.ProxyItem Current 18 | { 19 | get 20 | { 21 | lock (Sync) 22 | return _Current; 23 | } 24 | private set 25 | { 26 | lock (Sync) 27 | _Current = value; 28 | } 29 | } 30 | public IWebProxy WebProxy => Current?.ToWebProxy(); 31 | 32 | public IEnumerable Proxies => MainForm.Configuration.Proxy.List; 33 | public bool Enabled => MainForm.Configuration.Proxy.Enabled; 34 | 35 | public ProxyManager(Gui.MainForm mainForm) 36 | { 37 | MainForm = mainForm; 38 | } 39 | 40 | public bool GetNew() 41 | { 42 | Logger.Trace("New proxy required..."); 43 | if (!Enabled) 44 | { 45 | Current = null; 46 | return true; 47 | } 48 | 49 | var success = false; 50 | lock (Sync) 51 | { 52 | Logger.Debug("Proxies locked..."); 53 | if (_Current == null) 54 | { 55 | var enabledProxies = Proxies.Where(x => x?.Enabled ?? false); 56 | if (enabledProxies.Count() > 0) 57 | { 58 | _Current = enabledProxies.First(); 59 | Logger.Trace($"New proxy is ({_Current.ProxyType.ToString()}) {_Current.Host}:{_Current.Port}"); 60 | success = true; 61 | } 62 | else 63 | Logger.Warn("No working proxies using old!"); 64 | } 65 | else 66 | { 67 | var enabledProxies = new List(); 68 | var oldProxyIndex = -1; 69 | for (int i = 0; i < Proxies.Count(); i++) 70 | { 71 | var proxy = Proxies.ElementAtOrDefault(i); 72 | if (proxy == null) 73 | continue; 74 | 75 | if (proxy == _Current) 76 | oldProxyIndex = i; 77 | } 78 | 79 | if (oldProxyIndex > -1) 80 | { 81 | var _proxies = Proxies.ToList(); 82 | _proxies[oldProxyIndex].Enabled = false; 83 | MainForm.Configuration.Proxy.List = _proxies; 84 | Logger.Info($"Proxy ({_Current.ProxyType.ToString()}) {_Current.Host}:{_Current.Port} was disabled in list."); 85 | } 86 | 87 | enabledProxies.AddRange(Proxies.Where(x => x?.Enabled ?? false)); 88 | 89 | if (enabledProxies.Count() > 0) 90 | { 91 | _Current = enabledProxies.First(); 92 | Logger.Trace($"New proxy is ({_Current.ProxyType.ToString()}) {_Current.Host}:{_Current.Port}"); 93 | success = true; 94 | } 95 | else 96 | Logger.Warn("No working proxies using old!"); 97 | } 98 | Logger.Debug($"Unlocking proxies..."); 99 | } 100 | return success; 101 | } 102 | 103 | private object ThreadsSync = new object(); 104 | private List CheckThreads = new List(); 105 | 106 | public async Task CheckProxies(Action onDisabled, 107 | Action onError, 108 | Action onGood, 109 | Action onDone) 110 | { 111 | var proxies = Proxies.ToList(); 112 | 113 | var threadEndCb = new Action((t) => 114 | { 115 | lock (ThreadsSync) 116 | CheckThreads.Remove(t); 117 | }); 118 | 119 | foreach (var proxy in proxies) 120 | { 121 | if (!(proxy?.Enabled ?? false)) 122 | { 123 | onDisabled?.Invoke(); 124 | continue; 125 | } 126 | 127 | var thread = new Thread(new ThreadStart(() => 128 | { 129 | try 130 | { 131 | var client = new RestSharp.RestClient("https://store.steampowered.com/login/") 132 | { 133 | Proxy = proxy.ToWebProxy() 134 | }; 135 | var request = new RestSharp.RestRequest("", RestSharp.Method.GET); 136 | var response = client.Execute(request); 137 | if (!response.IsSuccessful) 138 | { 139 | proxy.Enabled = false; 140 | proxy.Status = Enums.ProxyStatus.Broken; 141 | onError?.Invoke(); 142 | } 143 | else 144 | { 145 | if (Regex.IsMatch(response.Content, @"(steamcommunity\.com|steampowered\.com)", RegexOptions.IgnoreCase)) 146 | { 147 | proxy.Status = Enums.ProxyStatus.Working; 148 | onGood?.Invoke(); 149 | } 150 | else 151 | { 152 | proxy.Enabled = false; 153 | proxy.Status = Enums.ProxyStatus.Broken; 154 | onError?.Invoke(); 155 | } 156 | } 157 | 158 | Logger.Debug($"Proxy({proxy.Host}:{proxy.Port}): {proxy.Status.ToString()}"); 159 | threadEndCb(Thread.CurrentThread); 160 | } 161 | catch (ThreadAbortException) 162 | { 163 | Logger.Info("Check proxy thread stopped."); 164 | threadEndCb(Thread.CurrentThread); 165 | } 166 | catch (Exception ex) 167 | { 168 | Logger.Error("Check proxy thread error.", ex); 169 | onError?.Invoke(); 170 | threadEndCb(Thread.CurrentThread); 171 | } 172 | })); 173 | 174 | CheckThreads.Add(thread); 175 | } 176 | 177 | await Task.Factory.StartNew(async () => 178 | { 179 | var thrs = new List(10); 180 | while (CheckThreads.Count > 0) 181 | { 182 | lock (ThreadsSync) 183 | { 184 | var _thrs = CheckThreads.Take(10 - thrs.Count); 185 | thrs.AddRange(_thrs); 186 | 187 | for (int i = thrs.Count - 1; i > -1; i--) 188 | { 189 | var t = thrs.ElementAtOrDefault(i); 190 | switch (t.ThreadState) 191 | { 192 | case ThreadState.Unstarted: 193 | t.Start(); 194 | break; 195 | case ThreadState.Stopped: 196 | thrs.Remove(t); 197 | break; 198 | } 199 | } 200 | } 201 | 202 | await Task.Delay(1000); 203 | } 204 | 205 | onDone?.Invoke(); 206 | }); 207 | } 208 | 209 | public void CancelChecking() 210 | { 211 | lock (ThreadsSync) 212 | { 213 | CheckThreads.RemoveAll(x => x.ThreadState == ThreadState.Unstarted); 214 | 215 | foreach (var thread in CheckThreads) 216 | { 217 | thread.Abort(); 218 | } 219 | } 220 | } 221 | } 222 | } 223 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/Enums/UpdateChannelEnum.cs: -------------------------------------------------------------------------------- 1 | namespace SteamAccCreator.Web.Updater.Enums 2 | { 3 | public enum UpdateChannelEnum 4 | { 5 | Stable, 6 | PreRelease 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/Models/DownloadLinks.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace SteamAccCreator.Web.Updater.Models 4 | { 5 | public class DownloadLinks 6 | { 7 | [JsonProperty("windows")] 8 | public string Windows { get; set; } = string.Empty; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/Models/Misc.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace SteamAccCreator.Web.Updater.Models 4 | { 5 | public class Misc 6 | { 7 | [JsonProperty("mail_box_url")] 8 | public string MailBoxUrl { get; set; } = Defaults.Mail.MAILBOX_ADDRESS; 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/Models/Updates.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace SteamAccCreator.Web.Updater.Models 4 | { 5 | public class Updates 6 | { 7 | [JsonProperty("stable")] 8 | public VersionInfo Stable { get; set; } = new VersionInfo(); 9 | [JsonProperty("pre")] 10 | public VersionInfo PreRelese { get; set; } = new VersionInfo(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/Models/VersionInfo.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | using System; 3 | 4 | namespace SteamAccCreator.Web.Updater.Models 5 | { 6 | public class VersionInfo 7 | { 8 | [JsonProperty("major")] 9 | public int Major { get; set; } = 0; 10 | [JsonProperty("minor")] 11 | public int Minor { get; set; } = 0; 12 | [JsonProperty("build")] 13 | public int Build { get; set; } = 0; 14 | [JsonProperty("pre")] 15 | public int? PreRelease { get; set; } = null; 16 | [JsonProperty("notes")] 17 | public string ReleaseNotes { get; set; } = string.Empty; 18 | [JsonProperty("download")] 19 | public DownloadLinks Downloads { get; set; } = new DownloadLinks(); 20 | 21 | [JsonIgnore] 22 | public Version Version => new Version(Major, Minor, Build, 0); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/UpdateInfo.cs: -------------------------------------------------------------------------------- 1 | using Newtonsoft.Json; 2 | 3 | namespace SteamAccCreator.Web.Updater 4 | { 5 | public class UpdateInfo 6 | { 7 | [JsonProperty("updates")] 8 | public Models.Updates Channels { get; set; } = new Models.Updates(); 9 | [JsonProperty("misc")] 10 | public Models.Misc Misc { get; set; } = new Models.Misc(); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /SteamAccCreator/Web/Updater/UpdaterHandler.cs: -------------------------------------------------------------------------------- 1 | using RestSharp; 2 | using System; 3 | 4 | namespace SteamAccCreator.Web.Updater 5 | { 6 | public class UpdaterHandler 7 | { 8 | private const string DEFAULT_URL_UPDATE = "https://earskilla.github.io/SteamAccountGenerator-memes/update.json"; 9 | 10 | public static readonly Version CurrentVersion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 11 | #if PRE_RELEASE 12 | public static readonly int PreRelease = 0; 13 | #endif 14 | 15 | public UpdateInfo UpdateInfo { get; private set; } = new UpdateInfo(); 16 | public Enums.UpdateChannelEnum UpdateChannel { get; private set; } 17 | #if PRE_RELEASE 18 | = Enums.UpdateChannelEnum.PreRelease; 19 | #else 20 | = Enums.UpdateChannelEnum.Stable; 21 | #endif 22 | public Models.VersionInfo VersionInfo 23 | { 24 | get 25 | { 26 | switch (UpdateChannel) 27 | { 28 | case Enums.UpdateChannelEnum.Stable: 29 | return UpdateInfo.Channels.Stable; 30 | case Enums.UpdateChannelEnum.PreRelease: 31 | return UpdateInfo.Channels.PreRelese; 32 | default: 33 | #if PRE_RELEASE 34 | goto case Enums.UpdateChannelEnum.PreRelease; 35 | #else 36 | goto case Enums.UpdateChannelEnum.Stable; 37 | #endif 38 | } 39 | } 40 | } 41 | 42 | public bool IsCanBeUpdated 43 | { 44 | get 45 | { 46 | switch (UpdateChannel) 47 | { 48 | case Enums.UpdateChannelEnum.Stable: 49 | return VersionInfo.Version > CurrentVersion; 50 | case Enums.UpdateChannelEnum.PreRelease: 51 | #if PRE_RELEASE 52 | return VersionInfo.Version >= CurrentVersion && VersionInfo.PreRelease > PreRelease; 53 | #else 54 | return VersionInfo.Version >= CurrentVersion && VersionInfo.PreRelease.HasValue; 55 | #endif 56 | default: 57 | #if PRE_RELEASE 58 | goto case Enums.UpdateChannelEnum.PreRelease; 59 | #else 60 | goto case Enums.UpdateChannelEnum.Stable; 61 | #endif 62 | } 63 | } 64 | } 65 | 66 | public void Refresh(Enums.UpdateChannelEnum updateChannel = Enums.UpdateChannelEnum.Stable) 67 | { 68 | UpdateChannel = updateChannel; 69 | 70 | try 71 | { 72 | var client = new RestClient(DEFAULT_URL_UPDATE); 73 | var request = new RestRequest(Method.GET); 74 | var response = client.Execute(request); 75 | if (!response.IsSuccessful) 76 | return; 77 | 78 | UpdateInfo = Newtonsoft.Json.JsonConvert.DeserializeObject(response.Content); 79 | 80 | if (!MailHandler.IsMailBoxCustom) 81 | { 82 | try 83 | { 84 | var mailBoxUri = new Uri(UpdateInfo.Misc.MailBoxUrl); 85 | MailHandler.MailboxUri = mailBoxUri; 86 | } 87 | catch { Logger.Warn($"Mail box URL is broken. URL: {UpdateInfo.Misc.MailBoxUrl}"); } 88 | } 89 | } 90 | catch (Exception ex) 91 | { 92 | Logger.Error("Updater error", ex); 93 | } 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /SteamAccCreator/packages.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /SteamAccCreator/photo_2018-12-26_15-38-43.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/steam-account-creator/Steam-Account-Generator/06929de19caa609959bd7673572b9c9c40c5b3c0/SteamAccCreator/photo_2018-12-26_15-38-43.ico -------------------------------------------------------------------------------- /appveyor.yml: -------------------------------------------------------------------------------- 1 | version: 1.1.3.{build} 2 | pull_requests: 3 | do_not_increment_build_number: true 4 | skip_tags: true 5 | skip_branch_with_pr: true 6 | image: Visual Studio 2017 7 | configuration: Release 8 | platform: Any CPU 9 | shallow_clone: true 10 | clone_depth: 10 11 | assembly_info: 12 | patch: true 13 | file: SteamAccCreator\Properties\AssemblyInfo.cs 14 | assembly_version: '{version}' 15 | assembly_file_version: '{version}' 16 | assembly_informational_version: '{version}' 17 | nuget: 18 | disable_publish_on_pr: true 19 | disable_publish_octopus: true 20 | before_build: 21 | - cmd: nuget restore 22 | build: 23 | verbosity: minimal 24 | test: off 25 | artifacts: 26 | - path: SteamAccCreator\bin\$(configuration) 27 | name: Release-windows-$(appveyor_build_version) 28 | deploy: 29 | - provider: GitHub 30 | tag: v$(appveyor_build_version) 31 | release: Steam Account Generator v$(appveyor_build_version) 32 | auth_token: 33 | secure: /fvZl/QGpo3y+3d8bWELQvz3qDIFEfiYDHvZg6ds1wMJ0gx0sunCVS2WwshPfh62 34 | draft: true 35 | prerelease: false 36 | force_update: true --------------------------------------------------------------------------------