#!/usr/bin/env python3 """ DARKSINT - Advanced OSINT Reconnaissance Platform A comprehensive, overpowered OSINT tool with modern GUI 100% FREE - No API Keys Required """ import tkinter as tk from tkinter import ttk, scrolledtext, messagebox, filedialog import threading import socket import json import requests from datetime import datetime import re import subprocess import whois import dns.resolver import nmap from urllib.parse import urlparse, quote import hashlib import base64 from concurrent.futures import ThreadPoolExecutor, as_completed import os import sys import time from bs4 import BeautifulSoup import urllib3 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) class DarkSINT: def __init__(self, root): self.root = root self.root.title("⚔ DARKSINT - Advanced OSINT Platform") self.root.geometry("1600x1000") self.root.configure(bg='#0a0a0a') # Enhanced style configuration self.style = ttk.Style() self.style.theme_use('clam') self.configure_styles() # Main container self.main_frame = tk.Frame(root, bg='#0a0a0a') self.main_frame.pack(fill=tk.BOTH, expand=True, padx=10, pady=10) # Header self.create_header() # Content area with tabs self.create_tabs() # Status bar self.create_status_bar() # Results storage self.results = {} # Massive subdomain wordlist (1000+ entries) self.massive_subdomain_list = self.load_massive_subdomain_list() def load_massive_subdomain_list(self): """Load massive subdomain wordlist for aggressive enumeration""" return [ 'www', 'mail', 'ftp', 'localhost', 'webmail', 'smtp', 'pop', 'ns1', 'webdisk', 'ns2', 'cpanel', 'whm', 'autodiscover', 'autoconfig', 'm', 'imap', 'test', 'ns', 'blog', 'pop3', 'dev', 'www2', 'admin', 'forum', 'news', 'vpn', 'ns3', 'mail2', 'new', 'mysql', 'old', 'lists', 'support', 'mobile', 'mx', 'static', 'docs', 'beta', 'shop', 'sql', 'secure', 'demo', 'cp', 'calendar', 'wiki', 'web', 'media', 'email', 'images', 'img', 'www1', 'intranet', 'portal', 'video', 'sip', 'dns2', 'api', 'cdn', 'stats', 'dns1', 'ns4', 'www3', 'dns', 'search', 'staging', 'server', 'mx1', 'chat', 'wap', 'my', 'svn', 'mail1', 'sites', 'proxy', 'ads', 'host', 'crm', 'cms', 'backup', 'mx2', 'lyncdiscover', 'info', 'apps', 'download', 'remote', 'db', 'forums', 'store', 'relay', 'files', 'newsletter', 'app', 'live', 'owa', 'en', 'start', 'sms', 'office', 'exchange', 'ipv4', 'git', 'uploads', 'stage', 'dashboard', 'api2', 'production', 'sandbox', # Extended list - making it much more aggressive 'develop', 'development', 'devtest', 'internal', 'corp', 'gateway', 'gw', 'helpdesk', 'help', 'home', 'id', 'invoice', 'lab', 'labs', 'linux', 'local', 'log', 'logger', 'logs', 'manage', 'manager', 'master', 'monitor', 'monitoring', 'net', 'network', 'ns5', 'ns6', 'ops', 'opsec', 'partner', 'partners', 'pay', 'payment', 'payments', 'preprod', 'preview', 'private', 'prod', 'public', 'qa', 'reports', 'root', 'sales', 'sftp', 'share', 'shop2', 'shop3', 'sso', 'ssl', 'staff', 'sys', 'system', 'temp', 'tmp', 'tools', 'uat', 'update', 'updates', 'upload', 'us', 'v2', 'vc', 'vpn2', 'web1', 'web2', 'webconf', 'webdav', 'webservices', 'webstats', 'ws', 'www4', 'www5', 'www6', 'www7', 'zimbra', 'zone', # Cloud & modern infrastructure 'jenkins', 'jira', 'gitlab', 'github', 'bitbucket', 'grafana', 'kibana', 'prometheus', 'docker', 'k8s', 'kubernetes', 'rancher', 'portainer', 'traefik', 'consul', 'vault', 'redis', 'postgres', 'mongodb', 'elastic', 'elasticsearch', 'kafka', 'rabbit', 'rabbitmq', # Admin & management 'admin2', 'administrator', 'admins', 'backend', 'console', 'control', 'cpanel2', 'database', 'db2', 'dbadmin', 'direct', 'directadmin', 'dnsconsole', 'erp', 'fileserver', 'fms', 'login', 'mgmt', 'nagios', 'panel', 'pma', 'phpmyadmin', 'plesk', 'postgres', 'roundcube', 'sentry', 'smtp2', 'smtp3', 'sql2', # Services & applications 'api-dev', 'api-prod', 'api-staging', 'api3', 'app2', 'app3', 'application', 'auth', 'autodiscover2', 'autoconfig2', 'billing', 'cloud', 'config', 'confluence', 'customer', 'data', 'devops', 'directory', 'doc', 'documentation', 'download2', 'downloads', 'drupal', 'finance', 'graphql', 'hr', 'jenkins2', 'joomla', 'kb', 'moodle', 'nextcloud', 'node', 'owncloud', 'redmine', 'rest', 'rocketchat', 'service', 'services', 'slack', 'sonar', 'sonarqube', 'status', 'teams', 'track', 'tracking', 'upload2', 'varnish', 'web3', 'webapi', 'webservice', 'wordpress', 'wp', # Geographic & language variants 'us-east', 'us-west', 'eu', 'eu-west', 'asia', 'ap', 'apac', 'ca', 'uk', 'de', 'fr', 'es', 'it', 'br', 'jp', 'au', 'in', 'cn', 'sg', 'hk', # Numbers and common patterns '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'web01', 'web02', 'web03', 'srv1', 'srv2', 'srv3', 'server1', 'server2', 'host1', 'host2', 'db01', 'db02', 'app01', 'app02', 'mail01', 'mail02', 'ns01', 'ns02', # Security & testing 'test2', 'test3', 'testing', 'pentest', 'security', 'scan', 'scanner', 'nessus', 'qualys', 'acunetix', 'burp', 'metasploit', 'kali', 'hackerlab', 'ctf', # Mobile & regional 'android', 'ios', 'mobile2', 'm2', 'amp', 'go', 'i', 'wap2', 'mobi', # E-commerce & payment 'shop4', 'cart', 'checkout', 'order', 'orders', 'product', 'products', 'catalog', 'invoice2', 'invoices', 'transaction', 'transactions', 'merchant', 'stripe', 'paypal', # Communication 'meet', 'meeting', 'webex', 'zoom', 'skype', 'conference', 'video2', 'call', 'voip', 'pbx', 'asterisk', 'freepbx', # CMS & frameworks 'magento', 'shopify', 'prestashop', 'woocommerce', 'opencart', 'django', 'flask', 'rails', 'laravel', 'symfony', 'spring', 'express', 'nextjs', 'nuxt', 'gatsby', # Backup & archive 'backup2', 'backups', 'archive', 'archives', 'old2', 'legacy', 'mirror', 'replica', 'bak', 'dump', 'export', 'snapshot', # Special purpose 'assets', 'resources', 'public2', 'content', 'cdn2', 'static2', 'media2', 'img2', 'images2', 'photos', 'gallery', 'pic', 'pics', 'picture', 'pictures', 'thumb', 'thumbs', 'thumbnails', 'avatar', 'avatars', ] def configure_styles(self): """Configure enhanced dark theme styles""" self.style.configure('TNotebook', background='#0a0a0a', borderwidth=0) self.style.configure('TNotebook.Tab', background='#1a1a1a', foreground='#00ff00', padding=[25, 12], font=('JetBrains Mono', 10, 'bold')) self.style.map('TNotebook.Tab', background=[('selected', '#00ff00')], foreground=[('selected', '#000000')]) self.style.configure('TFrame', background='#0a0a0a') self.style.configure('TLabel', background='#0a0a0a', foreground='#00ff00', font=('JetBrains Mono', 10)) self.style.configure('Header.TLabel', font=('JetBrains Mono', 28, 'bold'), foreground='#00ff00') self.style.configure('TButton', background='#00ff00', foreground='#000000', borderwidth=0, font=('JetBrains Mono', 9, 'bold')) self.style.map('TButton', background=[('active', '#00cc00')]) def create_header(self): """Create the header section""" header_frame = ttk.Frame(self.main_frame) header_frame.pack(fill=tk.X, pady=(0, 20)) title = ttk.Label(header_frame, text="⚔ DARKSINT ⚔", style='Header.TLabel') title.pack(side=tk.LEFT) subtitle = ttk.Label(header_frame, text="OVERPOWERED OSINT PLATFORM | 100% FREE | NO API KEYS", font=('JetBrains Mono', 11, 'bold')) subtitle.pack(side=tk.LEFT, padx=(20, 0)) def create_tabs(self): """Create tabbed interface for different OSINT modules""" self.notebook = ttk.Notebook(self.main_frame) self.notebook.pack(fill=tk.BOTH, expand=True) # Create different tabs self.create_domain_tab() self.create_email_tab() self.create_username_tab() self.create_ip_tab() self.create_phone_tab() self.create_crypto_tab() self.create_leaks_tab() self.create_advanced_tab() def create_domain_tab(self): """Enhanced Domain Intelligence Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='🌐 DOMAIN') input_frame = self.create_input_section(frame, "Domain/URL:") self.domain_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="WHOIS", command=lambda: self.run_task(self.whois_lookup, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="DNS Deep Scan", command=lambda: self.run_task(self.dns_deep_scan, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Subdomain Mega Scan", command=lambda: self.run_task(self.subdomain_mega_scan, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="SSL/TLS", command=lambda: self.run_task(self.ssl_info, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Tech Stack", command=lambda: self.run_task(self.tech_stack_detection, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Certificate Transparency", command=lambda: self.run_task(self.cert_transparency_mega, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="FULL RECON", command=lambda: self.run_task(self.full_domain_recon, self.domain_entry.get())).pack(side=tk.LEFT, padx=3) self.domain_output = self.create_output_section(frame) def create_email_tab(self): """Enhanced Email Intelligence Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='šŸ“§ EMAIL') input_frame = self.create_input_section(frame, "Email/Domain:") self.email_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Validate", command=lambda: self.run_task(self.email_validation_deep, self.email_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Breach Mega Search", command=lambda: self.run_task(self.breach_mega_search, self.email_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Email Permutations", command=lambda: self.run_task(self.email_permutations, self.email_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Domain Emails", command=lambda: self.run_task(self.domain_email_harvest, self.email_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Disposable Check", command=lambda: self.run_task(self.disposable_email_check, self.email_entry.get())).pack(side=tk.LEFT, padx=3) self.email_output = self.create_output_section(frame) def create_username_tab(self): """Enhanced Username Intelligence Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='šŸ‘¤ USERNAME') input_frame = self.create_input_section(frame, "Username:") self.username_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Social Media Hunt (50+)", command=lambda: self.run_task(self.username_mega_hunt, self.username_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="GitHub Deep Dive", command=lambda: self.run_task(self.github_deep_dive, self.username_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Gaming Profiles", command=lambda: self.run_task(self.gaming_profile_search, self.username_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Developer Platforms", command=lambda: self.run_task(self.developer_platform_search, self.username_entry.get())).pack(side=tk.LEFT, padx=3) self.username_output = self.create_output_section(frame) def create_ip_tab(self): """Enhanced IP Intelligence Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='šŸ” IP/NETWORK') input_frame = self.create_input_section(frame, "IP/Network:") self.ip_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Geolocation", command=lambda: self.run_task(self.ip_geolocation_multi, self.ip_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Reverse DNS", command=lambda: self.run_task(self.reverse_dns, self.ip_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Aggressive Port Scan", command=lambda: self.run_task(self.aggressive_port_scan, self.ip_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Reputation+Threat Intel", command=lambda: self.run_task(self.ip_reputation_mega, self.ip_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Shodan/Censys Links", command=lambda: self.run_task(self.device_search_engines, self.ip_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="ASN Lookup", command=lambda: self.run_task(self.asn_lookup, self.ip_entry.get())).pack(side=tk.LEFT, padx=3) self.ip_output = self.create_output_section(frame) def create_phone_tab(self): """Enhanced Phone Intelligence Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='šŸ“± PHONE') input_frame = self.create_input_section(frame, "Phone Number:") self.phone_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Deep Analysis", command=lambda: self.run_task(self.phone_deep_analysis, self.phone_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Carrier Intel", command=lambda: self.run_task(self.carrier_intelligence, self.phone_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Social Media Link", command=lambda: self.run_task(self.phone_social_search, self.phone_entry.get())).pack(side=tk.LEFT, padx=3) self.phone_output = self.create_output_section(frame) def create_crypto_tab(self): """Cryptocurrency Intelligence Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='₿ CRYPTO') input_frame = self.create_input_section(frame, "Wallet/Address:") self.crypto_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Bitcoin Lookup", command=lambda: self.run_task(self.bitcoin_lookup, self.crypto_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Ethereum Lookup", command=lambda: self.run_task(self.ethereum_lookup, self.crypto_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Multi-Chain Search", command=lambda: self.run_task(self.crypto_multi_chain, self.crypto_entry.get())).pack(side=tk.LEFT, padx=3) self.crypto_output = self.create_output_section(frame) def create_leaks_tab(self): """Data Leaks & Breaches Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='šŸ”“ LEAKS') input_frame = self.create_input_section(frame, "Search Term:") self.leaks_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Pastebin Search", command=lambda: self.run_task(self.pastebin_search, self.leaks_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="GitHub Dork", command=lambda: self.run_task(self.github_dork_search, self.leaks_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Code Search", command=lambda: self.run_task(self.code_leak_search, self.leaks_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Paste Sites", command=lambda: self.run_task(self.paste_sites_search, self.leaks_entry.get())).pack(side=tk.LEFT, padx=3) self.leaks_output = self.create_output_section(frame) def create_advanced_tab(self): """Advanced Tools Tab""" frame = ttk.Frame(self.notebook) self.notebook.add(frame, text='⚔ ADVANCED') input_frame = self.create_input_section(frame, "Target:") self.advanced_entry = input_frame['entry'] btn_frame = ttk.Frame(frame) btn_frame.pack(pady=10) ttk.Button(btn_frame, text="Google Dork Generator", command=lambda: self.run_task(self.google_dork_mega, self.advanced_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Wayback Deep Scan", command=lambda: self.run_task(self.wayback_deep_scan, self.advanced_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Web Archive Hunt", command=lambda: self.run_task(self.web_archive_hunt, self.advanced_entry.get())).pack(side=tk.LEFT, padx=3) ttk.Button(btn_frame, text="Company Intel", command=lambda: self.run_task(self.company_intelligence, self.advanced_entry.get())).pack(side=tk.LEFT, padx=3) # Export section export_frame = ttk.Frame(frame) export_frame.pack(pady=20) ttk.Button(export_frame, text="šŸ“Š Export JSON", command=self.export_json).pack(side=tk.LEFT, padx=5) ttk.Button(export_frame, text="šŸ“„ Export TXT", command=self.export_txt).pack(side=tk.LEFT, padx=5) ttk.Button(export_frame, text="šŸ“‹ Export HTML Report", command=self.export_html).pack(side=tk.LEFT, padx=5) ttk.Button(export_frame, text="šŸ—‘ļø Clear All", command=self.clear_all).pack(side=tk.LEFT, padx=5) self.advanced_output = self.create_output_section(frame) def create_input_section(self, parent, label_text): """Create a standard input section""" frame = ttk.Frame(parent) frame.pack(pady=20, padx=20, fill=tk.X) ttk.Label(frame, text=label_text, font=('JetBrains Mono', 11, 'bold')).pack(side=tk.LEFT, padx=5) entry = ttk.Entry(frame, width=70, font=('JetBrains Mono', 11)) entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True) return {'frame': frame, 'entry': entry} def create_output_section(self, parent): """Create a standard output section""" output_frame = ttk.Frame(parent) output_frame.pack(pady=10, padx=20, fill=tk.BOTH, expand=True) output = scrolledtext.ScrolledText(output_frame, wrap=tk.WORD, font=('JetBrains Mono', 9), bg='#000000', fg='#00ff00', insertbackground='#00ff00', selectbackground='#003300') output.pack(fill=tk.BOTH, expand=True) return output def create_status_bar(self): """Create status bar at bottom""" self.status_frame = tk.Frame(self.main_frame, bg='#00ff00', height=35) self.status_frame.pack(fill=tk.X, side=tk.BOTTOM, pady=(10, 0)) self.status_label = tk.Label(self.status_frame, text="⚔ READY TO HUNT", bg='#00ff00', fg='#000000', font=('JetBrains Mono', 10, 'bold'), anchor=tk.W) self.status_label.pack(side=tk.LEFT, padx=10) def update_status(self, message): """Update status bar message""" self.status_label.config(text=f"⚔ {message.upper()}") self.root.update_idletasks() def run_task(self, func, *args): """Run a task in a separate thread""" self.update_status(f"RUNNING {func.__name__}...") thread = threading.Thread(target=lambda: self.execute_task(func, *args)) thread.daemon = True thread.start() def execute_task(self, func, *args): """Execute task and handle errors""" try: func(*args) self.update_status("TASK COMPLETED") except Exception as e: self.update_status(f"ERROR: {str(e)}") print(f"Error in {func.__name__}: {str(e)}") def append_output(self, output_widget, text): """Append text to output widget""" output_widget.insert(tk.END, text + "\n") output_widget.see(tk.END) self.root.update_idletasks() def clear_output(self, output_widget): """Clear output widget""" output_widget.delete(1.0, tk.END) # ==================== ENHANCED OSINT FUNCTIONS ==================== def whois_lookup(self, domain): """Enhanced WHOIS lookup""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\nWHOIS DEEP LOOKUP: {domain}\n{'='*100}\n") try: domain = self.extract_domain(domain) w = whois.whois(domain) result = f"\n[+] Domain: {domain}\n" result += f"[+] Registrar: {w.registrar}\n" result += f"[+] Creation Date: {w.creation_date}\n" result += f"[+] Expiration Date: {w.expiration_date}\n" result += f"[+] Updated Date: {w.updated_date}\n" result += f"[+] Name Servers: {w.name_servers}\n" result += f"[+] Status: {w.status}\n" result += f"[+] Emails: {w.emails}\n" result += f"[+] Registrant: {w.name}\n" result += f"[+] Organization: {w.org}\n" result += f"[+] Country: {w.country}\n" result += f"[+] State: {w.state}\n" result += f"[+] City: {w.city}\n" result += f"[+] Address: {w.address}\n" result += f"[+] Postal Code: {w.zipcode}\n" self.append_output(self.domain_output, result) # Calculate domain age if w.creation_date: if isinstance(w.creation_date, list): creation = w.creation_date[0] else: creation = w.creation_date age = (datetime.now() - creation).days self.append_output(self.domain_output, f"\n[!] Domain Age: {age} days ({age//365} years)") self.results['whois'] = {'domain': domain, 'data': dict(w)} except Exception as e: self.append_output(self.domain_output, f"[-] Error: {str(e)}") def dns_deep_scan(self, domain): """Deep DNS enumeration with all record types""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\nDNS DEEP SCAN: {domain}\n{'='*100}\n") domain = self.extract_domain(domain) record_types = ['A', 'AAAA', 'MX', 'NS', 'TXT', 'SOA', 'CNAME', 'PTR', 'SRV', 'CAA', 'DNSKEY', 'DS', 'NAPTR', 'TLSA'] results = {} for record_type in record_types: try: answers = dns.resolver.resolve(domain, record_type) results[record_type] = [] self.append_output(self.domain_output, f"\n[+] {record_type} Records:") for rdata in answers: self.append_output(self.domain_output, f" {rdata}") results[record_type].append(str(rdata)) except Exception: pass # Try zone transfer (usually blocked but worth trying) self.append_output(self.domain_output, f"\n[*] Attempting zone transfer (AXFR)...") try: ns_records = dns.resolver.resolve(domain, 'NS') for ns in ns_records: try: zone = dns.zone.from_xfr(dns.query.xfr(str(ns), domain)) self.append_output(self.domain_output, f"[!] ZONE TRANSFER SUCCESSFUL from {ns}!") for name in zone.nodes.keys(): self.append_output(self.domain_output, f" {name}") except: pass except: self.append_output(self.domain_output, "[*] Zone transfer blocked (expected)") self.results['dns_deep'] = {'domain': domain, 'records': results} def subdomain_mega_scan(self, domain): """MASSIVE subdomain enumeration with 300+ subdomains""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\nSUBDOMAIN MEGA SCAN: {domain}\n{'='*100}\n") domain = self.extract_domain(domain) self.append_output(self.domain_output, f"\n[!] AGGRESSIVE MODE: Scanning {len(self.massive_subdomain_list)} subdomains...") self.append_output(self.domain_output, f"[!] This may take several minutes...\n") found_subdomains = [] def check_subdomain(sub): subdomain = f"{sub}.{domain}" try: answers = dns.resolver.resolve(subdomain, 'A') ips = [str(rdata) for rdata in answers] return subdomain, ips except: return None, None with ThreadPoolExecutor(max_workers=50) as executor: futures = {executor.submit(check_subdomain, sub): sub for sub in self.massive_subdomain_list} for future in as_completed(futures): subdomain, ips = future.result() if subdomain: self.append_output(self.domain_output, f"[+] FOUND: {subdomain} -> {', '.join(ips)}") found_subdomains.append({'subdomain': subdomain, 'ips': ips}) self.append_output(self.domain_output, f"\n{'='*100}") self.append_output(self.domain_output, f"[!] TOTAL SUBDOMAINS FOUND: {len(found_subdomains)}") self.append_output(self.domain_output, f"{'='*100}") self.results['subdomains_mega'] = {'domain': domain, 'found': found_subdomains} def ssl_info(self, domain): """Enhanced SSL/TLS analysis""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\nSSL/TLS DEEP ANALYSIS: {domain}\n{'='*100}\n") domain = self.extract_domain(domain) try: import ssl context = ssl.create_default_context() with socket.create_connection((domain, 443), timeout=10) as sock: with context.wrap_socket(sock, server_hostname=domain) as ssock: cert = ssock.getpeercert() cipher = ssock.cipher() self.append_output(self.domain_output, f"\n[+] SSL/TLS Version: {ssock.version()}") self.append_output(self.domain_output, f"[+] Cipher Suite: {cipher[0]}") self.append_output(self.domain_output, f"[+] Cipher Strength: {cipher[2]} bits") self.append_output(self.domain_output, f"\n[+] Certificate Subject:") for item in cert['subject']: self.append_output(self.domain_output, f" {item}") self.append_output(self.domain_output, f"\n[+] Certificate Issuer:") for item in cert['issuer']: self.append_output(self.domain_output, f" {item}") self.append_output(self.domain_output, f"\n[+] Valid From: {cert['notBefore']}") self.append_output(self.domain_output, f"[+] Valid Until: {cert['notAfter']}") if 'subjectAltName' in cert: self.append_output(self.domain_output, f"\n[+] Subject Alternative Names ({len(cert['subjectAltName'])}):") for san_type, san_value in cert['subjectAltName']: self.append_output(self.domain_output, f" {san_value}") # Check for vulnerabilities self.append_output(self.domain_output, f"\n[!] Security Analysis:") if 'TLSv1.3' in ssock.version() or 'TLSv1.2' in ssock.version(): self.append_output(self.domain_output, f" [āœ“] Modern TLS version") else: self.append_output(self.domain_output, f" [!] OUTDATED TLS version - security risk!") if cipher[2] >= 128: self.append_output(self.domain_output, f" [āœ“] Strong cipher strength") else: self.append_output(self.domain_output, f" [!] WEAK cipher strength!") except Exception as e: self.append_output(self.domain_output, f"[-] Error: {str(e)}") def tech_stack_detection(self, domain): """Detect web technologies and stack""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\nTECH STACK DETECTION: {domain}\n{'='*100}\n") domain = self.extract_domain(domain) url = f"https://{domain}" if not domain.startswith('http') else domain try: headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36' } response = requests.get(url, headers=headers, timeout=10, verify=False) self.append_output(self.domain_output, f"\n[+] HTTP Status: {response.status_code}") # Analyze headers self.append_output(self.domain_output, f"\n[+] Server Headers:") interesting_headers = ['Server', 'X-Powered-By', 'X-AspNet-Version', 'X-AspNetMvc-Version', 'X-Framework', 'X-Generator', 'X-Drupal-Cache', 'X-Varnish'] for header in interesting_headers: if header in response.headers: self.append_output(self.domain_output, f" {header}: {response.headers[header]}") # Analyze HTML html = response.text.lower() self.append_output(self.domain_output, f"\n[+] Technology Detection:") techs = { 'WordPress': ['wp-content', 'wp-includes'], 'Drupal': ['drupal', 'sites/all/modules'], 'Joomla': ['joomla', 'com_content'], 'Django': ['csrfmiddlewaretoken'], 'Laravel': ['laravel'], 'React': ['react', '_react'], 'Vue.js': ['vue', 'vuejs'], 'Angular': ['ng-', 'angular'], 'jQuery': ['jquery'], 'Bootstrap': ['bootstrap'], 'PHP': ['.php', 'phpsessid'], 'ASP.NET': ['__viewstate', 'asp.net'], 'Node.js': ['node'], 'Nginx': ['nginx'], 'Apache': ['apache'], 'Cloudflare': ['cloudflare'], 'Google Analytics': ['google-analytics', 'gtag'], } found_techs = [] for tech, indicators in techs.items(): if any(indicator in html for indicator in indicators): self.append_output(self.domain_output, f" [āœ“] {tech} detected") found_techs.append(tech) # Check cookies if response.cookies: self.append_output(self.domain_output, f"\n[+] Cookies ({len(response.cookies)}):") for cookie in response.cookies: self.append_output(self.domain_output, f" {cookie.name}: {cookie.value[:50]}...") self.append_output(self.domain_output, f"\n[!] Total Technologies Detected: {len(found_techs)}") except Exception as e: self.append_output(self.domain_output, f"[-] Error: {str(e)}") def cert_transparency_mega(self, domain): """Enhanced certificate transparency with multiple sources""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\nCERTIFICATE TRANSPARENCY MEGA SCAN: {domain}\n{'='*100}\n") domain = self.extract_domain(domain) try: # crt.sh API self.append_output(self.domain_output, "\n[*] Querying crt.sh certificate database...\n") url = f"https://crt.sh/?q=%.{domain}&output=json" response = requests.get(url, timeout=20) if response.status_code == 200: certs = response.json() domains = set() for cert in certs: name = cert.get('name_value', '') domains.update(name.split('\n')) # Filter and categorize wildcards = [d for d in domains if d.startswith('*')] regular = [d for d in domains if not d.startswith('*')] self.append_output(self.domain_output, f"[+] Total Unique Domains/Subdomains Found: {len(domains)}\n") if wildcards: self.append_output(self.domain_output, f"\n[+] Wildcard Certificates ({len(wildcards)}):") for d in sorted(wildcards)[:20]: self.append_output(self.domain_output, f" {d}") self.append_output(self.domain_output, f"\n[+] Regular Certificates ({len(regular)}):") for d in sorted(regular)[:100]: self.append_output(self.domain_output, f" {d}") if len(regular) > 100: self.append_output(self.domain_output, f"\n[*] ... and {len(regular)-100} more domains") self.results['cert_transparency'] = {'domain': domain, 'subdomains': list(domains)} except Exception as e: self.append_output(self.domain_output, f"[-] Error: {str(e)}") def full_domain_recon(self, domain): """COMPREHENSIVE domain reconnaissance""" self.clear_output(self.domain_output) self.append_output(self.domain_output, f"{'='*100}\n⚔ FULL DOMAIN RECONNAISSANCE ⚔\n{'='*100}\n") self.append_output(self.domain_output, f"\n[!] Running complete reconnaissance on: {domain}") self.append_output(self.domain_output, f"[!] This will take several minutes...\n") self.whois_lookup(domain) time.sleep(1) self.dns_deep_scan(domain) time.sleep(1) self.ssl_info(domain) time.sleep(1) self.tech_stack_detection(domain) time.sleep(1) self.cert_transparency_mega(domain) time.sleep(1) self.subdomain_mega_scan(domain) self.append_output(self.domain_output, f"\n{'='*100}") self.append_output(self.domain_output, f"[āœ“] FULL DOMAIN RECONNAISSANCE COMPLETED!") self.append_output(self.domain_output, f"{'='*100}") def email_validation_deep(self, email): """Deep email validation""" self.clear_output(self.email_output) self.append_output(self.email_output, f"{'='*100}\nEMAIL DEEP VALIDATION: {email}\n{'='*100}\n") # Format validation email_regex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$' if not re.match(email_regex, email): self.append_output(self.email_output, "[-] INVALID EMAIL FORMAT") return self.append_output(self.email_output, "[āœ“] Email format: VALID") domain = email.split('@')[1] username = email.split('@')[0] self.append_output(self.email_output, f"\n[+] Username: {username}") self.append_output(self.email_output, f"[+] Domain: {domain}") # Check MX records try: mx_records = dns.resolver.resolve(domain, 'MX') self.append_output(self.email_output, f"\n[+] MX Records ({len(list(mx_records))}):") for mx in mx_records: self.append_output(self.email_output, f" {mx.exchange} (Priority: {mx.preference})") self.append_output(self.email_output, "[āœ“] Domain has valid MX records") except: self.append_output(self.email_output, "\n[!] NO MX RECORDS - Email likely invalid or catch-all") # Check A record try: a_records = dns.resolver.resolve(domain, 'A') self.append_output(self.email_output, f"\n[+] Domain A Records:") for a in a_records: self.append_output(self.email_output, f" {a}") except: self.append_output(self.email_output, "\n[-] No A records found") def breach_mega_search(self, email): """Enhanced breach checking from multiple sources""" self.clear_output(self.email_output) self.append_output(self.email_output, f"{'='*100}\nBREACH MEGA SEARCH: {email}\n{'='*100}\n") try: # Have I Been Pwned self.append_output(self.email_output, "\n[*] Checking Have I Been Pwned...\n") url = f"https://haveibeenpwned.com/api/v3/breachedaccount/{email}" headers = {'User-Agent': 'DARKSINT-OSINT-Tool'} response = requests.get(url, headers=headers, timeout=10) if response.status_code == 200: breaches = response.json() self.append_output(self.email_output, f"[!] EMAIL FOUND IN {len(breaches)} BREACHES!\n") for breach in breaches: self.append_output(self.email_output, f"\n[!] Breach: {breach['Name']}") self.append_output(self.email_output, f" Domain: {breach.get('Domain', 'N/A')}") self.append_output(self.email_output, f" Breach Date: {breach.get('BreachDate', 'N/A')}") self.append_output(self.email_output, f" Verified: {breach.get('IsVerified', 'N/A')}") self.append_output(self.email_output, f" Compromised Data: {', '.join(breach.get('DataClasses', []))}") self.append_output(self.email_output, f" Affected Accounts: {breach.get('PwnCount', 'N/A')}") self.results['breach_check'] = {'email': email, 'breaches': breaches} elif response.status_code == 404: self.append_output(self.email_output, "[āœ“] Email NOT found in HIBP database") else: self.append_output(self.email_output, f"[*] HIBP Status: {response.status_code}") # Additional breach search suggestions self.append_output(self.email_output, f"\n[+] Additional Breach Check Resources:") self.append_output(self.email_output, f" • DeHashed: https://dehashed.com/search?query={email}") self.append_output(self.email_output, f" • LeakCheck: https://leakcheck.io/") self.append_output(self.email_output, f" • IntelX: https://intelx.io/") self.append_output(self.email_output, f" • Snusbase: https://snusbase.com/") except Exception as e: self.append_output(self.email_output, f"[-] Error: {str(e)}") def email_permutations(self, name_or_domain): """Generate email permutations for domain""" self.clear_output(self.email_output) self.append_output(self.email_output, f"{'='*100}\nEMAIL PERMUTATION GENERATOR: {name_or_domain}\n{'='*100}\n") if '@' in name_or_domain: domain = name_or_domain.split('@')[1] name = name_or_domain.split('@')[0] else: domain = name_or_domain name = "john.doe" # Example self.append_output(self.email_output, f"\n[*] Generating email permutations for domain: {domain}\n") self.append_output(self.email_output, f"[*] Using example name: {name}\n") # Split name parts = name.replace('.', ' ').replace('-', ' ').split() if len(parts) >= 2: first = parts[0] last = parts[1] else: first = name last = "doe" patterns = [ f"{first}.{last}@{domain}", f"{first}{last}@{domain}", f"{first}_{last}@{domain}", f"{first}-{last}@{domain}", f"{last}.{first}@{domain}", f"{last}{first}@{domain}", f"{first[0]}{last}@{domain}", f"{first}{last[0]}@{domain}", f"{first[0]}.{last}@{domain}", f"{last}.{first[0]}@{domain}", f"{first}@{domain}", f"{last}@{domain}", f"admin@{domain}", f"info@{domain}", f"contact@{domain}", f"support@{domain}", f"sales@{domain}", f"hr@{domain}", f"recruiting@{domain}", f"jobs@{domain}", f"careers@{domain}", f"security@{domain}", f"abuse@{domain}", f"noreply@{domain}", f"hello@{domain}", f"team@{domain}", ] self.append_output(self.email_output, f"[+] Common Email Patterns ({len(patterns)}):\n") for pattern in patterns: self.append_output(self.email_output, f" {pattern}") self.append_output(self.email_output, f"\n[!] Use these emails for validation or enumeration") def domain_email_harvest(self, domain): """Harvest emails from domain using multiple sources""" self.clear_output(self.email_output) self.append_output(self.email_output, f"{'='*100}\nDOMAIN EMAIL HARVESTING: {domain}\n{'='*100}\n") domain = self.extract_domain(domain) self.append_output(self.email_output, f"\n[*] Harvesting emails from: {domain}\n") # Hunter.io-style search suggestions self.append_output(self.email_output, f"[+] Free Email Discovery Tools:") self.append_output(self.email_output, f" • Google Dork: site:{domain} intext:@{domain}") self.append_output(self.email_output, f" • Hunter.io: https://hunter.io/search/{domain}") self.append_output(self.email_output, f" • Snov.io: https://snov.io/email-finder") self.append_output(self.email_output, f" • RocketReach: https://rocketreach.co/") self.append_output(self.email_output, f" • Voila Norbert: https://www.voilanorbert.com/") # Try to scrape from website try: url = f"https://{domain}" headers = {'User-Agent': 'Mozilla/5.0'} response = requests.get(url, headers=headers, timeout=10, verify=False) # Find emails in HTML email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}' emails = re.findall(email_pattern, response.text) if emails: unique_emails = list(set(emails)) self.append_output(self.email_output, f"\n[+] Emails Found on Website ({len(unique_emails)}):") for email in unique_emails: if domain in email: self.append_output(self.email_output, f" {email}") else: self.append_output(self.email_output, f"\n[-] No emails found in HTML source") except Exception as e: self.append_output(self.email_output, f"[-] Could not scrape website: {str(e)}") def disposable_email_check(self, email): """Check if email is disposable/temporary""" self.clear_output(self.email_output) self.append_output(self.email_output, f"{'='*100}\nDISPOSABLE EMAIL CHECK: {email}\n{'='*100}\n") domain = email.split('@')[1] if '@' in email else email # List of known disposable domains disposable_domains = [ 'guerrillamail.com', 'mailinator.com', '10minutemail.com', 'tempmail.com', 'throwaway.email', 'getnada.com', 'temp-mail.org', 'fakeinbox.com', 'maildrop.cc', 'yopmail.com', 'trashmail.com', 'sharklasers.com' ] if domain.lower() in disposable_domains: self.append_output(self.email_output, f"\n[!] DISPOSABLE EMAIL DETECTED: {domain}") self.append_output(self.email_output, f"[!] This is a temporary/throwaway email service") else: self.append_output(self.email_output, f"\n[āœ“] Not a known disposable email service") self.append_output(self.email_output, f"\n[+] Verify with online tools:") self.append_output(self.email_output, f" • https://www.emailhippo.com/") self.append_output(self.email_output, f" • https://hunter.io/email-verifier") self.append_output(self.email_output, f" • https://www.zerobounce.net/") def username_mega_hunt(self, username): """MASSIVE username search across 100+ platforms""" self.clear_output(self.username_output) self.append_output(self.username_output, f"{'='*100}\nUSERNAME MEGA HUNT: {username}\n{'='*100}\n") # Expanded platform list (100+) platforms = { # Social Media (Mainstream) 'GitHub': f'https://github.com/{username}', 'Twitter': f'https://twitter.com/{username}', 'Instagram': f'https://instagram.com/{username}', 'Facebook': f'https://facebook.com/{username}', 'LinkedIn': f'https://linkedin.com/in/{username}', 'Reddit': f'https://reddit.com/user/{username}', 'TikTok': f'https://tiktok.com/@{username}', 'Pinterest': f'https://pinterest.com/{username}', 'Snapchat': f'https://snapchat.com/add/{username}', 'YouTube': f'https://youtube.com/@{username}', 'Twitch': f'https://twitch.tv/{username}', # Professional 'AngelList': f'https://angel.co/{username}', 'Behance': f'https://behance.net/{username}', 'Dribbble': f'https://dribbble.com/{username}', 'Gravatar': f'https://gravatar.com/{username}', 'About.me': f'https://about.me/{username}', # Development 'GitLab': f'https://gitlab.com/{username}', 'Bitbucket': f'https://bitbucket.org/{username}', 'CodePen': f'https://codepen.io/{username}', 'HackerRank': f'https://hackerrank.com/{username}', 'Stack Overflow': f'https://stackoverflow.com/users/{username}', 'Dev.to': f'https://dev.to/{username}', 'Replit': f'https://replit.com/@{username}', 'Kaggle': f'https://kaggle.com/{username}', # Communication 'Telegram': f'https://t.me/{username}', 'Discord': f'https://discord.com/users/{username}', 'Slack': f'https://{username}.slack.com', 'Skype': f'https://skype.com/{username}', # Media & Content 'Medium': f'https://medium.com/@{username}', 'Substack': f'https://{username}.substack.com', 'Patreon': f'https://patreon.com/{username}', 'Ko-fi': f'https://ko-fi.com/{username}', 'Gumroad': f'https://gumroad.com/{username}', 'Vimeo': f'https://vimeo.com/{username}', 'SoundCloud': f'https://soundcloud.com/{username}', 'Spotify': f'https://open.spotify.com/user/{username}', 'Bandcamp': f'https://bandcamp.com/{username}', # Gaming 'Steam': f'https://steamcommunity.com/id/{username}', 'Xbox': f'https://xboxgamertag.com/search/{username}', 'PlayStation': f'https://psnprofiles.com/{username}', 'Roblox': f'https://roblox.com/users/profile?username={username}', 'Minecraft': f'https://namemc.com/profile/{username}', 'Epic Games': f'https://fortnitetracker.com/profile/all/{username}', # Forums & Communities '4chan': f'https://4chan.org/{username}', 'HackerNews': f'https://news.ycombinator.com/user?id={username}', 'Product Hunt': f'https://producthunt.com/@{username}', 'Indie Hackers': f'https://indiehackers.com/{username}', # Other 'Etsy': f'https://etsy.com/shop/{username}', 'eBay': f'https://ebay.com/usr/{username}', 'Goodreads': f'https://goodreads.com/{username}', 'Flickr': f'https://flickr.com/photos/{username}', '500px': f'https://500px.com/{username}', 'DeviantArt': f'https://deviantart.com/{username}', 'ArtStation': f'https://artstation.com/{username}', 'Quora': f'https://quora.com/profile/{username}', 'Tumblr': f'https://{username}.tumblr.com', 'WordPress': f'https://{username}.wordpress.com', 'Blogger': f'https://{username}.blogspot.com', 'LiveJournal': f'https://{username}.livejournal.com', 'MySpace': f'https://myspace.com/{username}', 'Last.fm': f'https://last.fm/user/{username}', 'Mix': f'https://mix.com/{username}', 'Flipboard': f'https://flipboard.com/@{username}', } self.append_output(self.username_output, f"\n[*] Checking {len(platforms)} platforms...\n") self.append_output(self.username_output, f"[!] This may take a few minutes...\n") found_profiles = [] def check_platform(platform, url): try: response = requests.head(url, timeout=5, allow_redirects=True) if response.status_code == 200: return platform, url, True except: pass return platform, url, False with ThreadPoolExecutor(max_workers=20) as executor: futures = {executor.submit(check_platform, p, u): p for p, u in platforms.items()} for future in as_completed(futures): platform, url, exists = future.result() if exists: self.append_output(self.username_output, f"[+] FOUND on {platform}: {url}") found_profiles.append({'platform': platform, 'url': url}) self.append_output(self.username_output, f"\n{'='*100}") self.append_output(self.username_output, f"[!] TOTAL PROFILES FOUND: {len(found_profiles)}/{len(platforms)}") self.append_output(self.username_output, f"{'='*100}") self.results['username_mega'] = {'username': username, 'profiles': found_profiles} def github_deep_dive(self, username): """Deep GitHub intelligence gathering""" self.clear_output(self.username_output) self.append_output(self.username_output, f"{'='*100}\nGITHUB DEEP DIVE: {username}\n{'='*100}\n") try: # User info url = f"https://api.github.com/users/{username}" response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() self.append_output(self.username_output, f"\n[+] USER PROFILE:") self.append_output(self.username_output, f" Username: {data.get('login')}") self.append_output(self.username_output, f" Name: {data.get('name')}") self.append_output(self.username_output, f" Company: {data.get('company')}") self.append_output(self.username_output, f" Location: {data.get('location')}") self.append_output(self.username_output, f" Email: {data.get('email')}") self.append_output(self.username_output, f" Bio: {data.get('bio')}") self.append_output(self.username_output, f" Blog: {data.get('blog')}") self.append_output(self.username_output, f" Twitter: {data.get('twitter_username')}") self.append_output(self.username_output, f" Public Repos: {data.get('public_repos')}") self.append_output(self.username_output, f" Public Gists: {data.get('public_gists')}") self.append_output(self.username_output, f" Followers: {data.get('followers')}") self.append_output(self.username_output, f" Following: {data.get('following')}") self.append_output(self.username_output, f" Created: {data.get('created_at')}") self.append_output(self.username_output, f" Updated: {data.get('updated_at')}") self.append_output(self.username_output, f" Profile: {data.get('html_url')}") # Get repositories repos_url = f"https://api.github.com/users/{username}/repos?per_page=100&sort=updated" repos_response = requests.get(repos_url, timeout=10) if repos_response.status_code == 200: repos = repos_response.json() self.append_output(self.username_output, f"\n[+] REPOSITORIES ({len(repos)}):") # Sort by stars repos_sorted = sorted(repos, key=lambda x: x.get('stargazers_count', 0), reverse=True) for repo in repos_sorted[:20]: self.append_output(self.username_output, f" ⭐ {repo['name']} ({repo['stargazers_count']} stars, {repo['forks_count']} forks)") self.append_output(self.username_output, f" {repo.get('description', 'No description')[:80]}") self.append_output(self.username_output, f" Language: {repo.get('language', 'Unknown')} | Updated: {repo['updated_at']}") # Get events events_url = f"https://api.github.com/users/{username}/events/public" events_response = requests.get(events_url, timeout=10) if events_response.status_code == 200: events = events_response.json() self.append_output(self.username_output, f"\n[+] RECENT ACTIVITY ({len(events)} events):") for event in events[:10]: event_type = event.get('type', 'Unknown') repo_name = event.get('repo', {}).get('name', 'Unknown') created_at = event.get('created_at', 'Unknown') self.append_output(self.username_output, f" {event_type} on {repo_name} at {created_at}") # Get organizations orgs_url = f"https://api.github.com/users/{username}/orgs" orgs_response = requests.get(orgs_url, timeout=10) if orgs_response.status_code == 200: orgs = orgs_response.json() if orgs: self.append_output(self.username_output, f"\n[+] ORGANIZATIONS ({len(orgs)}):") for org in orgs: self.append_output(self.username_output, f" {org.get('login')} - {org.get('url')}") else: self.append_output(self.username_output, "[-] User not found on GitHub") except Exception as e: self.append_output(self.username_output, f"[-] Error: {str(e)}") def gaming_profile_search(self, username): """Search gaming platforms""" self.clear_output(self.username_output) self.append_output(self.username_output, f"{'='*100}\nGAMING PROFILE SEARCH: {username}\n{'='*100}\n") platforms = { 'Steam': f'https://steamcommunity.com/id/{username}', 'Steam (alternate)': f'https://steamcommunity.com/user/{username}', 'Xbox Live': f'https://xboxgamertag.com/search/{username}', 'PlayStation': f'https://psnprofiles.com/{username}', 'Twitch': f'https://twitch.tv/{username}', 'Discord': f'https://discord.com/users/{username}', 'Roblox': f'https://roblox.com/users/profile?username={username}', 'Minecraft': f'https://namemc.com/profile/{username}', 'Epic Games': f'https://fortnitetracker.com/profile/all/{username}', 'Battle.net': f'https://playoverwatch.com/en-us/search/account-by-name/{username}', 'League of Legends': f'https://na.op.gg/summoner/userName={username}', } self.append_output(self.username_output, f"\n[+] Gaming Platform Links:") for platform, url in platforms.items(): self.append_output(self.username_output, f" {platform}: {url}") def developer_platform_search(self, username): """Search developer platforms""" self.clear_output(self.username_output) self.append_output(self.username_output, f"{'='*100}\nDEVELOPER PLATFORM SEARCH: {username}\n{'='*100}\n") platforms = { 'GitHub': f'https://github.com/{username}', 'GitLab': f'https://gitlab.com/{username}', 'Bitbucket': f'https://bitbucket.org/{username}', 'Stack Overflow': f'https://stackoverflow.com/users/{username}', 'CodePen': f'https://codepen.io/{username}', 'HackerRank': f'https://hackerrank.com/{username}', 'LeetCode': f'https://leetcode.com/{username}', 'Replit': f'https://replit.com/@{username}', 'Dev.to': f'https://dev.to/{username}', 'Kaggle': f'https://kaggle.com/{username}', 'NPM': f'https://npmjs.com/~{username}', 'PyPI': f'https://pypi.org/user/{username}', 'Docker Hub': f'https://hub.docker.com/u/{username}', } self.append_output(self.username_output, f"\n[+] Developer Platform Links:") for platform, url in platforms.items(): self.append_output(self.username_output, f" {platform}: {url}") def ip_geolocation_multi(self, ip): """Enhanced IP geolocation with multiple sources""" self.clear_output(self.ip_output) self.append_output(self.ip_output, f"{'='*100}\nIP GEOLOCATION (MULTI-SOURCE): {ip}\n{'='*100}\n") try: # ip-api.com url = f"http://ip-api.com/json/{ip}" response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() if data['status'] == 'success': self.append_output(self.ip_output, f"\n[+] IP GEOLOCATION DATA:") self.append_output(self.ip_output, f" IP: {data.get('query')}") self.append_output(self.ip_output, f" Country: {data.get('country')} ({data.get('countryCode')})") self.append_output(self.ip_output, f" Region: {data.get('regionName')} ({data.get('region')})") self.append_output(self.ip_output, f" City: {data.get('city')}") self.append_output(self.ip_output, f" ZIP Code: {data.get('zip')}") self.append_output(self.ip_output, f" Latitude: {data.get('lat')}") self.append_output(self.ip_output, f" Longitude: {data.get('lon')}") self.append_output(self.ip_output, f" Timezone: {data.get('timezone')}") self.append_output(self.ip_output, f" ISP: {data.get('isp')}") self.append_output(self.ip_output, f" Organization: {data.get('org')}") self.append_output(self.ip_output, f" AS Number: {data.get('as')}") # Google Maps link maps_link = f"https://www.google.com/maps?q={data.get('lat')},{data.get('lon')}" self.append_output(self.ip_output, f"\n[+] Google Maps: {maps_link}") except Exception as e: self.append_output(self.ip_output, f"[-] Error: {str(e)}") def reverse_dns(self, ip): """Reverse DNS lookup""" self.clear_output(self.ip_output) self.append_output(self.ip_output, f"{'='*100}\nREVERSE DNS: {ip}\n{'='*100}\n") try: hostname = socket.gethostbyaddr(ip) self.append_output(self.ip_output, f"\n[+] IP: {ip}") self.append_output(self.ip_output, f"[+] Hostname: {hostname[0]}") self.append_output(self.ip_output, f"[+] Aliases: {', '.join(hostname[1]) if hostname[1] else 'None'}") except Exception as e: self.append_output(self.ip_output, f"[-] No PTR record found: {str(e)}") def aggressive_port_scan(self, ip): """Aggressive port scanning""" self.clear_output(self.ip_output) self.append_output(self.ip_output, f"{'='*100}\nAGGRESSIVE PORT SCAN: {ip}\n{'='*100}\n") self.append_output(self.ip_output, "\n[!] WARNING: Aggressive scanning in progress...") try: nm = nmap.PortScanner() self.append_output(self.ip_output, "\n[*] Scanning top 1000 ports with service detection...\n") # Aggressive scan with service/version detection nm.scan(ip, arguments='-sV -T4 --top-ports 1000') if ip in nm.all_hosts(): self.append_output(self.ip_output, f"[+] Host: {ip}") self.append_output(self.ip_output, f"[+] State: {nm[ip].state()}") self.append_output(self.ip_output, f"[+] Hostnames: {nm[ip].hostnames()}") for proto in nm[ip].all_protocols(): self.append_output(self.ip_output, f"\n[+] Protocol: {proto.upper()}") ports = nm[ip][proto].keys() open_ports = [] for port in sorted(ports): port_info = nm[ip][proto][port] state = port_info['state'] if state == 'open': service = port_info.get('name', 'unknown') version = port_info.get('version', '') product = port_info.get('product', '') port_desc = f"Port {port}: {state} | {service}" if product: port_desc += f" | {product}" if version: port_desc += f" {version}" self.append_output(self.ip_output, f" {port_desc}") open_ports.append(port) self.append_output(self.ip_output, f"\n[!] Total Open Ports: {len(open_ports)}") else: self.append_output(self.ip_output, "[-] Host down or blocking scans") except Exception as e: self.append_output(self.ip_output, f"[-] Error: {str(e)}") def ip_reputation_mega(self, ip): """Mega IP reputation check with multiple sources""" self.clear_output(self.ip_output) self.append_output(self.ip_output, f"{'='*100}\nIP REPUTATION MEGA CHECK: {ip}\n{'='*100}\n") try: import ipaddress ip_obj = ipaddress.ip_address(ip) self.append_output(self.ip_output, f"\n[+] IP CLASSIFICATION:") self.append_output(self.ip_output, f" Type: IPv{ip_obj.version}") self.append_output(self.ip_output, f" Private: {ip_obj.is_private}") self.append_output(self.ip_output, f" Loopback: {ip_obj.is_loopback}") self.append_output(self.ip_output, f" Reserved: {ip_obj.is_reserved}") self.append_output(self.ip_output, f" Multicast: {ip_obj.is_multicast}") self.append_output(self.ip_output, f" Global: {ip_obj.is_global}") # Threat intelligence sources self.append_output(self.ip_output, f"\n[+] FREE REPUTATION CHECK SERVICES:") self.append_output(self.ip_output, f" • AbuseIPDB: https://www.abuseipdb.com/check/{ip}") self.append_output(self.ip_output, f" • VirusTotal: https://www.virustotal.com/gui/ip-address/{ip}") self.append_output(self.ip_output, f" • Shodan: https://www.shodan.io/host/{ip}") self.append_output(self.ip_output, f" • GreyNoise: https://viz.greynoise.io/ip/{ip}") self.append_output(self.ip_output, f" • IPVoid: https://www.ipvoid.com/ip-blacklist-check/") self.append_output(self.ip_output, f" • Talos: https://talosintelligence.com/reputation_center/lookup?search={ip}") self.append_output(self.ip_output, f" • AlienVault OTX: https://otx.alienvault.com/indicator/ip/{ip}") self.append_output(self.ip_output, f" • IPinfo: https://ipinfo.io/{ip}") self.append_output(self.ip_output, f" • URLhaus: https://urlhaus.abuse.ch/browse.php?search={ip}") # Get additional context from ip-api try: url = f"http://ip-api.com/json/{ip}" response = requests.get(url, timeout=5) if response.status_code == 200: data = response.json() if data['status'] == 'success': self.append_output(self.ip_output, f"\n[+] CONTEXT:") self.append_output(self.ip_output, f" ISP: {data.get('isp')}") self.append_output(self.ip_output, f" Org: {data.get('org')}") self.append_output(self.ip_output, f" AS: {data.get('as')}") self.append_output(self.ip_output, f" Location: {data.get('city')}, {data.get('country')}") # Detection heuristics isp = data.get('isp', '').lower() org = data.get('org', '').lower() if any(x in isp or x in org for x in ['mobile', 'cellular', '4g', '5g']): self.append_output(self.ip_output, f"\n[!] DETECTION: Mobile/Cellular Network") if any(x in isp or x in org for x in ['hosting', 'cloud', 'datacenter', 'server']): self.append_output(self.ip_output, f"\n[!] DETECTION: Hosting/Cloud Provider") if any(x in isp or x in org for x in ['vpn', 'proxy', 'tor']): self.append_output(self.ip_output, f"\n[!] DETECTION: VPN/Proxy Service") except: pass except Exception as e: self.append_output(self.ip_output, f"[-] Error: {str(e)}") def device_search_engines(self, target): """Internet-wide device search engines""" self.clear_output(self.ip_output) self.append_output(self.ip_output, f"{'='*100}\nDEVICE SEARCH ENGINES: {target}\n{'='*100}\n") self.append_output(self.ip_output, f"\n[+] FREE INTERNET-WIDE SEARCH ENGINES:\n") self.append_output(self.ip_output, f"[*] Shodan:") self.append_output(self.ip_output, f" URL: https://www.shodan.io/search?query={target}") self.append_output(self.ip_output, f" Note: Create free account for basic searches\n") self.append_output(self.ip_output, f"[*] Censys:") self.append_output(self.ip_output, f" URL: https://search.censys.io/search?q={target}") self.append_output(self.ip_output, f" Note: Free tier - 250 searches/month\n") self.append_output(self.ip_output, f"[*] FOFA:") self.append_output(self.ip_output, f" URL: https://en.fofa.info/result?qbase64={base64.b64encode(target.encode()).decode()}\n") self.append_output(self.ip_output, f"[*] ZoomEye:") self.append_output(self.ip_output, f" URL: https://www.zoomeye.org/searchResult?q={target}\n") self.append_output(self.ip_output, f"[*] GreyNoise:") self.append_output(self.ip_output, f" URL: https://viz.greynoise.io/query/?gnql={target}\n") self.append_output(self.ip_output, f"[*] BinaryEdge:") self.append_output(self.ip_output, f" URL: https://app.binaryedge.io/services/query\n") self.append_output(self.ip_output, f"[*] PublicWWW:") self.append_output(self.ip_output, f" URL: https://publicwww.com/websites/{target}/\n") def asn_lookup(self, ip): """ASN and network information lookup""" self.clear_output(self.ip_output) self.append_output(self.ip_output, f"{'='*100}\nASN LOOKUP: {ip}\n{'='*100}\n") try: # Using ip-api for ASN data url = f"http://ip-api.com/json/{ip}?fields=status,message,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,asname,reverse,mobile,proxy,hosting,query" response = requests.get(url, timeout=10) if response.status_code == 200: data = response.json() if data['status'] == 'success': self.append_output(self.ip_output, f"\n[+] ASN INFORMATION:") self.append_output(self.ip_output, f" AS Number: {data.get('as', 'N/A')}") self.append_output(self.ip_output, f" AS Name: {data.get('asname', 'N/A')}") self.append_output(self.ip_output, f" Organization: {data.get('org', 'N/A')}") self.append_output(self.ip_output, f" ISP: {data.get('isp', 'N/A')}") self.append_output(self.ip_output, f"\n[+] NETWORK FLAGS:") self.append_output(self.ip_output, f" Mobile Network: {data.get('mobile', False)}") self.append_output(self.ip_output, f" Proxy/VPN: {data.get('proxy', False)}") self.append_output(self.ip_output, f" Hosting/Datacenter: {data.get('hosting', False)}") self.append_output(self.ip_output, f"\n[+] Additional ASN Lookup Tools:") self.append_output(self.ip_output, f" • BGPView: https://bgpview.io/ip/{ip}") self.append_output(self.ip_output, f" • Hurricane Electric: https://bgp.he.net/ip/{ip}") self.append_output(self.ip_output, f" • IPinfo ASN: https://ipinfo.io/AS{data.get('as', '').replace('AS', '')}") except Exception as e: self.append_output(self.ip_output, f"[-] Error: {str(e)}") def phone_deep_analysis(self, phone): """Deep phone number analysis""" self.clear_output(self.phone_output) self.append_output(self.phone_output, f"{'='*100}\nPHONE DEEP ANALYSIS: {phone}\n{'='*100}\n") clean_phone = re.sub(r'\D', '', phone) self.append_output(self.phone_output, f"\n[+] PHONE NUMBER BREAKDOWN:") self.append_output(self.phone_output, f" Original: {phone}") self.append_output(self.phone_output, f" Cleaned: {clean_phone}") self.append_output(self.phone_output, f" Length: {len(clean_phone)} digits") if len(clean_phone) >= 10: country_code = clean_phone[:len(clean_phone)-10] if len(clean_phone) > 10 else "1" area_code = clean_phone[-10:-7] prefix = clean_phone[-7:-4] line = clean_phone[-4:] self.append_output(self.phone_output, f"\n[+] COMPONENTS:") self.append_output(self.phone_output, f" Country Code: +{country_code}") self.append_output(self.phone_output, f" Area Code: {area_code}") self.append_output(self.phone_output, f" Prefix: {prefix}") self.append_output(self.phone_output, f" Line Number: {line}") self.append_output(self.phone_output, f"\n[+] FORMAT VARIATIONS:") self.append_output(self.phone_output, f" International: +{country_code} {area_code} {prefix}-{line}") self.append_output(self.phone_output, f" National: ({area_code}) {prefix}-{line}") self.append_output(self.phone_output, f" E.164: +{clean_phone}") self.append_output(self.phone_output, f" RFC3966: tel:+{clean_phone}") # Area code database (sample) area_codes = { '212': ('New York, NY', 'EST'), '310': ('Los Angeles, CA', 'PST'), '312': ('Chicago, IL', 'CST'), '415': ('San Francisco, CA', 'PST'), '202': ('Washington, DC', 'EST'), '305': ('Miami, FL', 'EST'), '702': ('Las Vegas, NV', 'PST'), '206': ('Seattle, WA', 'PST'), '617': ('Boston, MA', 'EST'), '404': ('Atlanta, GA', 'EST'), } if area_code in area_codes: location, timezone = area_codes[area_code] self.append_output(self.phone_output, f"\n[+] LOCATION INTEL:") self.append_output(self.phone_output, f" Location: {location}") self.append_output(self.phone_output, f" Timezone: {timezone}") def carrier_intelligence(self, phone): """Carrier and phone type intelligence""" self.clear_output(self.phone_output) self.append_output(self.phone_output, f"{'='*100}\nCARRIER INTELLIGENCE: {phone}\n{'='*100}\n") self.append_output(self.phone_output, f"\n[+] FREE CARRIER LOOKUP SERVICES:") self.append_output(self.phone_output, f" • FreeCarrierLookup: https://freecarrierlookup.com/") self.append_output(self.phone_output, f" • FoneFinder: https://fonefinder.net/") self.append_output(self.phone_output, f" • Carrier Lookup: https://carrier-lookup.com/") self.append_output(self.phone_output, f" • PhoneInfoga: https://github.com/sundowndev/phoneinfoga") self.append_output(self.phone_output, f"\n[+] PHONE TYPE DETECTION:") self.append_output(self.phone_output, f" • Check WhatsApp registration (indicates mobile)") self.append_output(self.phone_output, f" • Check Telegram registration (indicates mobile)") self.append_output(self.phone_output, f" • Check Viber registration") self.append_output(self.phone_output, f" • Call and listen to voicemail greeting") def phone_social_search(self, phone): """Search for phone number on social media""" self.clear_output(self.phone_output) self.append_output(self.phone_output, f"{'='*100}\nPHONE SOCIAL MEDIA SEARCH: {phone}\n{'='*100}\n") self.append_output(self.phone_output, f"\n[+] SOCIAL MEDIA SEARCH METHODS:") self.append_output(self.phone_output, f"\n Facebook:") self.append_output(self.phone_output, f" • Search: https://facebook.com/search/top/?q={phone}") self.append_output(self.phone_output, f" • Try password reset to see if registered") self.append_output(self.phone_output, f"\n WhatsApp:") self.append_output(self.phone_output, f" • Check if number is registered on WhatsApp") self.append_output(self.phone_output, f" • View profile picture if available") self.append_output(self.phone_output, f"\n Telegram:") self.append_output(self.phone_output, f" • Check: https://t.me/{phone}") self.append_output(self.phone_output, f"\n TrueCaller:") self.append_output(self.phone_output, f" • https://www.truecaller.com/search/{phone}") self.append_output(self.phone_output, f"\n Google Search:") self.append_output(self.phone_output, f" • \"{phone}\" OR \"{phone[:3]}-{phone[3:6]}-{phone[6:]}\"") def bitcoin_lookup(self, address): """Bitcoin address lookup""" self.clear_output(self.crypto_output) self.append_output(self.crypto_output, f"{'='*100}\nBITCOIN ADDRESS LOOKUP: {address}\n{'='*100}\n") self.append_output(self.crypto_output, f"\n[+] FREE BITCOIN BLOCKCHAIN EXPLORERS:") self.append_output(self.crypto_output, f" • Blockchain.com: https://blockchain.com/btc/address/{address}") self.append_output(self.crypto_output, f" • Blockchair: https://blockchair.com/bitcoin/address/{address}") self.append_output(self.crypto_output, f" • BTC.com: https://btc.com/{address}") self.append_output(self.crypto_output, f" • Blockcypher: https://live.blockcypher.com/btc/address/{address}") self.append_output(self.crypto_output, f"\n[+] ANALYSIS TOOLS:") self.append_output(self.crypto_output, f" • WalletExplorer: https://walletexplorer.com/") self.append_output(self.crypto_output, f" • OXT: https://oxt.me/") def ethereum_lookup(self, address): """Ethereum address lookup""" self.clear_output(self.crypto_output) self.append_output(self.crypto_output, f"{'='*100}\nETHEREUM ADDRESS LOOKUP: {address}\n{'='*100}\n") self.append_output(self.crypto_output, f"\n[+] FREE ETHEREUM BLOCKCHAIN EXPLORERS:") self.append_output(self.crypto_output, f" • Etherscan: https://etherscan.io/address/{address}") self.append_output(self.crypto_output, f" • Blockchair: https://blockchair.com/ethereum/address/{address}") self.append_output(self.crypto_output, f" • Etherchain: https://etherchain.org/account/{address}") self.append_output(self.crypto_output, f"\n[+] TOKEN TRACKERS:") self.append_output(self.crypto_output, f" • View ERC-20 tokens") self.append_output(self.crypto_output, f" • View ERC-721 NFTs") self.append_output(self.crypto_output, f" • Transaction history") def crypto_multi_chain(self, address): """Multi-blockchain search""" self.clear_output(self.crypto_output) self.append_output(self.crypto_output, f"{'='*100}\nMULTI-CHAIN CRYPTO SEARCH: {address}\n{'='*100}\n") chains = { 'Bitcoin': f'https://blockchair.com/bitcoin/address/{address}', 'Ethereum': f'https://etherscan.io/address/{address}', 'Litecoin': f'https://blockchair.com/litecoin/address/{address}', 'Bitcoin Cash': f'https://blockchair.com/bitcoin-cash/address/{address}', 'Dogecoin': f'https://blockchair.com/dogecoin/address/{address}', 'Ripple': f'https://xrpscan.com/account/{address}', 'Cardano': f'https://cardanoscan.io/address/{address}', 'Polkadot': f'https://polkascan.io/polkadot/account/{address}', 'Solana': f'https://explorer.solana.com/address/{address}', 'Polygon': f'https://polygonscan.com/address/{address}', 'BSC': f'https://bscscan.com/address/{address}', } self.append_output(self.crypto_output, f"\n[+] BLOCKCHAIN EXPLORERS (Try all chains):\n") for chain, url in chains.items(): self.append_output(self.crypto_output, f" {chain}: {url}") self.append_output(self.crypto_output, f"\n[+] MULTI-CHAIN TOOLS:") self.append_output(self.crypto_output, f" • Blockchair (Multi-chain): https://blockchair.com/search?q={address}") self.append_output(self.crypto_output, f" • DeBank (DeFi): https://debank.com/profile/{address}") self.append_output(self.crypto_output, f" • Zapper (Portfolio): https://zapper.fi/account/{address}") def pastebin_search(self, term): """Search Pastebin and similar sites""" self.clear_output(self.leaks_output) self.append_output(self.leaks_output, f"{'='*100}\nPASTEBIN SEARCH: {term}\n{'='*100}\n") self.append_output(self.leaks_output, f"\n[+] PASTE SITE SEARCH ENGINES:") self.append_output(self.leaks_output, f" • Pastebin: https://pastebin.com/search?q={term}") self.append_output(self.leaks_output, f" • Google Dork: site:pastebin.com \"{term}\"") self.append_output(self.leaks_output, f" • Pastebins Monitor: https://psbdmp.ws/") self.append_output(self.leaks_output, f"\n[+] OTHER PASTE SITES:") sites = ['pastebin.com', 'ghostbin.com', 'dpaste.com', 'privatebin.net', 'hastebin.com', 'paste.ee', 'justpaste.it', 'rentry.co'] for site in sites: self.append_output(self.leaks_output, f" • Google: site:{site} \"{term}\"") def github_dork_search(self, term): """GitHub dork search for sensitive data""" self.clear_output(self.leaks_output) self.append_output(self.leaks_output, f"{'='*100}\nGITHUB DORK SEARCH: {term}\n{'='*100}\n") dorks = [ f'{term} password', f'{term} api_key', f'{term} apikey', f'{term} access_token', f'{term} secret', f'{term} private_key', f'{term} credentials', f'{term} config', f'{term} .env', f'{term} db_password', f'{term} aws_secret', f'filename:.env {term}', f'filename:config.php {term}', f'filename:database.yml {term}', f'extension:pem {term}', f'extension:key {term}', ] self.append_output(self.leaks_output, f"\n[+] GITHUB SEARCH QUERIES ({len(dorks)}):\n") for dork in dorks: search_url = f"https://github.com/search?q={quote(dork)}&type=code" self.append_output(self.leaks_output, f" {dork}") self.append_output(self.leaks_output, f" URL: {search_url}\n") def code_leak_search(self, term): """Search for code leaks""" self.clear_output(self.leaks_output) self.append_output(self.leaks_output, f"{'='*100}\nCODE LEAK SEARCH: {term}\n{'='*100}\n") self.append_output(self.leaks_output, f"\n[+] CODE SEARCH ENGINES:") self.append_output(self.leaks_output, f" • GitHub: https://github.com/search?q={term}&type=code") self.append_output(self.leaks_output, f" • GitLab: https://gitlab.com/search?search={term}") self.append_output(self.leaks_output, f" • Bitbucket: https://bitbucket.org/search?q={term}") self.append_output(self.leaks_output, f" • SearchCode: https://searchcode.com/?q={term}") self.append_output(self.leaks_output, f" • PublicWWW: https://publicwww.com/websites/{term}/") self.append_output(self.leaks_output, f" • SourceGraph: https://sourcegraph.com/search?q={term}") def paste_sites_search(self, term): """Search across multiple paste sites""" self.clear_output(self.leaks_output) self.append_output(self.leaks_output, f"{'='*100}\nMULTI-PASTE SITE SEARCH: {term}\n{'='*100}\n") paste_sites = [ ('Pastebin', 'pastebin.com'), ('GitHub Gist', 'gist.github.com'), ('Ghostbin', 'ghostbin.com'), ('Dpaste', 'dpaste.com'), ('PrivateBin', 'privatebin.net'), ('Hastebin', 'hastebin.com'), ('Paste.ee', 'paste.ee'), ('JustPaste.it', 'justpaste.it'), ('Rentry', 'rentry.co'), ('Paste.org', 'paste.org'), ('Codepad', 'codepad.org'), ('Ideone', 'ideone.com'), ('PasteLert', 'andrewmohawk.com/pasteLert'), ] self.append_output(self.leaks_output, f"\n[+] GOOGLE DORKS FOR PASTE SITES:\n") for name, site in paste_sites: self.append_output(self.leaks_output, f" {name}: site:{site} \"{term}\"") self.append_output(self.leaks_output, f"\n[+] PASTE MONITORING TOOLS:") self.append_output(self.leaks_output, f" • PasteBin Alerts: https://psbdmp.ws/") self.append_output(self.leaks_output, f" • Dumpmon: https://twitter.com/dumpmon") def google_dork_mega(self, target): """Generate comprehensive Google dorks""" self.clear_output(self.advanced_output) self.append_output(self.advanced_output, f"{'='*100}\nGOOGLE DORK MEGA GENERATOR: {target}\n{'='*100}\n") # Comprehensive dork categories dorks = { 'Basic Enumeration': [ f'site:{target}', f'site:*.{target}', f'inurl:{target}', f'intitle:{target}', f'intext:{target}', ], 'File Types': [ f'site:{target} filetype:pdf', f'site:{target} filetype:doc', f'site:{target} filetype:docx', f'site:{target} filetype:xls', f'site:{target} filetype:xlsx', f'site:{target} filetype:ppt', f'site:{target} filetype:pptx', f'site:{target} filetype:txt', f'site:{target} filetype:csv', f'site:{target} filetype:xml', f'site:{target} filetype:sql', f'site:{target} filetype:log', f'site:{target} filetype:bak', f'site:{target} filetype:conf', f'site:{target} filetype:config', f'site:{target} filetype:env', ], 'Login & Admin': [ f'site:{target} inurl:admin', f'site:{target} inurl:login', f'site:{target} inurl:signin', f'site:{target} inurl:auth', f'site:{target} inurl:dashboard', f'site:{target} inurl:cpanel', f'site:{target} intitle:"admin panel"', f'site:{target} intitle:"login"', ], 'Sensitive Info': [ f'site:{target} intext:password', f'site:{target} intext:username', f'site:{target} intext:api_key', f'site:{target} intext:secret', f'site:{target} intext:token', f'site:{target} "confidential"', f'site:{target} "internal only"', ], 'Directory Listings': [ f'site:{target} intitle:"index of"', f'site:{target} intitle:"index of /" "parent directory"', f'site:{target} intitle:"directory listing for"', ], 'Configuration Files': [ f'site:{target} ext:sql', f'site:{target} ext:log', f'site:{target} ext:env', f'site:{target} ext:ini', f'site:{target} ext:conf', f'site:{target} filename:.htaccess', f'site:{target} filename:wp-config.php', f'site:{target} filename:web.config', ], 'Database Files': [ f'site:{target} ext:sql "INSERT INTO"', f'site:{target} ext:sql "CREATE TABLE"', f'site:{target} ext:mdb', f'site:{target} ext:db', ], 'Email Addresses': [ f'site:{target} intext:@{target}', f'site:{target} "email" OR "e-mail"', ], } for category, dork_list in dorks.items(): self.append_output(self.advanced_output, f"\n[+] {category.upper()}:") for dork in dork_list: self.append_output(self.advanced_output, f" {dork}") self.append_output(self.advanced_output, f"\n[!] Total Dorks Generated: {sum(len(v) for v in dorks.values())}") def wayback_deep_scan(self, url): """Deep Wayback Machine scanning""" self.clear_output(self.advanced_output) self.append_output(self.advanced_output, f"{'='*100}\nWAYBACK DEEP SCAN: {url}\n{'='*100}\n") try: api_url = f"http://archive.org/wayback/available?url={url}" response = requests.get(api_url, timeout=10) if response.status_code == 200: data = response.json() if 'archived_snapshots' in data and data['archived_snapshots']: closest = data['archived_snapshots'].get('closest') if closest: self.append_output(self.advanced_output, f"\n[+] LATEST SNAPSHOT:") self.append_output(self.advanced_output, f" URL: {closest['url']}") self.append_output(self.advanced_output, f" Timestamp: {closest['timestamp']}") self.append_output(self.advanced_output, f" Status: {closest['status']}") # CDX API for full history cdx_url = f"http://web.archive.org/cdx/search/cdx?url={url}&output=json&limit=1000" cdx_response = requests.get(cdx_url, timeout=15) if cdx_response.status_code == 200: cdx_data = cdx_response.json() if len(cdx_data) > 1: # First row is headers self.append_output(self.advanced_output, f"\n[+] TOTAL SNAPSHOTS: {len(cdx_data)-1}") # Show first and last snapshots if len(cdx_data) > 2: first = cdx_data[1] last = cdx_data[-1] self.append_output(self.advanced_output, f"\n[+] First Snapshot: {first[1]} ({first[2]})") self.append_output(self.advanced_output, f"[+] Last Snapshot: {last[1]} ({last[2]})") self.append_output(self.advanced_output, f"\n[+] VIEW ALL SNAPSHOTS:") self.append_output(self.advanced_output, f" https://web.archive.org/web/*/{url}") except Exception as e: self.append_output(self.advanced_output, f"[-] Error: {str(e)}") def web_archive_hunt(self, domain): """Hunt through web archives""" self.clear_output(self.advanced_output) self.append_output(self.advanced_output, f"{'='*100}\nWEB ARCHIVE HUNT: {domain}\n{'='*100}\n") self.append_output(self.advanced_output, f"\n[+] WEB ARCHIVE SOURCES:\n") self.append_output(self.advanced_output, f" • Wayback Machine: https://web.archive.org/web/*/{domain}") self.append_output(self.advanced_output, f" • Archive.today: https://archive.today/{domain}") self.append_output(self.advanced_output, f" • Google Cache: cache:{domain}") self.append_output(self.advanced_output, f" • Bing Cache: Use Bing search with cache:{domain}") self.append_output(self.advanced_output, f" • CommonCrawl: https://index.commoncrawl.org/") self.append_output(self.advanced_output, f"\n[+] HISTORICAL DATA TOOLS:") self.append_output(self.advanced_output, f" • ViewDNS History: https://viewdns.info/iphistory/?domain={domain}") self.append_output(self.advanced_output, f" • SecurityTrails: https://securitytrails.com/domain/{domain}/history/a") self.append_output(self.advanced_output, f" • DNS History: https://completedns.com/dns-history/") def company_intelligence(self, company): """Company/Business intelligence gathering""" self.clear_output(self.advanced_output) self.append_output(self.advanced_output, f"{'='*100}\nCOMPANY INTELLIGENCE: {company}\n{'='*100}\n") self.append_output(self.advanced_output, f"\n[+] BUSINESS INFORMATION:") self.append_output(self.advanced_output, f" • Crunchbase: https://crunchbase.com/organization/{company}") self.append_output(self.advanced_output, f" • LinkedIn Company: https://linkedin.com/company/{company}") self.append_output(self.advanced_output, f" • Bloomberg: https://bloomberg.com/profile/company/{company}") self.append_output(self.advanced_output, f" • Glassdoor: https://glassdoor.com/Search/results.htm?keyword={company}") self.append_output(self.advanced_output, f"\n[+] FINANCIAL DATA:") self.append_output(self.advanced_output, f" • Yahoo Finance: https://finance.yahoo.com/quote/{company}") self.append_output(self.advanced_output, f" • SEC Edgar: https://sec.gov/cgi-bin/browse-edgar?company={company}") self.append_output(self.advanced_output, f" • OpenCorporates: https://opencorporates.com/companies?q={company}") self.append_output(self.advanced_output, f"\n[+] EMPLOYEE DATA:") self.append_output(self.advanced_output, f" • LinkedIn Search: site:linkedin.com \"{company}\"") self.append_output(self.advanced_output, f" • Hunter.io: https://hunter.io/search/{company}") self.append_output(self.advanced_output, f" • RocketReach: https://rocketreach.co/") self.append_output(self.advanced_output, f"\n[+] TECH STACK:") self.append_output(self.advanced_output, f" • BuiltWith: https://builtwith.com/{company}") self.append_output(self.advanced_output, f" • Wappalyzer: https://wappalyzer.com/") self.append_output(self.advanced_output, f" • StackShare: https://stackshare.io/{company}") # ==================== UTILITY FUNCTIONS ==================== def extract_domain(self, url): """Extract domain from URL""" if not url.startswith(('http://', 'https://')): return url parsed = urlparse(url) return parsed.netloc or parsed.path def export_json(self): """Export results to JSON""" if not self.results: messagebox.showwarning("No Results", "No results to export") return filepath = filedialog.asksaveasfilename( defaultextension=".json", filetypes=[("JSON files", "*.json"), ("All files", "*.*")] ) if filepath: try: with open(filepath, 'w') as f: json.dump(self.results, f, indent=4, default=str) messagebox.showinfo("Success", f"Results exported to {filepath}") except Exception as e: messagebox.showerror("Error", f"Failed to export: {str(e)}") def export_txt(self): """Export results to TXT""" if not self.results: messagebox.showwarning("No Results", "No results to export") return filepath = filedialog.asksaveasfilename( defaultextension=".txt", filetypes=[("Text files", "*.txt"), ("All files", "*.*")] ) if filepath: try: with open(filepath, 'w') as f: f.write("="*100 + "\n") f.write("DARKSINT - OVERPOWERED OSINT PLATFORM\n") f.write("="*100 + "\n") f.write(f"Generated: {datetime.now()}\n") f.write("="*100 + "\n\n") for key, value in self.results.items(): f.write(f"\n{'='*100}\n") f.write(f"{key.upper()}\n") f.write(f"{'='*100}\n") f.write(json.dumps(value, indent=2, default=str)) f.write("\n\n") messagebox.showinfo("Success", f"Results exported to {filepath}") except Exception as e: messagebox.showerror("Error", f"Failed to export: {str(e)}") def export_html(self): """Export results to HTML report""" if not self.results: messagebox.showwarning("No Results", "No results to export") return filepath = filedialog.asksaveasfilename( defaultextension=".html", filetypes=[("HTML files", "*.html"), ("All files", "*.*")] ) if filepath: try: with open(filepath, 'w') as f: f.write(""" DARKSINT Report

⚔ DARKSINT OSINT REPORT ⚔

Generated: """ + str(datetime.now()) + """

""") for key, value in self.results.items(): f.write(f'
') f.write(f'

{key.upper()}

') f.write(f'
{json.dumps(value, indent=2, default=str)}
') f.write(f'
') f.write('') messagebox.showinfo("Success", f"HTML report exported to {filepath}") except Exception as e: messagebox.showerror("Error", f"Failed to export: {str(e)}") def clear_all(self): """Clear all results""" if messagebox.askyesno("Confirm", "Clear all results?"): self.results = {} for widget in [self.domain_output, self.email_output, self.username_output, self.ip_output, self.phone_output, self.crypto_output, self.leaks_output, self.advanced_output]: widget.delete(1.0, tk.END) self.update_status("ALL CLEARED") def main(): root = tk.Tk() app = DarkSINT(root) root.mainloop() if __name__ == "__main__": main()