├── .gitignore ├── README.md ├── main.py ├── requirements.txt ├── resources ├── account.py └── profiler.py ├── solver.py └── utils └── logger.py /.gitignore: -------------------------------------------------------------------------------- 1 | __pycache__/ 2 | accounts.txt 3 | emails.txt 4 | proxies.txt 5 | run.bat 6 | ffmpeg.exe 7 | payload.mp3 8 | test.py 9 | holymackerel.txt 10 | thing.txt 11 | proxy_auth_plugin.zip 12 | joinsteam.js 13 | hi.py 14 | config.json 15 | accounts.txt 16 | start.bat 17 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Steam-Generator 2 | An automatic request based steam account generator, automatically verifies emails with IMAP, not finished. 3 | 4 | # How to use 5 | 6 | **WILL NOT WORK WITHOUT API KEY** 7 | 8 | Put your [capmonster](https://www.capmonster.com) key in the config.json 9 | 10 | # Credits 11 | 12 | [Robi](https://github.com/Robiftp) 13 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from resources.account import Account 2 | from utils.logger import Logger 3 | from itertools import cycle 4 | import random, threading, json, os 5 | 6 | count = 0 7 | 8 | class Main(): 9 | def __init__(self) -> None: 10 | try: 11 | with open('config.json', 'r') as f: 12 | self.config = json.loads(f.read()) 13 | except FileNotFoundError: 14 | with open('config.json', 'w') as f: 15 | default_config = { 16 | 'proxy': 'PROXIES_FILE_OR_PROXY_HERE', 17 | 'proxy_type': 'http', 18 | 'threads': 0, 19 | 'capmonster': 'API_KEY_HERE', 20 | 'save_file': "accounts.txt", 21 | 'emails_file': 'emails.txt' 22 | } 23 | f.write(json.dumps(default_config, indent=4)) 24 | self.config = default_config 25 | 26 | def main(self): 27 | 28 | emails = cycle(open(self.config['emails_file']).read().splitlines()) 29 | while True: 30 | global count 31 | try: 32 | count += 1 33 | email = next(emails) 34 | account_mail = email.split(":")[0] 35 | account_pass = email.split(":")[1] 36 | if os.path.exists(self.config['proxy']): 37 | proxy = random.choice(open(self.config['proxy']).read().splitlines()) 38 | else: 39 | proxy = self.config['proxy'] 40 | username, password = Account(proxy, account_mail, account_pass).create_account() 41 | with open(self.config['save_file'], 'a+') as f: 42 | f.write(f"{username}:{password}\n") 43 | Logger("Generated account", f"{username}:{password} [{count}]").log_default() 44 | except Exception as e: 45 | Logger(f'Failed to generate account [{count}]', e).log_error() 46 | 47 | INSTANCE = Main() 48 | ASCII_ART = """ 49 | /$$$$$$ /$$$$$$$$ /$$$$$$$ /$$$$$$ /$$$$$$ /$$$$$$ /$$ /$$ /$$$$$$ /$$$$$$$$ /$$ /$$ 50 | /$$__ $$| $$_____/| $$__ $$|_ $$_/ /$$__ $$ /$$__ $$| $$$ | $$ /$$__ $$| $$_____/| $$$ | $$ 51 | | $$ \ $$| $$ | $$ \ $$ | $$ | $$ \__/| $$ \ $$| $$$$| $$ | $$ \__/| $$ | $$$$| $$ 52 | | $$$$$$$$| $$$$$ | $$$$$$$/ | $$ | $$ | $$$$$$$$| $$ $$ $$ | $$ /$$$$| $$$$$ | $$ $$ $$ 53 | | $$__ $$| $$__/ | $$__ $$ | $$ | $$ | $$__ $$| $$ $$$$ | $$|_ $$| $$__/ | $$ $$$$ 54 | | $$ | $$| $$ | $$ \ $$ | $$ | $$ $$| $$ | $$| $$\ $$$ | $$ \ $$| $$ | $$\ $$$ 55 | | $$ | $$| $$ | $$ | $$ /$$$$$$| $$$$$$/| $$ | $$| $$ \ $$ | $$$$$$/| $$$$$$$$| $$ \ $$ 56 | |__/ |__/|__/ |__/ |__/|______/ \______/ |__/ |__/|__/ \__/ \______/ |________/|__/ \__/ 57 | """ 58 | if __name__ == '__main__': 59 | print(ASCII_ART) 60 | inp = int(input("[!] Enter how many threads you want: ")) if INSTANCE.config['threads'] == 0 else INSTANCE.config['threads'] 61 | Logger('African Gen', f"Starting to generate accounts on {inp} threads").log_default() 62 | for _ in range(int(inp)): 63 | threading.Thread(target=INSTANCE.main).start() 64 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | anyio==3.6.2 2 | autopep8==2.0.2 3 | beautifulsoup4==4.11.2 4 | bs4==0.0.1 5 | certifi==2022.12.7 6 | charset-normalizer==3.0.1 7 | h11==0.14.0 8 | httpcore==0.16.3 9 | httpx==0.23.3 10 | idna==3.4 11 | pycodestyle==2.10.0 12 | requests==2.28.2 13 | rfc3986==1.5.0 14 | sniffio==1.3.0 15 | soupsieve==2.4 16 | tomli==2.0.1 17 | urllib3==1.26.14 18 | -------------------------------------------------------------------------------- /resources/account.py: -------------------------------------------------------------------------------- 1 | from solver import Solver 2 | from bs4 import BeautifulSoup 3 | import time, requests, secrets, imaplib, email, time, random 4 | from utils.logger import Logger 5 | 6 | 7 | class Account(): 8 | def __init__(self, proxy, mail, password): 9 | self.proxy = proxy 10 | self.accountmail = mail 11 | self.accountpassword = password 12 | self.session = requests.Session() 13 | self.session.proxies = {'http': proxy, 'https': proxy} 14 | self.sessionid = None 15 | self.imap = imaplib.IMAP4_SSL("outlook.office365.com") 16 | 17 | def register_account(self): 18 | r = self.session.get('https://store.steampowered.com/join/refreshcaptcha') 19 | start = time.time() 20 | captcha_key = Solver(r.json()['s']).solve_captcha() 21 | took = int(time.time() - start) * 1000 22 | 23 | Logger(f'Solved Captcha', f'({took}ms) {captcha_key[:50]}...').log_success() 24 | 25 | data = { 26 | 'email': self.accountmail, 27 | 'captchagid' : r.json()['gid'], 28 | 'captcha_text' : captcha_key, 29 | 'elang' : 0 30 | } 31 | r = self.session.post('https://store.steampowered.com/join/ajaxverifyemail', data=data) 32 | if r.json().get('sessionid') is None or r.json().get('sessionid') == '': 33 | return self.register_account() 34 | return r.json().get('sessionid') 35 | 36 | def create_account(self): 37 | self.sessionid = self.register_account() 38 | Logger('Session ID', f'{self.sessionid}').log_default() 39 | self.imap.login(self.accountmail, self.accountpassword) 40 | while not self.verify_email(): 41 | time.sleep(0.5) 42 | username, password = f"AfricanGen{secrets.token_hex(6)}", secrets.token_hex(12) 43 | data = { 44 | "accountname": username, 45 | "password": password, 46 | "count": 0, 47 | "lt": 0, 48 | "creation_sessionid": self.sessionid, 49 | "embedded_appid": 0, 50 | } 51 | r = self.session.post('https://store.steampowered.com/join/createaccount', data=data, headers={'Content-Type': 'application/x-www-form-urlencoded'}) 52 | return username, password 53 | # return self.sessionid, r.cookies 54 | 55 | def verify_email(self): 56 | try: 57 | self.imap.select("inbox") 58 | status, messages = self.imap.search( 59 | None, 'UNSEEN', 'SUBJECT "New Steam Account Email Verification"') 60 | if status == "OK": 61 | messages = messages[0].split() 62 | 63 | emails = [] 64 | for message in messages: 65 | status, data = self.imap.fetch(message, "(RFC822)") 66 | if status == "OK": 67 | emails.append(email.message_from_bytes(data[0][1])) 68 | 69 | emails.sort(key=lambda x: x["Date"], reverse=True) 70 | 71 | for part in emails[0].walk(): 72 | if part.get_content_type() == "text/html": 73 | html = part.get_payload(decode=True) 74 | link = BeautifulSoup(html, "html.parser").find("a", class_="link c-grey4") 75 | if not link: return False 76 | self.session.get(link["href"]).raise_for_status() 77 | Logger("Verified account", f"{self.accountmail}:{self.accountpassword}").log_success() 78 | return True 79 | return False 80 | except IndexError: 81 | pass 82 | except Exception as e: 83 | Logger('Failed to verify email', e).log_error() -------------------------------------------------------------------------------- /resources/profiler.py: -------------------------------------------------------------------------------- 1 | from account import Account 2 | from bs4 import BeautifulSoup 3 | import time, requests, secrets, imaplib, email, time, random 4 | 5 | 6 | class Profile(Account): 7 | def notfinished(): 8 | print("not finished") # soon:tm: 9 | -------------------------------------------------------------------------------- /solver.py: -------------------------------------------------------------------------------- 1 | import requests, json 2 | 3 | 4 | 5 | class Solver(): 6 | def __init__(self, data_s) -> None: 7 | self.data_s = data_s 8 | try: 9 | with open('config.json', 'r') as f: 10 | self.api_key = json.loads(f.read())['capmonster'] 11 | except Exception as e: 12 | self.api_key = 'wtf' 13 | 14 | def ob_task_id(self): 15 | json = { 16 | "clientKey": self.api_key, 17 | "task": 18 | { 19 | "type":"RecaptchaV2EnterpriseTask", 20 | "websiteURL":"https://store.steampowered.com/join", 21 | "websiteKey":"6LdIFr0ZAAAAAO3vz0O0OQrtAefzdJcWQM2TMYQH", 22 | "proxyType":"http", 23 | "proxyAddress":"p.webshare.io", 24 | "proxyPort":9999, 25 | "userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.132 Safari/537.36", 26 | "apiDomain": "www.recaptcha.net", 27 | "enterprisePayload": { 28 | "s": self.data_s 29 | }, 30 | } 31 | } 32 | return requests.post('https://api.capmonster.cloud/createTask', json=json).json() 33 | 34 | def solve_captcha(self): 35 | task = self.ob_task_id().get("taskId") 36 | while True: 37 | captchaData = requests.post(f"https://api.capmonster.cloud/getTaskResult", json={"clientKey": self.api_key, "taskId": task}, timeout=30).json() 38 | if "processing" in captchaData: 39 | pass 40 | else: 41 | try: 42 | return captchaData.get("solution").get("gRecaptchaResponse") 43 | except Exception: 44 | # print("Failed.") 45 | continue -------------------------------------------------------------------------------- /utils/logger.py: -------------------------------------------------------------------------------- 1 | import sys, colr 2 | 3 | class Logger(): 4 | def __init__(self, text, resp): 5 | self.text = text 6 | self.resp = resp 7 | 8 | def log_default(self): 9 | sys.stdout.write(colr.color(f"[*] {self.text} -> {self.resp}\n",fore='yellow', style='bright')) 10 | sys.stdout.flush() 11 | 12 | def log_success(self): 13 | sys.stdout.write(colr.color(f"[$] {self.text} -> {self.resp}\n",fore='green', style='bright')) 14 | sys.stdout.flush() 15 | 16 | def log_error(self): 17 | sys.stdout.write(colr.color(f"[!] {self.text} -> {self.resp}\n",fore='red', style='bright')) 18 | sys.stdout.flush() --------------------------------------------------------------------------------