├── .vs
└── LowDig
│ └── v14
│ └── .suo
├── LowDig
├── Newtonsoft.Json.dll
├── App.config
├── Program.cs
├── Properties
│ └── AssemblyInfo.cs
├── Functions.cs
├── Settings.cs
├── Config.cs
├── Log.cs
├── LowDig.csproj
├── Steam.cs
├── Hotmail.cs
└── Session.cs
├── LowDig.sln
├── LICENSE.md
└── README.md
/.vs/LowDig/v14/.suo:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ezzpify/FindLowDigAccounts/HEAD/.vs/LowDig/v14/.suo
--------------------------------------------------------------------------------
/LowDig/Newtonsoft.Json.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ezzpify/FindLowDigAccounts/HEAD/LowDig/Newtonsoft.Json.dll
--------------------------------------------------------------------------------
/LowDig/App.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LowDig.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 12.00
3 | # Visual Studio 14
4 | VisualStudioVersion = 14.0.23107.0
5 | MinimumVisualStudioVersion = 10.0.40219.1
6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LowDig", "LowDig\LowDig.csproj", "{367AE931-F53C-4A3A-89E3-9DCFE69319ED}"
7 | EndProject
8 | Global
9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
10 | Debug|Any CPU = Debug|Any CPU
11 | Release|Any CPU = Release|Any CPU
12 | EndGlobalSection
13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
14 | {367AE931-F53C-4A3A-89E3-9DCFE69319ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15 | {367AE931-F53C-4A3A-89E3-9DCFE69319ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
16 | {367AE931-F53C-4A3A-89E3-9DCFE69319ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
17 | {367AE931-F53C-4A3A-89E3-9DCFE69319ED}.Release|Any CPU.Build.0 = Release|Any CPU
18 | EndGlobalSection
19 | GlobalSection(SolutionProperties) = preSolution
20 | HideSolutionNode = FALSE
21 | EndGlobalSection
22 | EndGlobal
23 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Casper
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 |
--------------------------------------------------------------------------------
/LowDig/Program.cs:
--------------------------------------------------------------------------------
1 | using System.Threading;
2 | using System;
3 |
4 | namespace LowDig
5 | {
6 | class Program
7 | {
8 | ///
9 | /// Private variables
10 | ///
11 | private static Session mSession;
12 | private static Config.Settings mSettings;
13 |
14 |
15 | ///
16 | /// Main functions
17 | /// Set settings and start session
18 | ///
19 | /// No args
20 | static void Main(string[] args)
21 | {
22 | /*Read settings*/
23 | mSettings = Settings.Read();
24 | if (mSettings == null)
25 | return;
26 |
27 | /*Start session*/
28 | mSession = new Session(mSettings);
29 |
30 | /*Keep us alive*/
31 | while (true)
32 | {
33 | /*Update title with number of account found from session*/
34 | Console.Title = string.Format("Zute | LowDig | Accounts found: {0}", mSession.mAccountsFound);
35 | Thread.Sleep(100);
36 | }
37 | }
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/LowDig/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // General Information about an assembly is controlled through the following
6 | // set of attributes. Change these attribute values to modify the information
7 | // associated with an assembly.
8 | [assembly: AssemblyTitle("LowDig")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("")]
12 | [assembly: AssemblyProduct("LowDig")]
13 | [assembly: AssemblyCopyright("Copyright © 2016")]
14 | [assembly: AssemblyTrademark("")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // Setting ComVisible to false makes the types in this assembly not visible
18 | // to COM components. If you need to access a type in this assembly from
19 | // COM, set the ComVisible attribute to true on that type.
20 | [assembly: ComVisible(false)]
21 |
22 | // The following GUID is for the ID of the typelib if this project is exposed to COM
23 | [assembly: Guid("367ae931-f53c-4a3a-89e3-9dcfe69319ed")]
24 |
25 | // Version information for an assembly consists of the following four values:
26 | //
27 | // Major Version
28 | // Minor Version
29 | // Build Number
30 | // Revision
31 | //
32 | // You can specify all the values or you can default the Build and Revision Numbers
33 | // by using the '*' as shown below:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.0.0.0")]
36 | [assembly: AssemblyFileVersion("1.0.0.0")]
37 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # This is an old project
2 |
3 | Sorry to dissapoint in case you arrived late to the party, but do not expect this to work. While I haven't ran this program in about 6 years, I assume it can still scan for accounts; however I don't expect that you can do much with the output.
4 |
5 | # FindLowDigAccounts
6 |
7 | [](./LICENSE)
8 | [](https://github.com/Ezzpify/HourBoostr/releases/latest)
9 | [](https://github.com/Ezzpify/FindLowDigAccounts/releases/latest)
10 |
11 | This will scan Steam accounts within a certain range and if they have no set up their Steam Community profile then it will log that account Steam id. I am not responsible for what you do with this.
12 |
13 | Credits for the original idea goes to lukeryuri/phoenixdoom. They have their own project that I recommend you also check out! https://github.com/hvze/steam-gen
14 |
15 | 
16 |
17 | Log file example:
18 | ```
19 | ChrisRPG
20 | ChrisRPG@hotmail.com
21 | STEAM_0:0:5004
22 |
23 | lee2leee
24 | lee2leee@hotmail.com
25 | STEAM_0:0:5007
26 |
27 | ShoTTy
28 | ShoTTy@hotmail.com
29 | STEAM_0:0:5011
30 |
31 | eclipze
32 | eclipze@hotmail.com
33 | STEAM_0:0:5013
34 |
35 | scorpion_lgg
36 | scorpion_lgg@hotmail.com
37 | STEAM_0:0:5022
38 | ```
39 |
--------------------------------------------------------------------------------
/LowDig/Functions.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Text.RegularExpressions;
3 |
4 | namespace LowDig
5 | {
6 | static class Functions
7 | {
8 | ///
9 | /// Converts from SteamId to SteamId64
10 | ///
11 | /// SteamId to convert
12 | /// Returns a converted SteamId64
13 | public static string ConvertToSteam64(string steamId)
14 | {
15 | steamId.Replace("STEAM_", "");
16 | string[] split = steamId.Split(':');
17 | return "765611979" + ((Convert.ToInt64(split[2]) * 2) + 60265728 + Convert.ToInt64(split[1])).ToString();
18 | }
19 |
20 |
21 | ///
22 | /// Gets a string inbetween two strings
23 | ///
24 | /// Source string
25 | /// Start string
26 | /// End string
27 | /// Returns string if found
28 | public static string GetStringBetween(string source, string start, string end)
29 | {
30 | int startIndex = source.IndexOf(start);
31 | if (startIndex != -1)
32 | {
33 | int endIndex = source.IndexOf(end, startIndex + 1);
34 | if (endIndex != -1)
35 | {
36 | return source.Substring(startIndex + start.Length, endIndex - startIndex - start.Length);
37 | }
38 | }
39 | return string.Empty;
40 | }
41 |
42 |
43 | ///
44 | /// Checks if an email adress looks okay
45 | ///
46 | /// String to check
47 | /// Returns true if email looks ok
48 | public static bool IsProperEmail(string str)
49 | {
50 | return Regex.IsMatch(str, @"\A(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?)\Z",
51 | RegexOptions.IgnoreCase);
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/LowDig/Settings.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Threading;
3 | using System.IO;
4 | using Newtonsoft.Json;
5 |
6 | namespace LowDig
7 | {
8 | static class Settings
9 | {
10 | ///
11 | /// Read or write settings for application
12 | ///
13 | /// Returns null if settings was not read
14 | public static Config.Settings Read()
15 | {
16 | string fileName = "Settings.json";
17 | if (File.Exists(fileName))
18 | {
19 | /*File exist, so we'll parse the information here*/
20 | string setJson = File.ReadAllText(fileName);
21 | if (!string.IsNullOrWhiteSpace(setJson))
22 | {
23 | try
24 | {
25 | /*Return deserialized json string*/
26 | return JsonConvert.DeserializeObject(setJson);
27 | }
28 | catch (JsonException jEx)
29 | {
30 | /*Incorrect format probably*/
31 | Console.WriteLine("Error parsing {0}\n{1}", fileName, jEx.ToString());
32 | File.Delete(fileName);
33 | Thread.Sleep(1500);
34 | }
35 | }
36 | }
37 | else
38 | {
39 | /*File doesn't exist, we'll create it here*/
40 | var settingsClass = new Config.Settings()
41 | {
42 | /*Temp values*/
43 | startId = 5000,
44 | endId = 10000,
45 | requestLimit = 50,
46 | checkHotmail = true
47 | };
48 |
49 | /*Write file*/
50 | string djson = JsonConvert.SerializeObject(settingsClass, Formatting.Indented);
51 | Console.WriteLine("{0} has been written. Edit the settings and launch the program again.", fileName);
52 | File.WriteAllText(fileName, djson);
53 | Thread.Sleep(1500);
54 | }
55 |
56 | return null;
57 | }
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/LowDig/Config.cs:
--------------------------------------------------------------------------------
1 | namespace LowDig
2 | {
3 | public class Config
4 | {
5 | ///
6 | /// Holds settings for application
7 | ///
8 | public class Settings
9 | {
10 | public int startId { get; set; }
11 | public int endId { get; set; }
12 | public int requestLimit { get; set; }
13 | public bool checkHotmail { get; set; }
14 | }
15 |
16 |
17 | ///
18 | /// Holds information about a steam account
19 | ///
20 | public class Account
21 | {
22 | public string username { get; set; }
23 | public string email { get; set; }
24 | public string steamid { get; set; }
25 | }
26 |
27 |
28 | ///
29 | /// Hotmail error class
30 | ///
31 | public class Error
32 | {
33 | public string code { get; set; }
34 | public string data { get; set; }
35 | public bool showError { get; set; }
36 | public string stackTrace { get; set; }
37 | }
38 |
39 |
40 | ///
41 | /// Hotmail reponse class
42 | ///
43 | public class HotmailResponse
44 | {
45 | public Error error { get; set; }
46 | public string apiCanary { get; set; }
47 | public bool isAvailable { get; set; }
48 | public string type { get; set; }
49 | }
50 |
51 |
52 | ///
53 | /// Steam response class
54 | ///
55 | public class SteamResponse
56 | {
57 | public bool needCaptcha { get; set; } = true;
58 | public string hash { get; set; }
59 | public string errorMsg { get; set; }
60 | }
61 |
62 |
63 | ///
64 | /// Class for holding proxies and how many uses they've had
65 | ///
66 | public class Proxy
67 | {
68 | public string host { get; set; }
69 | public int port { get; set; }
70 | public int uses { get; set; }
71 | public string steamSessionId { get; set; }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/LowDig/Log.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Collections.Generic;
3 | using System.Threading;
4 | using System.IO;
5 |
6 | namespace LowDig
7 | {
8 | class Log
9 | {
10 | ///
11 | /// Private log variables
12 | ///
13 | private string logPath;
14 | private int logQueueSize;
15 | private List logQueue;
16 |
17 |
18 | ///
19 | /// Class constructor
20 | ///
21 | /// Path to log file
22 | public Log(string LogPath, int QueueSize)
23 | {
24 | /*Initialize log variables*/
25 | logQueue = new List();
26 | logPath = LogPath;
27 | logQueueSize = QueueSize;
28 |
29 | /*Create log file if it doesn't exist already*/
30 | if (!File.Exists(logPath))
31 | {
32 | File.Create(logPath).Close();
33 | Console.WriteLine("Log file created");
34 | Thread.Sleep(250);
35 | }
36 | }
37 |
38 |
39 | ///
40 | /// Write an account to queue to be flushed and written to file later
41 | ///
42 | /// Account to log
43 | public void Write(Config.Account account)
44 | {
45 | /*Write notice*/
46 | Console.WriteLine("Found account: {0}", account.username);
47 |
48 | /*Add account to queue*/
49 | string logMessage = string.Format("{0}\n{1}\n{2}\n",
50 | account.username,
51 | account.email,
52 | account.steamid);
53 | logQueue.Add(logMessage);
54 | FlushLog();
55 | }
56 |
57 |
58 | ///
59 | /// Flushed the log queue to file
60 | ///
61 | /// If true, flush regardless of queue sie
62 | public void FlushLog(bool ignoreCondition = false)
63 | {
64 | /*If we don't have enough entries to flush, return*/
65 | if (ignoreCondition || logQueue.Count < logQueueSize)
66 | return;
67 |
68 | /*Log entries*/
69 | lock (logQueue)
70 | {
71 | using (FileStream fs = File.Open(logPath, FileMode.Append, FileAccess.Write))
72 | {
73 | using (StreamWriter sw = new StreamWriter(fs))
74 | {
75 | foreach (var str in logQueue)
76 | {
77 | sw.WriteLine(str);
78 | }
79 |
80 | logQueue.Clear();
81 | }
82 | }
83 | }
84 | }
85 | }
86 | }
87 |
--------------------------------------------------------------------------------
/LowDig/LowDig.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Debug
6 | AnyCPU
7 | {367AE931-F53C-4A3A-89E3-9DCFE69319ED}
8 | Exe
9 | Properties
10 | LowDig
11 | LowDig
12 | v4.5.2
13 | 512
14 | true
15 |
16 |
17 | AnyCPU
18 | true
19 | full
20 | false
21 | bin\Debug\
22 | DEBUG;TRACE
23 | prompt
24 | 4
25 |
26 |
27 | AnyCPU
28 | pdbonly
29 | true
30 | bin\Release\
31 | TRACE
32 | prompt
33 | 4
34 |
35 |
36 |
37 | False
38 | .\Newtonsoft.Json.dll
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
71 |
--------------------------------------------------------------------------------
/LowDig/Steam.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Net;
3 | using System.IO;
4 | using Newtonsoft.Json;
5 |
6 | namespace LowDig
7 | {
8 | static class Steam
9 | {
10 | ///
11 | /// Private variables
12 | ///
13 | private static CookieContainer mCookies = new CookieContainer();
14 |
15 |
16 | ///
17 | /// Gets the steam session
18 | ///
19 | public static string GetSession(Config.Proxy proxy)
20 | {
21 | /*Start the request*/
22 | var webAdd = "https://help.steampowered.com";
23 | var webReq = (HttpWebRequest)WebRequest.Create(webAdd);
24 |
25 | /*Add nessesary information to the request so it will be accepted as a legit request*/
26 | webReq.ContentType = "application/json; charset=utf-8";
27 | webReq.Method = "GET";
28 | webReq.Host = "help.steampowered.com";
29 | webReq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
30 | webReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
31 | webReq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
32 | webReq.KeepAlive = true;
33 | webReq.CookieContainer = mCookies;
34 | webReq.Proxy = new WebProxy(proxy.host, proxy.port);
35 |
36 | /*Read the response*/
37 | var httpResponse = (HttpWebResponse)webReq.GetResponse();
38 | using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
39 | {
40 | /*Scrape all the session details we need to make dirty api requests*/
41 | var result = streamReader.ReadToEnd();
42 | return Functions.GetStringBetween(result, "g_sessionID = \"", "\";");
43 | }
44 | }
45 |
46 |
47 | ///
48 | /// If a steam account is available
49 | ///
50 | /// email to check
51 | /// 0 = unavailable, 1 = need captcha, 2 = success, 3 = timeout, 4 = error
52 | public static int IsAvailable(string address, Config.Proxy proxy)
53 | {
54 | try
55 | {
56 | /*Start the request*/
57 | var webAdd = string.Format("https://help.steampowered.com/wizard/AjaxLoginInfoSearch?nav=&search={0}&captchagid=&captcha_text=&sessionid={1}", address, proxy.steamSessionId);
58 | var webReq = (HttpWebRequest)WebRequest.Create(webAdd);
59 |
60 | /*Add nessesary information to the request so it will be accepted as a legit request*/
61 | webReq.ContentType = "application/json; charset=utf-8";
62 | webReq.Method = "GET";
63 | webReq.Host = "help.steampowered.com";
64 | webReq.Accept = "*/*";
65 | webReq.Referer = "https://help.steampowered.com/";
66 | webReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
67 | webReq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
68 | webReq.KeepAlive = true;
69 | webReq.CookieContainer = mCookies;
70 | webReq.Timeout = 10000;
71 | webReq.Proxy = new WebProxy(proxy.host, proxy.port);
72 |
73 | /*Parse the json response we receive here*/
74 | var httpResponse = (HttpWebResponse)webReq.GetResponse();
75 | using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
76 | {
77 | /*Deserialize the response and return if the email is available or not*/
78 | var result = streamReader.ReadToEnd();
79 | var resp = JsonConvert.DeserializeObject(result);
80 |
81 | /*We need captcha, so we'll keep the account in queue and try with a different ip*/
82 | if (resp.needCaptcha) { return 1; }
83 |
84 | /*No error, that means the account is available*/
85 | if (string.IsNullOrWhiteSpace(resp.errorMsg)) { return 2; }
86 |
87 | /*Account not available*/
88 | return 0;
89 | }
90 | }
91 | catch(WebException e)
92 | {
93 | if (e.Status == WebExceptionStatus.Timeout)
94 | {
95 | return 3;
96 | }
97 |
98 | return 4;
99 | }
100 | }
101 | }
102 | }
103 |
--------------------------------------------------------------------------------
/LowDig/Hotmail.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Text.RegularExpressions;
3 | using System.Net;
4 | using System.IO;
5 | using Newtonsoft.Json;
6 |
7 | namespace LowDig
8 | {
9 | static class Hotmail
10 | {
11 | ///
12 | /// Request class
13 | /// This holds all the information nessesary to talk to hotmail
14 | ///
15 | private class request
16 | {
17 | public string signInName { get; set; }
18 | public string uaid { get; set; }
19 | public bool performDisambigCheck { get; set; } = true;
20 | public bool includeSuggestions { get; set; } = true;
21 | public int uiflvr { get; set; }
22 | public int scid { get; set; }
23 | public int hpgid { get; set; }
24 | }
25 |
26 |
27 | ///
28 | /// Private variables
29 | ///
30 | private static CookieContainer mCookies = new CookieContainer();
31 | private static request mRequest = new request();
32 | private static string mApiCanary;
33 |
34 |
35 | ///
36 | /// Gets the session from hotmail
37 | ///
38 | public static void GetSession()
39 | {
40 | /*Start the request*/
41 | var webAdd = "https://signup.live.com/signup.aspx?lic=1";
42 | var webReq = (HttpWebRequest)WebRequest.Create(webAdd);
43 |
44 | /*Add nessesary information to the request so it will be accepted as a legit request*/
45 | webReq.ContentType = "application/json; charset=utf-8";
46 | webReq.Method = "GET";
47 | webReq.Host = "signup.live.com";
48 | webReq.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
49 | webReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
50 | webReq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
51 | webReq.KeepAlive = true;
52 | webReq.CookieContainer = mCookies;
53 |
54 | /*Read the response*/
55 | var httpResponse = (HttpWebResponse)webReq.GetResponse();
56 | using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
57 | {
58 | /*Scrape all the session details we need to make dirty api requests*/
59 | var result = streamReader.ReadToEnd();
60 | mRequest.uaid = Functions.GetStringBetween(result, "\"uaid\":\"", "\",");
61 | mRequest.uiflvr = Convert.ToInt32(Functions.GetStringBetween(result, "\"uiflvr\":", ","));
62 | mRequest.scid = Convert.ToInt32(Functions.GetStringBetween(result, "\"scid\":", ","));
63 | mRequest.hpgid = Convert.ToInt32(Functions.GetStringBetween(result, "\"hpgid\":", ","));
64 | mApiCanary = Regex.Unescape(Functions.GetStringBetween(result, "\"apiCanary\":\"", "\","));
65 | Console.WriteLine("Got Hotmail session");
66 | }
67 | }
68 |
69 |
70 | ///
71 | /// Searches if the
72 | ///
73 | /// hotmail address to check
74 | /// Returns true if available
75 | public static bool IsAvailable(string address)
76 | {
77 | try
78 | {
79 | /*Start the request*/
80 | Config.HotmailResponse resp = null;
81 | int attempts = 0;
82 |
83 | do
84 | {
85 | var webAdd = string.Format("https://signup.live.com/API/CheckAvailableSigninNames?uaid={0}&lic=1", mRequest.uaid);
86 | var webReq = (HttpWebRequest)WebRequest.Create(webAdd);
87 |
88 | /*Add nessesary information to the request so it will be accepted as a legit request*/
89 | webReq.ContentType = "application/json; charset=utf-8";
90 | webReq.Method = "POST";
91 | webReq.Host = "signup.live.com";
92 | webReq.Accept = "application/json";
93 | webReq.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36";
94 | webReq.ContentType = "application/x-www-form-urlencoded; charset=UTF-8";
95 | webReq.KeepAlive = true;
96 | webReq.CookieContainer = mCookies;
97 | webReq.Headers["canary"] = mApiCanary;
98 | webReq.Timeout = 10000;
99 |
100 | /*We'll write the deserialized request class here*/
101 | using (var streamWriter = new StreamWriter(webReq.GetRequestStream()))
102 | {
103 | /*Set up new request class with email*/
104 | var req = new request();
105 | req = mRequest;
106 | req.signInName = address;
107 |
108 | /*Write the values*/
109 | string json = JsonConvert.SerializeObject(req);
110 | streamWriter.Write(json);
111 | streamWriter.Flush();
112 | }
113 |
114 | /*Parse the json response we receive here*/
115 | var httpResponse = (HttpWebResponse)webReq.GetResponse();
116 | using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
117 | {
118 | /*Deserialize the response and return if the email is available or not*/
119 | var result = streamReader.ReadToEnd();
120 | resp = JsonConvert.DeserializeObject(result);
121 | if (resp.error != null)
122 | {
123 | /*Need to refresh our session*/
124 | GetSession();
125 | attempts++;
126 | resp = null;
127 | }
128 | else
129 | {
130 | /*Set the new api string and return if account is free*/
131 | mApiCanary = resp.apiCanary;
132 | }
133 | }
134 | }
135 | while (resp == null && attempts <= 3);
136 | return resp.isAvailable;
137 | }
138 | catch
139 | {
140 | return false;
141 | }
142 | }
143 | }
144 | }
145 |
--------------------------------------------------------------------------------
/LowDig/Session.cs:
--------------------------------------------------------------------------------
1 | using System;
2 | using System.Net;
3 | using System.Threading;
4 | using System.Collections.Generic;
5 | using System.IO;
6 | using System.Linq;
7 |
8 | namespace LowDig
9 | {
10 | class Session
11 | {
12 | ///
13 | /// Private variables
14 | ///
15 | private List mAccountQueue = new List();
16 | private List mProxies = new List();
17 | private static Random mRandom = new Random();
18 | private Config.Settings mSettings;
19 | private Thread mSearchThread;
20 | private Semaphore mSem;
21 | private Log mLog;
22 |
23 |
24 | ///
25 | /// Public variables
26 | ///
27 | public int mAccountsFound;
28 |
29 |
30 | ///
31 | /// Class constructor
32 | ///
33 | public Session(Config.Settings settings)
34 | {
35 | /*Initialize globals*/
36 | mSettings = settings;
37 | mLog = new Log("accounts.txt", 1);
38 | //LoadProxies(); not needed for hotmail only
39 |
40 | /*Start our main thread*/
41 | mSearchThread = new Thread(Work);
42 | mSearchThread.Start();
43 | }
44 |
45 |
46 | ///
47 | /// Loads all proxies from proxies.txt
48 | ///
49 | private void LoadProxies()
50 | {
51 | string content = File.ReadAllText("proxies.txt");
52 | using (StringReader reader = new StringReader(content))
53 | {
54 | string line;
55 | while ((line = reader.ReadLine()) != null)
56 | {
57 | if (line.Length < 4 || !line.Contains(":"))
58 | continue;
59 |
60 | string[] split = line.Split(':');
61 | mProxies.Add(new Config.Proxy()
62 | {
63 | host = split[0],
64 | port = Convert.ToInt32(split[1]),
65 | uses = 2 /*We get 2 tries per proxy*/
66 | });
67 | }
68 | }
69 | }
70 |
71 |
72 | ///
73 | /// Search thread function
74 | /// This will search for accounts using three seperate threads
75 | ///
76 | private void Work()
77 | {
78 | /*Initialize our semapore with the settings that was passed*/
79 | mSem = new Semaphore(mSettings.requestLimit, mSettings.requestLimit);
80 | Hotmail.GetSession();
81 |
82 | /*Go through the steam accounts*/
83 | for (int i = mSettings.startId; i < mSettings.endId; i++)
84 | {
85 | mSem.WaitOne();
86 | QueryProfile(0, i);
87 | QueryProfile(1, i);
88 | }
89 |
90 | /*Done checking*/
91 | Console.WriteLine("\n\nFinished");
92 | mLog.FlushLog(true);
93 | }
94 |
95 |
96 | ///
97 | /// Queries a steam profile async
98 | /// Passes response to ParseResponse()
99 | ///
100 | /// Steam account server (0 or 1)
101 | /// Steam Digit to query (ex 6000)
102 | private void QueryProfile(int server, int steamDigit)
103 | {
104 | try
105 | {
106 | /*Set up local vars for request*/
107 | string steamId = string.Format("STEAM_0:{0}:{1}", server, steamDigit);
108 | string steamId64 = Functions.ConvertToSteam64(steamId);
109 | string communityUrl = string.Format("http://steamcommunity.com/profiles/{0}", steamId64);
110 |
111 | /*Download page async*/
112 | Console.WriteLine("Checking {0} ...", steamId);
113 | using (WebClient wc = new WebClient())
114 | {
115 | wc.DownloadStringCompleted += (sender, e) => { ParseResponse(sender, e, steamId); };
116 | wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
117 | wc.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
118 | wc.DownloadStringAsync(new Uri(communityUrl));
119 | }
120 | }
121 | catch(WebException ex)
122 | {
123 | Console.WriteLine("WebException: {0}", ex.Message);
124 | }
125 | }
126 |
127 |
128 | ///
129 | /// Checks if an e-mail address is okay
130 | ///
131 | /// address to check
132 | ///
133 | private bool IsEmailGood(string address)
134 | {
135 | if (!Functions.IsProperEmail(address))
136 | return false;
137 |
138 | if (mSettings.checkHotmail && !Hotmail.IsAvailable(address))
139 | return false;
140 |
141 | return true;
142 | }
143 |
144 |
145 | ///
146 | /// Parses the response from query
147 | ///
148 | /// Sender
149 | /// EventArgs - we get page source from result
150 | private void ParseResponse(object o, DownloadStringCompletedEventArgs e, string steamId)
151 | {
152 | try
153 | {
154 | string pageSource = e.Result;
155 | if (pageSource.Contains("This user has not yet set up their Steam Community profile."))
156 | {
157 | /*Get the account name from page title*/
158 | string accountName = Functions.GetStringBetween(pageSource, "", "")
159 | .Replace("Steam Community :: ", "");
160 |
161 | if (!string.IsNullOrEmpty(accountName) && accountName.Length >= 3)
162 | {
163 | /*Format email and check if it looks okay*/
164 | string accountEmail = string.Format("{0}@hotmail.com", accountName);
165 |
166 | /*If the email is valid and not taken*/
167 | if (IsEmailGood(accountEmail))
168 | {
169 | /*Set up the account*/
170 | var account = new Config.Account()
171 | {
172 | steamid = steamId,
173 | username = accountName,
174 | email = accountEmail
175 | };
176 |
177 | mLog.Write(account);
178 | mAccountsFound++;
179 | }
180 | }
181 | }
182 | }
183 | catch(Exception ex)
184 | {
185 | Console.WriteLine("Exception: {0}", ex.Message);
186 | }
187 |
188 | /*Release queue position*/
189 | mSem.Release();
190 | }
191 | }
192 | }
193 |
--------------------------------------------------------------------------------