├── README.md ├── camera ├── CA │ └── camera.txt ├── DE │ └── camera.txt ├── FR │ └── camera.txt ├── IT │ └── camera.txt ├── NL │ └── camera.txt ├── PL │ └── camera.txt ├── RU │ └── camera.txt ├── SE │ └── camera.txt └── US │ └── camera.txt ├── database ├── Collection_#1 │ ├── 0.txt │ └── 1.txt ├── Comcast │ └── 0.txt ├── Exploit.in │ └── 0.txt ├── Gmail │ └── 0.txt ├── Instagram │ └── 0.txt ├── Mega.nz │ └── 0.txt ├── Pornhub │ └── 0.txt └── ogusers.com │ └── 0.txt ├── main.py └── requirements.txt /README.md: -------------------------------------------------------------------------------- 1 |
  2 |                          ██╗  ██╗ █████╗ ██╗    ██╗    ██╗  ██╗███████╗██████╗ 
  3 |                          ██║  ██║██╔══██╗██║    ██║    ██║ ██╔╝██╔════╝██╔══██╗
  4 |                          ███████║███████║██║ █╗ ██║    █████╔╝ █████╗  ██████╔╝
  5 |                          ██╔══██║██╔══██║██║███╗██║    ██╔═██╗ ██╔══╝  ██╔══██╗
  6 |                          ██║  ██║██║  ██║╚███╔███╔╝    ██║  ██╗███████╗██║  ██║
  7 |                          ╚═╝  ╚═╝╚═╝  ╚═╝ ╚══╝╚══╝     ╚═╝  ╚═╝╚══════╝╚═╝  ╚═╝
  8 |                                                  ★★★★☆
  9 | 
10 | 11 |

12 | 👁 Hawker 👁
13 | Github | 14 | Report Bug 15 |

16 | 17 | 18 | Hawker is an OSINT tool designed to assist law enforcement, cybersecurity professionals, and security researchers in conducting online investigations efficiently and legally by centralizing various sources of information to facilitate analysis and investigation. 19 | 20 | 21 | In the next update, Hawker will become cleaner. 22 | 23 | ## Donate 24 | **Monero** : `455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p` 25 | 26 | ## Setup 27 | 28 | ### Setup Hawker 29 | 30 | 1. **Download** : `git clone https://github.com/RetrO-M/Hawker` & `cd Hawker` 31 | 2. **Hawker** : `python3 main.py` 32 | 33 | ## How to Get Hawker+ (COMING SOON) 34 | 35 | - Hawker+ is a more advanced version of the OSINT tool that provides access to large databases for investigative purposes. This tool is intended for law enforcement and cybersecurity professionals. 36 | 37 | To obtain the Hawker+ tool, please follow these steps: 38 | 39 | 1. **Contact Me**: Contact me by email: `d3m3t0r_pro@protonmail.com`. 40 | 2. **Make a Donation**: To support the development of this tool, a donation of **1 XMR (Monero)** is required. Please send the donation to the following Monero address: `455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p` 41 | 3. **Confirmation**: After completing the donation, send me the following: 42 | - The **transaction ID (txid)** of your Monero transaction. 43 | - A **screenshot** of your donation confirmation. 44 | 4. **Receive the Tool**: Once I confirm your donation, I will provide you with the link to download the Hawker+ tool in a `.7z` archive format. 45 | 46 | ```java 47 | ┌─── Amazon 48 | │ └─── Amazon Data Leak (Combo List). 49 | ├─── Collection #1 50 | │ └─── Collection #1 BIG Data Leak (Combo List) 51 | ├─── Comcast 52 | │ └─── Comcast Data Leak (Combo List) 53 | ├─── Exploit.in 54 | │ └─── Exploit.in Data Leak (Combo List) 55 | ├─── Mega.nz 56 | │ └─── Mega.nz Data Leak (Combo List) 57 | ├─── Minecraft 58 | │ └─── Minecraft Data Leak (Combo List) 59 | ├─── Ogusers 60 | │ └─── Ogusers Data Leak (Combo List) 61 | ├─── Paramount 62 | │ └─── Paramount Data Leak (Combo List) 63 | ├─── Paypal 64 | │ └─── Paypal Data Leak (Combo List) 65 | ├─── Pornhub 66 | │ └─── Pornhub Data Leak (Combo List) 67 | ├─── Spotify 68 | │ └─── Spotify Data Leak (Combo List) 69 | ├─── TikTok 70 | │ └─── Tiktok Data Leak (Combo List) 71 | ├─── Doxbin 72 | │ └─── Doxbin leak contains emails and usernames 73 | ├─── Database IP 74 | │ └─── IP addresses leaked from compromised databases 75 | ├─── Discord 76 | │ └─── EXTREME Discord data breach involving 22 million accounts 77 | ├─── Websites 78 | │ └─── Big data leak from multiple domains. 79 | └─── Database Phone 80 | └─── Exposure of phone numbers extracted from vulnerable databases 81 | ``` 82 | 83 | ## Disclaimer 84 | 85 | - **Legal Use Only**: This tool is intended for legal and ethical use in investigations by authorized individuals such as law enforcement officers and cybersecurity professionals. 86 | - **Privacy**: Your privacy and the integrity of your transactions are respected. However, make sure you comply with your local laws when using this tool. 87 | - **No Refunds**: Donations are non-refundable. Ensure that you understand the tool’s functionality before making the donation. 88 | 89 | 90 | ### Install modules 91 | 92 | ```csv 93 | pip install cryptography 94 | pip install colorama 95 | pip install requests 96 | pip install beautifulsoup4 97 | pip install fake-useragent 98 | pip install lxml 99 | pip install rich 100 | pip install python-docx 101 | ``` 102 | 103 | `pip install -r requirements.txt` 104 | 105 | ## Disclaimer 106 | 107 | ### Ethical Use Only 108 | 109 | This OSINT tool has been created to assist cybersecurity professionals, law enforcement, and security researchers in conducting legal and ethical investigations on email addresses, in compliance with applicable laws. Any malicious use, such as harassment, fraud, or illegal activities, is strictly prohibited. 110 | 111 | ### **Action in Case of Misuse** 112 | We closely monitor the use of **Hawker** and are committed to **immediately removing** the tool if **abuse or illegal activity** is detected. If this tool is found on malicious platforms such as **Doxbin** or any other site involved in illegal activities, we will **disable** **Hawker PLUS** (the paid version) and take necessary actions to completely remove it. 113 | 114 | 115 | ### No Malicious Intent 116 | 117 | We encourage all users to exercise common sense and integrity when utilizing this tool. The goal of this tool is to promote transparency and security on the Internet, not to facilitate harmful or malicious behavior. Be aware of the ethical implications of your actions and remember that cybersecurity relies on respecting and protecting others. 118 | 119 | ## GDPR Compliance 120 | 121 | As part of this project, we **comply with the General Data Protection Regulation (GDPR)**. Our goal is to ensure transparency, security, and respect for user rights at all times. 122 | 123 | ### Data Collection 124 | 125 | - **Public data only**: Hawker focuses only on using **public data** available on authorized platforms, known data breaches, and public databases. 126 | - **User consent**: We do not collect any personal data without the explicit consent of the user. If you choose to use Hawker, you must clearly and explicitly agree that your information will be processed within the scope of this project. 127 | 128 | ### Data Deletion 129 | 130 | In accordance with the GDPR, you have the right to **request the deletion of your personal data** at any time. If you wish to remove your information from our database, here’s how to proceed: 131 | 132 | 1. **Send a request** via email to: 133 | **[d3m3t0r_pro@protonmail.com]** 134 | 135 | 2. In your email, include the following information: 136 | - **Your email** or other data you wish to delete. 137 | - A clear request to delete your data. 138 | 139 | 3. We will process your request within **1 days**. After that, all your information will be **securely deleted** from our database. 140 | 141 | ### Data Usage 142 | 143 | We do not use your data for any purpose other than the one for which it was collected. No personal data will be shared with third parties without your prior consent, except as required by law. 144 | 145 | ### Responsibility 146 | 147 | We are committed to ensuring that the Hawker tool is used ethically and in compliance with applicable laws. We do not collect data from unauthorized breaches and encourage the use of the tool for legal and responsible purposes. 148 | -------------------------------------------------------------------------------- /camera/CA/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/CA/camera.txt -------------------------------------------------------------------------------- /camera/DE/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/DE/camera.txt -------------------------------------------------------------------------------- /camera/FR/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/FR/camera.txt -------------------------------------------------------------------------------- /camera/IT/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/IT/camera.txt -------------------------------------------------------------------------------- /camera/NL/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/NL/camera.txt -------------------------------------------------------------------------------- /camera/PL/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/PL/camera.txt -------------------------------------------------------------------------------- /camera/RU/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/RU/camera.txt -------------------------------------------------------------------------------- /camera/SE/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/SE/camera.txt -------------------------------------------------------------------------------- /camera/US/camera.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/camera/US/camera.txt -------------------------------------------------------------------------------- /database/Collection_#1/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Collection_#1/0.txt -------------------------------------------------------------------------------- /database/Collection_#1/1.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Collection_#1/1.txt -------------------------------------------------------------------------------- /database/Comcast/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Comcast/0.txt -------------------------------------------------------------------------------- /database/Exploit.in/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Exploit.in/0.txt -------------------------------------------------------------------------------- /database/Gmail/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Gmail/0.txt -------------------------------------------------------------------------------- /database/Instagram/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Instagram/0.txt -------------------------------------------------------------------------------- /database/Mega.nz/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Mega.nz/0.txt -------------------------------------------------------------------------------- /database/Pornhub/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/Pornhub/0.txt -------------------------------------------------------------------------------- /database/ogusers.com/0.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RetrO-M/Hawker/1fb2db71716e305d531eacd7426879c4128534e8/database/ogusers.com/0.txt -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | ''' 2 | 3 | .--~~,__ 4 | :-....,-------`~~'._.' Twitter → @DeAn0nim0us 5 | `-,,, ,_ ;'~U' Github → RetrO-M 6 | _,-' ,'`-__; '--. https://discord.gg/KRjzDPzDbx 7 | (_/'~~ """"(; 8 | Hawker OSINT Tool 9 | Hawker+ is a more advanced version of the OSINT tool that provides access to large databases for investigative purposes. This tool is intended for law enforcement 10 | and cybersecurity professionals. 11 | 12 | → How to get Hawker+ 13 | → 1. Reach out to me via Discord for further information and access to the tool. My Discord username is: "0.d4y". 14 | → To support the development of this tool, a donation of 1 XMR (Monero) is required. Please send the donation to the following Monero address: 15 | → Monero Address : 455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p 16 | → After completing the donation, send me the following: 17 | → The transaction ID (txid) of your Monero transaction. 18 | → A screenshot of your donation confirmation. 19 | → Once I confirm your donation, I will provide you with the link to download the Hawker+ tool in a .7z archive format. 20 | 21 | I am extremely sorry... for disappointing you if you really want me to add more files please tell me or you pay the Hawker + 22 | If you want more files for the data breach, create an "Issue" on github and I'll add it, I promise. 23 | ''' 24 | 25 | from colorama import Fore, init 26 | from os import system, path, listdir 27 | from requests import get, post, Session, RequestException, exceptions 28 | from re import compile, search, IGNORECASE 29 | from hashlib import sha1, sha256, md5 30 | from bs4 import BeautifulSoup 31 | from random import choice 32 | from time import sleep 33 | from pefile import PE 34 | from datetime import datetime, UTC 35 | from requests.exceptions import HTTPError 36 | from urllib.parse import urlencode, urljoin 37 | from warnings import filterwarnings 38 | from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes 39 | from rich.progress import Progress 40 | from pprint import pprint 41 | 42 | import os 43 | import urllib.parse 44 | import docx 45 | 46 | init() 47 | filterwarnings("ignore", category=UserWarning, module="cryptography") 48 | 49 | def banner(title): 50 | width = 58 51 | title_len = len(title) 52 | 53 | left_padding = (width - 2 - title_len) // 2 54 | right_padding = width - 2 - title_len - left_padding 55 | 56 | print(f'\n{Fore.LIGHTWHITE_EX}╔' + '─' * (width - 2) + '╗') 57 | print(f'{Fore.LIGHTWHITE_EX}║' + ' ' * left_padding + Fore.LIGHTBLUE_EX + title + Fore.LIGHTWHITE_EX + ' ' * right_padding + '║') 58 | print(f'{Fore.LIGHTWHITE_EX}╚' + '─' * (width - 2) + '╝\n') 59 | 60 | class Hawker: 61 | def __init__(self): 62 | self.folders = { 63 | 'Collection #1': 'database/Collection_#1', 64 | 'Pornhub': 'database/Pornhub', 65 | 'Mega.nz': 'database/Mega.nz', 66 | 'Comcast': 'database/Comcast', 67 | 'Gmail': 'database/Gmail', 68 | 'Ogusers': 'database/ogusers.com', 69 | 'Exploit.in': 'database/Exploit.in', 70 | 'Instagram': 'database/Instagram' 71 | } 72 | self.countries = { 73 | "FR": "camera/FR/camera.txt", 74 | "US": "camera/US/camera.txt", 75 | "RU": "camera/RU/camera.txt", 76 | "NL": "camera/NL/camera.txt", 77 | "CA": "camera/CA/camera.txt", 78 | "IT": "camera/IT/camera.txt", 79 | "DE": "camera/DE/camera.txt", 80 | "PL": "camera/PL/camera.txt", 81 | "SE": "camera/SE/camera.txt" 82 | } 83 | self.headers = { 84 | "User-Agent": choice([ 85 | "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.80 Safari/537.36", 86 | "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36", 87 | ]), 88 | "Accept-Language": "en-US,en;q=0.9", 89 | "Referer": "https://www.google.com", 90 | "Origin": "https://www.google.com" 91 | } 92 | self.KEY = b"0123456789abcdef" 93 | 94 | def clear_terminal(self): 95 | os.system('cls' if os.name == 'nt' else 'clear') 96 | 97 | def center_text(self, text, width): 98 | return text.center(width) 99 | 100 | def display_message(self, title, subtitle, duration=5): 101 | self.clear_terminal() 102 | terminal_width = os.get_terminal_size().columns 103 | 104 | title = self.center_text(title, terminal_width) 105 | subtitle = self.center_text(subtitle, terminal_width) 106 | 107 | print("\n" * 10) 108 | print(title) 109 | print(subtitle) 110 | print("\n" * 10) 111 | 112 | sleep(duration) 113 | self.clear_terminal() 114 | 115 | 116 | #region Google Dorking 117 | 118 | def doxbin_search(self, text): 119 | query = f'"{text}" site:doxbin.com' 120 | url = "https://www.startpage.com/sp/search?" 121 | params = { 122 | 'query': query, 123 | 'cat': 'web', 124 | 'pl': 'en', 125 | 'num': 10 126 | } 127 | url_with_params = url + urlencode(params) 128 | try: 129 | response = get(url_with_params, headers=self.headers) 130 | soup = BeautifulSoup(response.text, 'html.parser') 131 | links = [] 132 | for a in soup.find_all('a', href=True): 133 | href = a['href'] 134 | if 'doxbin.com' in href and href.startswith('http') and not any(sub in href for sub in ['google.com', 'translate.google.com', 'accounts.google.com']): 135 | links.append(urljoin(url_with_params, href)) 136 | return links 137 | except RequestException as e: 138 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error : {e}") 139 | return None 140 | 141 | def pastebin_search(self, text): 142 | query = f"{text} site:pastebin.com" 143 | url = "https://www.startpage.com/sp/search?" 144 | params = { 145 | 'query': query, 146 | 'cat': 'web', 147 | 'pl': 'en', 148 | 'num': 10 149 | } 150 | url_with_params = url + urlencode(params) 151 | try: 152 | response = get(url_with_params, headers=self.headers) 153 | soup = BeautifulSoup(response.text, 'html.parser') 154 | links = [] 155 | for a in soup.find_all('a', href=True): 156 | href = a['href'] 157 | if 'pastebin.com' in href and href.startswith('http') and not any(sub in href for sub in ['google.com', 'translate.google.com', 'accounts.google.com']): 158 | links.append(urljoin(url_with_params, href)) 159 | return links 160 | except RequestException as e: 161 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error : {e}") 162 | return None 163 | 164 | def pagesjaunes_search(self, text): 165 | query = f"{text} site:pagesjaunes.fr" 166 | url = "https://www.startpage.com/sp/search?" 167 | params = { 168 | 'query': query, 169 | 'cat': 'web', 170 | 'pl': 'en', 171 | 'num': 10 172 | } 173 | url_with_params = url + urlencode(params) 174 | try: 175 | response = get(url_with_params, headers=self.headers) 176 | soup = BeautifulSoup(response.text, 'html.parser') 177 | links = [] 178 | for a in soup.find_all('a', href=True): 179 | href = a['href'] 180 | if 'pagesjaunes.fr' in href and href.startswith('http') and not any(sub in href for sub in ['google.com', 'translate.google.com', 'accounts.google.com']): 181 | links.append(urljoin(url_with_params, href)) 182 | return links 183 | except RequestException as e: 184 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error : {e}") 185 | return None 186 | 187 | def whitepages_search(self, text): 188 | query = f"{text} site:whitepages.com" 189 | url = "https://www.startpage.com/sp/search?" 190 | params = { 191 | 'query': query, 192 | 'cat': 'web', 193 | 'pl': 'en', 194 | 'num': 10 195 | } 196 | url_with_params = url + urlencode(params) 197 | try: 198 | response = get(url_with_params, headers=self.headers) 199 | soup = BeautifulSoup(response.text, 'html.parser') 200 | links = [] 201 | for a in soup.find_all('a', href=True): 202 | href = a['href'] 203 | if 'whitepages.com' in href and href.startswith('http') and not any(sub in href for sub in ['google.com', 'translate.google.com', 'accounts.google.com']): 204 | links.append(urljoin(url_with_params, href)) 205 | return links 206 | except RequestException as e: 207 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error : {e}") 208 | return None 209 | 210 | #endregion 211 | 212 | 213 | 214 | #region Email Information 215 | 216 | 217 | def decrypt_file(self, file_path): 218 | with open(file_path, "rb") as file: 219 | iv = file.read(16) 220 | encrypted_data = file.read() 221 | 222 | decryptor = Cipher(algorithms.AES(self.KEY), modes.CBC(iv)).decryptor() 223 | decrypted_data = decryptor.update(encrypted_data) + decryptor.finalize() 224 | 225 | return decrypted_data.rstrip(decrypted_data[-1:]).decode("utf-8", errors="ignore") 226 | 227 | def hash_password(self, password): 228 | sha256_hash = sha256(password.encode('utf-8')).hexdigest() 229 | return sha256_hash 230 | 231 | def search_database(self, email): 232 | found = False 233 | 234 | for folder_name, folder_path in self.folders.items(): 235 | if not path.exists(folder_path): 236 | continue 237 | 238 | for filename in listdir(folder_path): 239 | file_path = path.join(folder_path, filename) 240 | 241 | if path.isfile(file_path): 242 | try: 243 | decrypted_content = self.decrypt_file(file_path) 244 | 245 | for line in decrypted_content.split("\n"): 246 | if line.startswith(email + ":"): 247 | password = line.split(":", 1)[1].strip() 248 | hashed_password = self.hash_password(password) 249 | print(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTYELLOW_EX}!{Fore.LIGHTWHITE_EX}] {folder_name}: {Fore.LIGHTCYAN_EX}{hashed_password}") 250 | except Exception: 251 | continue 252 | 253 | def check_chess_email(self, email): 254 | url = f"https://www.chess.com/callback/email/available?email={email}" 255 | 256 | try: 257 | response = get(url, headers=self.headers) 258 | data = response.json() 259 | 260 | if data.get('isEmailAvailable') == True: 261 | pass 262 | elif data.get('isEmailAvailable') == False: 263 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Chess.com Account Found") 264 | except: 265 | pass 266 | 267 | def check_duolingo_email(self, target: str): 268 | url = "https://www.duolingo.com/2017-06-30/users" 269 | 270 | params = { 271 | 'email': target 272 | } 273 | 274 | try: 275 | response = get(url, params=params, headers=self.headers) 276 | 277 | if response.status_code == 200: 278 | text_response = response.text 279 | 280 | if '{"users":[]}' in text_response: 281 | pass 282 | else: 283 | valid = response.json()['users'][0]['username'] 284 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Duolingo Account Found") 285 | 286 | except Exception as e: 287 | pass 288 | 289 | def check_github_email(self, email): 290 | url = f"https://api.github.com/search/users?q={email}+in:email" 291 | 292 | try: 293 | response = get(url, headers=self.headers) 294 | 295 | if response.status_code == 200: 296 | result = response.json() 297 | if result["total_count"] > 0: 298 | for user in result['items']: 299 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} GitHub Profile: https://github.com/{user['login']}") 300 | print(f" {Fore.LIGHTWHITE_EX}├──ID:{Fore.LIGHTBLUE_EX} {user['id']}") 301 | print(f" {Fore.LIGHTWHITE_EX}├──Login:{Fore.LIGHTBLUE_EX} {user['login']}") 302 | print(f" {Fore.LIGHTWHITE_EX}├──Avatar URL:{Fore.LIGHTBLUE_EX} {user['avatar_url']}") 303 | print(f" {Fore.LIGHTWHITE_EX}├──Type:{Fore.LIGHTBLUE_EX} {user['type']}") 304 | print(f" {Fore.LIGHTWHITE_EX}├──URL:{Fore.LIGHTBLUE_EX} {user['url']}") 305 | print(f" {Fore.LIGHTWHITE_EX}├──Repos URL:{Fore.LIGHTBLUE_EX} {user['repos_url']}") 306 | print(f" {Fore.LIGHTWHITE_EX}├──Gists URL:{Fore.LIGHTBLUE_EX} {user['gists_url']}") 307 | print(f" {Fore.LIGHTWHITE_EX}├──Following URL:{Fore.LIGHTBLUE_EX} {user['following_url']}") 308 | print(f" {Fore.LIGHTWHITE_EX}├──Followers URL:{Fore.LIGHTBLUE_EX} {user['followers_url']}") 309 | print(f" {Fore.LIGHTWHITE_EX}├──Events URL:{Fore.LIGHTBLUE_EX} {user['events_url']}") 310 | print(f" {Fore.LIGHTWHITE_EX}└──Received Events URL:{Fore.LIGHTBLUE_EX} {user['received_events_url']}") 311 | except Exception as e: 312 | pass 313 | 314 | def check_gravatar_email(self, email): 315 | email_hash = md5(email.strip().lower().encode()).hexdigest() 316 | url = f"https://en.gravatar.com/{email_hash}.json" 317 | 318 | try: 319 | response = get(url, headers=self.headers) 320 | 321 | if response.status_code == 200: 322 | data = response.json() 323 | if 'entry' in data: 324 | entry = data['entry'][0] 325 | display_name = entry.get('displayName', 'Unknown') 326 | preferred_username = entry.get('preferredUsername', 'Unknown') 327 | email_hash = entry.get('hash', 'Unknown') 328 | 329 | photos = entry.get('photos', []) 330 | photo_url = photos[0]['value'] if photos else 'No photo available' 331 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Gravatar Account Found") 332 | print(f" {Fore.LIGHTWHITE_EX}├──Gravatar Profile:{Fore.LIGHTBLUE_EX} https://gravatar.com/{email_hash}") 333 | print(f" {Fore.LIGHTWHITE_EX}├──Display Name:{Fore.LIGHTBLUE_EX} {display_name}") 334 | print(f" {Fore.LIGHTWHITE_EX}├──Preferred Username:{Fore.LIGHTBLUE_EX} {preferred_username}") 335 | print(f" {Fore.LIGHTWHITE_EX}├──Hash:{Fore.LIGHTBLUE_EX} {email_hash}") 336 | print(f" {Fore.LIGHTWHITE_EX}└──Profile Photo:{Fore.LIGHTBLUE_EX} {photo_url}") 337 | except Exception as e: 338 | pass 339 | 340 | def check_pinterest_email(self, email): 341 | params = { 342 | "source_url": "/", 343 | "data": '{"options": {"email": "' + email + '"}, "context": {}}' 344 | } 345 | 346 | try: 347 | response = get("https://www.pinterest.fr/resource/EmailExistsResource/get/", params=params, headers=self.headers) 348 | 349 | if response.status_code == 200: 350 | data = response.json() 351 | if data["resource_response"]["data"]: 352 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Pinterest Account Found") 353 | 354 | except Exception as e: 355 | pass 356 | 357 | def pornhub(self, target: str): 358 | try: 359 | with Session() as session: 360 | response = session.get("https://fr.pornhub.com/signup") 361 | text = response.text 362 | soup = BeautifulSoup(text, 'html.parser') 363 | token = soup.find(attrs={'name': 'token'}).get('value') 364 | 365 | params = { 366 | 'token': token 367 | } 368 | data = { 369 | 'check_what': 'email', 370 | 'email': target 371 | } 372 | 373 | response_api = session.post("https://fr.pornhub.com/user/create_account_check", params=params, data=data) 374 | response_json = response_api.json() 375 | 376 | if response_json.get('email') == "create_account_passed": 377 | pass 378 | elif response_json.get('email') == "create_account_failed": 379 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Pornhub Account Found") 380 | 381 | except Exception as e: 382 | pass 383 | 384 | def check_spotify_email(self, target: str): 385 | url = f"https://spclient.wg.spotify.com/signup/public/v1/account?validate=1&email={target}" 386 | 387 | try: 388 | response = get(url, headers=self.headers) 389 | 390 | if response.status_code == 200: 391 | responseData = response.json() 392 | 393 | if responseData.get('status') == 20: 394 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Spotify Account Found") 395 | 396 | except Exception as e: 397 | pass 398 | 399 | def check_twitter_email(self, email): 400 | url = f"https://api.twitter.com/i/users/email_available.json?email={email}" 401 | 402 | try: 403 | response = get(url, headers=self.headers) 404 | if response.status_code == 200: 405 | data = response.json() 406 | if not data["valid"]: 407 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Twitter Account Found") 408 | except Exception as e: 409 | pass 410 | 411 | def wordpress_email(self, email): 412 | response = get(f'https://public-api.wordpress.com/rest/v1.1/users/{email}/auth-options', headers=self.headers) 413 | 414 | if '"email_verified":true' in response.text: 415 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Wordpress Account Found') 416 | 417 | def picsart(self, target: str): 418 | params = { 419 | 'email_encoded': 1, 420 | 'emails': target 421 | } 422 | try: 423 | response = get("https://api.picsart.com/users/email/existence", params=params, headers=self.headers) 424 | response.raise_for_status() 425 | if response.json().get('status') == 'success': 426 | if response.json().get('response'): 427 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Picsart Account Found") 428 | 429 | except exceptions.RequestException as e: 430 | pass 431 | 432 | def bitmoji(self, email): 433 | URL = "https://bitmoji.api.snapchat.com/api/user/find" 434 | data = { 435 | 'email': email 436 | } 437 | try: 438 | r = post(URL, headers=self.headers, data=data) 439 | 440 | if '"account_type":"bitmoji"' in r.text: 441 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Bitmoji Account Found') 442 | 443 | except Exception as e: 444 | pass 445 | 446 | def mewe(self, email): 447 | url = f'https://mewe.com/api/v2/auth/checkEmail?email={email}' 448 | response = get(url, headers=self.headers) 449 | if "Email already taken" in response.text: 450 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Mewe Account Found') 451 | 452 | def firefox(self, email): 453 | data = { 454 | 'email': email 455 | } 456 | response = post('https://api.accounts.firefox.com/v1/account/status', data=data) 457 | if "true" in response.text: 458 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Firefox Account Found') 459 | 460 | def xnxx(self, email): 461 | response = get(f'https://www.xnxx.com/account/checkemail?email={email}') 462 | if "This email is already in use or its owner has excluded it from our website." in response.text: 463 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} XnXX Account Found') 464 | 465 | def xvideos(self, email): 466 | params = { 467 | 'email': email 468 | } 469 | response = get(f'https://www.xvideos.com/account/checkemail', params=params) 470 | if "This email is already in use or its owner has excluded it from our website." in response.text: 471 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Xvideos Account Found') 472 | 473 | def Patreon(self, email): 474 | data = { 475 | 'email': email 476 | } 477 | response = post('https://www.plurk.com/Users/isEmailFound', data=data) 478 | 479 | if "True" in response.text: 480 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Patreon Account Found') 481 | 482 | def Instagram(self, email): 483 | from fake_useragent import UserAgent 484 | ua = UserAgent() 485 | try: 486 | session = Session() 487 | headers = { 488 | 'User-Agent': ua.random, 489 | 'Accept': '*/*', 490 | 'Accept-Language': 'en-US,en;q=0.5', 491 | 'Origin': 'https://www.instagram.com', 492 | 'Referer': 'https://www.instagram.com/accounts/emailsignup/', 493 | 'Connection': 'keep-alive', 494 | 'Content-Type': 'application/x-www-form-urlencoded', 495 | 'X-Instagram-AJAX': '1', 496 | } 497 | 498 | response = session.get("https://www.instagram.com/accounts/emailsignup/", headers=headers) 499 | if response.status_code != 200: 500 | return f"Error: {response.status_code}" 501 | 502 | cookies = session.cookies.get_dict() 503 | token = cookies.get('csrftoken') 504 | if not token: 505 | return "Error: Token Not Found." 506 | 507 | headers["x-csrftoken"] = token 508 | session.cookies.set('csrftoken', token) 509 | 510 | sleep(3) 511 | 512 | data = {"email": email} 513 | response = session.post( 514 | url="https://www.instagram.com/api/v1/web/accounts/web_create_ajax/attempt/", 515 | headers=headers, 516 | data=data, 517 | cookies=session.cookies 518 | ) 519 | 520 | if response.status_code == 200: 521 | response_json = response.json() 522 | 523 | if "errors" in response_json and "email" in response_json["errors"]: 524 | email_errors = response_json["errors"]["email"] 525 | for error in email_errors: 526 | if error.get("code") in ["email_sharing_limit", "email_is_taken"]: 527 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Instagram Account Found') 528 | return True 529 | return False 530 | 531 | return f"Error: {response.status_code} - {response.text}" 532 | 533 | except Exception as e: 534 | return f"Error: {e}" 535 | 536 | 537 | def wikileaks_search(self, text): 538 | URL = f'https://search.wikileaks.org/?query={text}&exact_phrase=&include_external_sources=True&order_by=newest_document_date&page=1' 539 | response = get(URL, headers=self.headers) 540 | 541 | if response.status_code != 200: 542 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error retrieving the page.") 543 | return 544 | 545 | sleep(1) 546 | 547 | soup = BeautifulSoup(response.content, "lxml") 548 | divtag_var = soup.find_all('div', {'class': 'result'}) 549 | if not divtag_var: 550 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No results found for the search.") 551 | return 552 | 553 | URL_REGEX = compile(r'

') 554 | SUBJ_REGEX = compile(r'

\s?([^<]+)') 555 | SENDR1_REGEX = compile(r'email:\s([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA0-9]{2,})') 556 | LEAK_REGEX = compile(r'leak-label">.*?
([^<]+)') 557 | DATE_REGEX = compile(r'Created
\n(\d{4}-\d{2}-\d{2})') 558 | 559 | for a in divtag_var: 560 | url_var = URL_REGEX.findall(str(a)) 561 | date_var = DATE_REGEX.findall(str(a)) 562 | subj_var = SUBJ_REGEX.findall(str(a)) 563 | sendr1_var = SENDR1_REGEX.findall(str(a)) 564 | leak_var = LEAK_REGEX.findall(str(a)) 565 | sendr_var = sendr1_var[0] if sendr1_var else None 566 | date_var = date_var[0] if date_var else None 567 | subj_var = subj_var[0] if subj_var else None 568 | leak_var = leak_var[0] if leak_var else None 569 | 570 | if url_var or date_var or sendr_var or subj_var or leak_var: 571 | if date_var: 572 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Date:{Fore.LIGHTBLUE_EX} {date_var}') 573 | if sendr_var: 574 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Sender:{Fore.LIGHTBLUE_EX} {sendr_var}') 575 | if subj_var: 576 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Subject:{Fore.LIGHTBLUE_EX} {subj_var}') 577 | if url_var: 578 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} URL:{Fore.LIGHTBLUE_EX} {url_var}') 579 | if leak_var: 580 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Leak:{Fore.LIGHTBLUE_EX} {leak_var}') 581 | print('\n') 582 | 583 | def extract_links_ahmia(self, email): 584 | encoded_email = urllib.parse.quote(email) 585 | url = f"https://ahmia.fi/search/?q={encoded_email}" 586 | 587 | response = get(url) 588 | 589 | if response.status_code == 200: 590 | soup = BeautifulSoup(response.content, 'html.parser') 591 | links = soup.find_all('a', href=True) 592 | 593 | for link in links: 594 | href = link['href'] 595 | 596 | if '/search/redirect?' in href: 597 | redirect_url = urllib.parse.parse_qs(urllib.parse.urlparse(href).query).get('redirect_url', [None])[0] 598 | 599 | if redirect_url: 600 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} .onion link found:{Fore.LIGHTBLUE_EX} {redirect_url}") 601 | 602 | def hudsonrock_api_email(self, text): 603 | try: 604 | url = f"https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-email?email={text}" 605 | response = get(url) 606 | response.raise_for_status() 607 | stealers_data = response.json().get('stealers', []) 608 | 609 | if stealers_data: 610 | for data in stealers_data: 611 | computer_name = data.get('computer_name', '/') 612 | operating_system = data.get('operating_system', '/') 613 | ip = data.get('ip', '/') 614 | malware_path = data.get('malware_path', '/') 615 | date_compromised = data.get('date_compromised', '/') 616 | antiviruses = data.get('antiviruses', '/') 617 | top_logins = data.get('top_logins', []) 618 | top_passwords = data.get('top_passwords', []) 619 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} STEALERS: ") 620 | print(f" {Fore.LIGHTWHITE_EX}├──Computer Name:{Fore.LIGHTBLUE_EX} ", computer_name) 621 | print(f" {Fore.LIGHTWHITE_EX}├──Operating System:{Fore.LIGHTBLUE_EX} ", operating_system) 622 | print(f" {Fore.LIGHTWHITE_EX}├──IP:{Fore.LIGHTBLUE_EX} ", ip) 623 | print(f" {Fore.LIGHTWHITE_EX}├──Malware Path:{Fore.LIGHTBLUE_EX} ", malware_path) 624 | print(f" {Fore.LIGHTWHITE_EX}├──Date Compromised:{Fore.LIGHTBLUE_EX} ", date_compromised) 625 | print(f" {Fore.LIGHTWHITE_EX}├──AntiViruses:{Fore.LIGHTBLUE_EX} ", antiviruses) 626 | print(f" {Fore.LIGHTWHITE_EX}├──Top Logins:{Fore.LIGHTBLUE_EX} ", ', '.join(top_logins)) 627 | print(f" {Fore.LIGHTWHITE_EX}└──Passwords:{Fore.LIGHTBLUE_EX} ", ', '.join(top_passwords), "\n") 628 | else: 629 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No data found...") 630 | except HTTPError as http_err: 631 | print(f"{Fore.LIGHTRED_EX}[ERROR] HTTP error occurred: {http_err}") 632 | except Exception as err: 633 | print(f"{Fore.LIGHTRED_EX}[ERROR] Other error occurred: {err}") 634 | #endregion 635 | 636 | 637 | #region Phone information 638 | 639 | 640 | def get_phone_info(self, phone_number): 641 | url = f"http://phone-number-api.com/json/?number={phone_number}" 642 | response = get(url, headers=self.headers) 643 | if response.status_code == 200: 644 | return response.json() 645 | else: 646 | return None 647 | #endregion 648 | 649 | 650 | #region IP information 651 | 652 | def hudsonrock_api_ip(self, text): 653 | try: 654 | url = f"https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-ip?ip={text}" 655 | response = get(url) 656 | response.raise_for_status() 657 | stealers_data = response.json().get('stealers', []) 658 | 659 | if stealers_data: 660 | for data in stealers_data: 661 | computer_name = data.get('computer_name', '/') 662 | operating_system = data.get('operating_system', '/') 663 | ip = data.get('ip', '/') 664 | malware_path = data.get('malware_path', '/') 665 | date_compromised = data.get('date_compromised', '/') 666 | antiviruses = data.get('antiviruses', '/') 667 | top_logins = data.get('top_logins', []) 668 | top_passwords = data.get('top_passwords', []) 669 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} STEALERS: ") 670 | print(f" {Fore.LIGHTWHITE_EX}├──Computer Name:{Fore.LIGHTBLUE_EX} ", computer_name) 671 | print(f" {Fore.LIGHTWHITE_EX}├──Operating System:{Fore.LIGHTBLUE_EX} ", operating_system) 672 | print(f" {Fore.LIGHTWHITE_EX}├──IP:{Fore.LIGHTBLUE_EX} ", ip) 673 | print(f" {Fore.LIGHTWHITE_EX}├──Malware Path:{Fore.LIGHTBLUE_EX} ", malware_path) 674 | print(f" {Fore.LIGHTWHITE_EX}├──Date Compromised:{Fore.LIGHTBLUE_EX} ", date_compromised) 675 | print(f" {Fore.LIGHTWHITE_EX}├──AntiViruses:{Fore.LIGHTBLUE_EX} ", antiviruses) 676 | print(f" {Fore.LIGHTWHITE_EX}├──Top Logins:{Fore.LIGHTBLUE_EX} ", ', '.join(top_logins)) 677 | print(f" {Fore.LIGHTWHITE_EX}└──Passwords:{Fore.LIGHTBLUE_EX} ", ', '.join(top_passwords), "\n") 678 | else: 679 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No data found...") 680 | except HTTPError as http_err: 681 | print(f"{Fore.LIGHTRED_EX}[ERROR] HTTP error occurred: {http_err}") 682 | except Exception as err: 683 | print(f"{Fore.LIGHTRED_EX}[ERROR] Other error occurred: {err}") 684 | 685 | def geolocation_ip(self, ip): 686 | url = f"https://ipwhois.app/json/{ip}" 687 | respon = get(url, headers=self.headers) 688 | if respon.status_code == 200: 689 | result = respon.json() 690 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} IP : ", result.get("ip")) 691 | print(f" {Fore.LIGHTWHITE_EX}├──Country :{Fore.LIGHTBLUE_EX} ", result.get("country")) 692 | print(f" {Fore.LIGHTWHITE_EX}├──Region :{Fore.LIGHTBLUE_EX} ", result.get("region")) 693 | print(f" {Fore.LIGHTWHITE_EX}├──City :{Fore.LIGHTBLUE_EX} ", result.get("city")) 694 | print(f" {Fore.LIGHTWHITE_EX}├──Location : {Fore.LIGHTBLUE_EX}", f"{result.get('latitude')}, {result.get('longitude')}") 695 | print(f" {Fore.LIGHTWHITE_EX}├──ISP : {Fore.LIGHTBLUE_EX}", result.get("isp")) 696 | print(f" {Fore.LIGHTWHITE_EX}└──ASN : {Fore.LIGHTBLUE_EX}", result.get("asn")) 697 | else: 698 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Unable to fetch data for IP: {ip}") 699 | #endregion 700 | 701 | #region Cameras 702 | 703 | def check_cameras(self): 704 | for country_code, path in self.countries.items(): 705 | if os.path.exists(path): 706 | print() 707 | decrypted_content = self.decrypt_file(path) 708 | for line in decrypted_content.split("\n"): 709 | url = line.strip() 710 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} (Camera {country_code}) :{Fore.LIGHTBLUE_EX} {url}") 711 | else: 712 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} The file for {country_code} does not exist.") 713 | 714 | #endregion 715 | 716 | 717 | #region Personal information 718 | 719 | def algolia(self, fullname): 720 | encoded_username = urllib.parse.quote(fullname) 721 | url = f"https://hn.algolia.com/api/v1/search?query={encoded_username}" 722 | response = get(url) 723 | if response.status_code == 200: 724 | data = response.json() 725 | for hit in data['hits']: 726 | if 'title' in hit: 727 | title = hit['title'] 728 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Title:{Fore.LIGHTBLUE_EX} {title}") 729 | if 'url' in hit: 730 | url = hit['url'] 731 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} URL:{Fore.LIGHTBLUE_EX} {url}") 732 | print() 733 | #endregion 734 | 735 | 736 | #region Bitcoin Information 737 | 738 | def get_bitcoin_info(self, bitcoin): 739 | url = f"https://blockchain.info/rawaddr/{bitcoin}" 740 | 741 | try: 742 | response = get(url, headers=self.headers) 743 | 744 | if response.status_code != 200: 745 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} ERROR : {response.status_code}") 746 | return 747 | 748 | data = response.json() 749 | 750 | total_balance = data.get('final_balance', 0) / 1e8 751 | total_transactions = data.get('n_tx', 0) 752 | total_received = data.get('total_received', 0) / 1e8 753 | total_sent = data.get('total_sent', 0) / 1e8 754 | 755 | first_tx_time = 'None' 756 | if data.get('txs', []): 757 | first_tx_time = data['txs'][0].get('time', 'None') 758 | 759 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Bitcoin :{Fore.LIGHTBLUE_EX} {bitcoin}") 760 | print(f" {Fore.LIGHTWHITE_EX}├──Total Balance :{Fore.LIGHTBLUE_EX} {total_balance} BTC") 761 | print(f" {Fore.LIGHTWHITE_EX}├──Total Transactions : {Fore.LIGHTBLUE_EX}{total_transactions}") 762 | print(f" {Fore.LIGHTWHITE_EX}├──Total Received : {Fore.LIGHTBLUE_EX}{total_received} BTC") 763 | print(f" {Fore.LIGHTWHITE_EX}├──Total Sent :{Fore.LIGHTBLUE_EX} {total_sent} BTC") 764 | print(f" {Fore.LIGHTWHITE_EX}└──First Transaction (timestamp) :{Fore.LIGHTBLUE_EX} {first_tx_time}") 765 | 766 | except Exception as e: 767 | pass 768 | 769 | #endregion 770 | 771 | 772 | 773 | #region PyInstaller 774 | 775 | def get_pe_info(self, file): 776 | file_path = file 777 | try: 778 | pe = PE(file_path) 779 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} File Name : {path.basename(file_path)}") 780 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} File size : {path.getsize(file_path)} octets") 781 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Entrypoint : 0x{pe.OPTIONAL_HEADER.AddressOfEntryPoint:X}") 782 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} ImageBase : 0x{pe.OPTIONAL_HEADER.ImageBase:X}") 783 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Machine : {hex(pe.FILE_HEADER.Machine)}") 784 | timestamp = pe.FILE_HEADER.TimeDateStamp 785 | if timestamp > 0: 786 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} TimeDateStamp : {datetime.fromtimestamp(timestamp, UTC)}") 787 | for section in pe.sections: 788 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} {section.Name.decode().strip()} - VA: {hex(section.VirtualAddress)}, Size: {section.Misc_VirtualSize}, Entropie: {section.get_entropy()}") 789 | for entry in pe.DIRECTORY_ENTRY_IMPORT: 790 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} {entry.dll.decode()} : {[imp.name.decode() if imp.name else 'Ordinal' for imp in entry.imports]}") 791 | with open(file_path, "rb") as f: 792 | content = f.read() 793 | match = search(rb'python(\d{2,3})', content, IGNORECASE) 794 | if match: 795 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Version Python : Python{match.group(1).decode()}") 796 | with open(file_path, "rb") as f: 797 | file_data = f.read() 798 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} MD5 : {md5(file_data).hexdigest()}") 799 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} SHA-1 : {sha1(file_data).hexdigest()}") 800 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} SHA-256 : {sha256(file_data).hexdigest()}") 801 | pe.close() 802 | except Exception as e: 803 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error: {e}") 804 | 805 | #endregion 806 | 807 | #region MAC Information 808 | 809 | def mac_address_lookup(self, mac): 810 | url = f"https://api.maclookup.app/v2/macs/{mac}" 811 | 812 | try: 813 | response = get(url, headers=self.headers) 814 | response.raise_for_status() 815 | data = response.json() 816 | 817 | if data.get("success") and data.get("found"): 818 | return data 819 | else: 820 | return {"error": "Information not found for this MAC address."} 821 | except exceptions.RequestException as e: 822 | return {"error": str(e)} 823 | 824 | #endregion 825 | 826 | #region VIN Information 827 | 828 | def get_vehicle_info(self, vin): 829 | url = f"https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{vin}?format=json" 830 | response = get(url) 831 | 832 | if response.status_code == 200: 833 | data = response.json() 834 | results = data.get("Results", []) 835 | 836 | make = next((entry["Value"] for entry in results if entry["Variable"] == "Make"), "N/A") 837 | model = next((entry["Value"] for entry in results if entry["Variable"] == "Model"), "N/A") 838 | year = next((entry["Value"] for entry in results if entry["Variable"] == "Model Year"), "N/A") 839 | vehicle_type = next((entry["Value"] for entry in results if entry["Variable"] == "Vehicle Type"), "N/A") 840 | 841 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Make :", make) 842 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Model :", model) 843 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Year :", year) 844 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Type :", vehicle_type) 845 | 846 | #endregion 847 | 848 | #region MetaData docx 849 | def extract_metadata(self, docx_file): 850 | doc = docx.Document(docx_file) 851 | core_properties = doc.core_properties 852 | 853 | metadata = {} 854 | 855 | for prop in dir(core_properties): 856 | if prop.startswith('__'): 857 | continue 858 | value = getattr(core_properties, prop) 859 | if callable(value): 860 | continue 861 | if prop == 'created' or prop == 'modified' or prop == 'last_printed': 862 | if value: 863 | value = value.strftime('%Y-%m-%d %H:%M:%S') 864 | else: 865 | value = None 866 | metadata[prop] = value 867 | 868 | try: 869 | custom_properties = core_properties.custom_properties 870 | if custom_properties: 871 | metadata['custom_properties'] = {} 872 | for prop in custom_properties: 873 | metadata['custom_properties'][prop.name] = prop.value 874 | except AttributeError: 875 | pass 876 | return metadata 877 | #endregion 878 | 879 | #region PDF information 880 | def extract_pdf_metadata(self, pdf_path): 881 | with open(pdf_path, "rb") as file: 882 | content = file.read().decode(errors='ignore') 883 | 884 | patterns = { 885 | "Creator": r"/Creator \((.*?)\)", 886 | "Producer": r"/Producer \((.*?)\)", 887 | "CreationDate": r"/CreationDate \((.*?)\)", 888 | "ModDate": r"/ModDate \((.*?)\)", 889 | "Keywords": r"/Keywords \((.*?)\)", 890 | "Author": r"/Author \((.*?)\)", 891 | "Marked": r"/Marked (true|false)", 892 | "Suspects": r"/Suspects (true|false)", 893 | "DisplayDocTitle": r"/DisplayDocTitle (true|false)", 894 | "Count": r"/Count (\d+)", 895 | "PDF Version": r"%PDF-(\d+\.\d+)", 896 | "Lang": r"/Lang \((.*?)\)", 897 | "Width": r"/Width (\d+)", 898 | "Height": r"/Height (\d+)", 899 | "Title": r"/Title <([0-9A-Fa-f]+)>" 900 | } 901 | 902 | results = {} 903 | for key, pattern in patterns.items(): 904 | match = search(pattern, content) 905 | if match: 906 | results[key] = match.group(1) 907 | 908 | if results: 909 | for key, value in results.items(): 910 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} {key}: {value}") 911 | else: 912 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No MetaData") 913 | #endregion 914 | 915 | 916 | def title(): 917 | system('clear || cls') 918 | banner = rf'''{Fore.LIGHTBLUE_EX} 919 | _ _ _ ____ _____ _____ _ _ _______ 920 | | | | | | | / __ \ / ____|_ _| \ | |__ __| 921 | | |__| | __ ___ _| | _____ _ __ | | | | (___ | | | \| | | | 922 | | __ |/ _` \ \ /\ / / |/ / _ \ '__| | | | |\___ \ | | | . ` | | | 923 | | | | | (_| |\ V V /| < __/ | | |__| |____) |_| |_| |\ | | | 924 | |_| |_|\__,_| \_/\_/ |_|\_\___|_| \____/|_____/|_____|_| \_| |_| 925 | 926 | .--~~,__ Good luck with your investigations. 927 | :-....,-------`~~'._.' Twitter → @DeAn0nim0us 928 | `-,,, ,_ ;'~U' Github → RetrO-M 929 | _,-' ,'`-__; '--. Discord Hawker → https://discord.gg/KRjzDPzDbx (NEW SERVER) 930 | (_/'~~ """"(; 931 | Want to improve this version? Join our Discord server and tell us all about it! 932 | {Fore.LIGHTWHITE_EX}01 {Fore.LIGHTCYAN_EX}→ Email Information 933 | {Fore.LIGHTWHITE_EX}02 {Fore.LIGHTCYAN_EX}→ Phone Information 934 | {Fore.LIGHTWHITE_EX}03 {Fore.LIGHTCYAN_EX}→ IP Information 935 | {Fore.LIGHTWHITE_EX}04 {Fore.LIGHTCYAN_EX}→ Camera Information 936 | {Fore.LIGHTWHITE_EX}05 {Fore.LIGHTCYAN_EX}→ Personal Information 937 | {Fore.LIGHTWHITE_EX}06 {Fore.LIGHTCYAN_EX}→ Bitcoin Information 938 | {Fore.LIGHTWHITE_EX}07 {Fore.LIGHTCYAN_EX}→ PyInstaller Information 939 | {Fore.LIGHTWHITE_EX}08 {Fore.LIGHTCYAN_EX}→ MAC Information 940 | {Fore.LIGHTWHITE_EX}09 {Fore.LIGHTCYAN_EX}→ VIN Information 941 | {Fore.LIGHTWHITE_EX}10 {Fore.LIGHTCYAN_EX}→ PDF Information 942 | {Fore.LIGHTWHITE_EX}11 {Fore.LIGHTCYAN_EX}→ Docx Information 943 | 944 | {Fore.LIGHTWHITE_EX}00 {Fore.LIGHTCYAN_EX}→ Hawker+ 945 | ''' 946 | print(banner) 947 | 948 | def main(): 949 | haw = Hawker() 950 | haw.display_message("Donate Monero to support me, Thank you <3", "455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p", 3) 951 | haw.display_message("RetrO-M", "Remember to use legally, I wish you a good investigation", 2) 952 | while True: 953 | title() 954 | print(f'{Fore.LIGHTBLUE_EX}┌───[{Fore.LIGHTCYAN_EX}HAWKER{Fore.LIGHTBLUE_EX}@{Fore.LIGHTCYAN_EX}root{Fore.LIGHTBLUE_EX}]~[{Fore.LIGHTCYAN_EX}/{Fore.LIGHTBLUE_EX}]') 955 | command = input(f'{Fore.LIGHTBLUE_EX}└──{Fore.BLUE}>{Fore.LIGHTWHITE_EX} ') 956 | 957 | if command == "01" or command == "1": 958 | email = input(f"{Fore.LIGHTBLUE_EX}Email{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 959 | categories = { 960 | "Data Breach": [haw.search_database], 961 | "Ahmia": [haw.extract_links_ahmia], 962 | "Doxbin": [haw.doxbin_search], 963 | "PasteBin": [haw.pastebin_search], 964 | "Social Networks": [haw.check_github_email, haw.picsart, haw.pornhub, haw.check_spotify_email, haw.check_twitter_email, haw.check_chess_email, haw.check_duolingo_email, haw.check_gravatar_email, haw.check_pinterest_email, haw.bitmoji, haw.mewe, haw.firefox, haw.xnxx, haw.xvideos, haw.Patreon, haw.Instagram], 965 | "Hudsonrock API": [haw.hudsonrock_api_email], 966 | "WikiLeaks": [haw.wikileaks_search] 967 | } 968 | with Progress() as progress: 969 | task = progress.add_task("[cyan]Loading...", total=100) 970 | while not progress.finished: 971 | progress.update(task, advance=1) 972 | sleep(0.1) 973 | for category, functions in categories.items(): 974 | banner(category) 975 | for func in functions: 976 | if func.__name__ == "pastebin_search": 977 | pastebin_results = func(email) 978 | if pastebin_results: 979 | for link in pastebin_results: 980 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 981 | elif func.__name__ == "doxbin_search": 982 | doxbin_results = func(email) 983 | if doxbin_results: 984 | for link in doxbin_results: 985 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 986 | else: 987 | func(email) 988 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 989 | elif command == "02" or command == "2": 990 | phone = input(f"{Fore.LIGHTBLUE_EX}Phone{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 991 | categories = { 992 | "Ahmia": [haw.extract_links_ahmia], 993 | "Doxbin": [haw.doxbin_search], 994 | "PasteBin": [haw.pastebin_search], 995 | "Phone Information": [haw.get_phone_info] 996 | } 997 | with Progress() as progress: 998 | task = progress.add_task("[cyan]Loading...", total=100) 999 | while not progress.finished: 1000 | progress.update(task, advance=1) 1001 | sleep(0.1) 1002 | for category, functions in categories.items(): 1003 | banner(category) 1004 | for func in functions: 1005 | if func.__name__ == "pastebin_search": 1006 | pastebin_results = func(phone) 1007 | if pastebin_results: 1008 | for link in pastebin_results: 1009 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1010 | elif func.__name__ == "doxbin_search": 1011 | doxbin_results = func(phone) 1012 | if doxbin_results: 1013 | for link in doxbin_results: 1014 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1015 | elif func.__name__ == "get_phone_info": 1016 | data = func(phone) 1017 | if data: 1018 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number:{Fore.LIGHTBLUE_EX}", data.get('query')) 1019 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Status:{Fore.LIGHTBLUE_EX}", data.get('status')) 1020 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number Type:{Fore.LIGHTBLUE_EX}", data.get('numberType')) 1021 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number Valid:{Fore.LIGHTBLUE_EX}", data.get('numberValid')) 1022 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number Valid for Region:{Fore.LIGHTBLUE_EX}", data.get('numberValidForRegion')) 1023 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Country Code:{Fore.LIGHTBLUE_EX}", data.get('numberCountryCode')) 1024 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Area Code:{Fore.LIGHTBLUE_EX}", data.get('numberAreaCode')) 1025 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} E.164 Format:{Fore.LIGHTBLUE_EX}", data.get('formatE164')) 1026 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} National Format:{Fore.LIGHTBLUE_EX}", data.get('formatNational')) 1027 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} International Format:{Fore.LIGHTBLUE_EX}", data.get('formatInternational')) 1028 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Continent:{Fore.LIGHTBLUE_EX}", data.get('continent')) 1029 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Country:{Fore.LIGHTBLUE_EX}", data.get('countryName')) 1030 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Region:{Fore.LIGHTBLUE_EX}", data.get('regionName')) 1031 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} City:{Fore.LIGHTBLUE_EX}", data.get('city')) 1032 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Latitude:{Fore.LIGHTBLUE_EX}", data.get('lat')) 1033 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Longitude:{Fore.LIGHTBLUE_EX}", data.get('lon')) 1034 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Timezone:{Fore.LIGHTBLUE_EX}", data.get('timezone')) 1035 | else: 1036 | func(phone) 1037 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1038 | elif command == "03" or command == "3": 1039 | ip = input(f"{Fore.LIGHTBLUE_EX}IP {Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1040 | categories = { 1041 | "Ahmia": [haw.extract_links_ahmia], 1042 | "Doxbin": [haw.doxbin_search], 1043 | "PasteBin": [haw.pastebin_search], 1044 | "Hudsonrock API": [haw.hudsonrock_api_ip], 1045 | "IP Information": [haw.geolocation_ip] 1046 | } 1047 | with Progress() as progress: 1048 | task = progress.add_task("[cyan]Loading...", total=100) 1049 | while not progress.finished: 1050 | progress.update(task, advance=1) 1051 | sleep(0.1) 1052 | for category, functions in categories.items(): 1053 | banner(category) 1054 | for func in functions: 1055 | if func.__name__ == "pastebin_search": 1056 | pastebin_results = func(ip) 1057 | if pastebin_results: 1058 | for link in pastebin_results: 1059 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1060 | elif func.__name__ == "doxbin_search": 1061 | doxbin_results = func(ip) 1062 | if doxbin_results: 1063 | for link in doxbin_results: 1064 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1065 | else: 1066 | func(ip) 1067 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1068 | elif command == "04" or command == "4": 1069 | categories = { 1070 | "Cameras": [haw.check_cameras], 1071 | } 1072 | with Progress() as progress: 1073 | task = progress.add_task("[cyan]Loading...", total=100) 1074 | while not progress.finished: 1075 | progress.update(task, advance=1) 1076 | sleep(0.1) 1077 | for category, functions in categories.items(): 1078 | banner(category) 1079 | for func in functions: 1080 | func() 1081 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1082 | 1083 | elif command == "05" or command == "5": 1084 | fullname = input(f"{Fore.LIGHTBLUE_EX}IP {Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1085 | categories = { 1086 | "News": [haw.algolia], 1087 | "Ahmia": [haw.extract_links_ahmia], 1088 | "Doxbin": [haw.doxbin_search], 1089 | "PasteBin": [haw.pastebin_search], 1090 | "PagesJaunes": [haw.pagesjaunes_search], 1091 | "WhitePages": [haw.whitepages_search] 1092 | } 1093 | with Progress() as progress: 1094 | task = progress.add_task("[cyan]Loading...", total=100) 1095 | while not progress.finished: 1096 | progress.update(task, advance=1) 1097 | sleep(0.1) 1098 | for category, functions in categories.items(): 1099 | banner(category) 1100 | for func in functions: 1101 | if func.__name__ == "pastebin_search": 1102 | pastebin_results = func(fullname) 1103 | if pastebin_results: 1104 | for link in pastebin_results: 1105 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1106 | elif func.__name__ == "doxbin_search": 1107 | doxbin_results = func(fullname) 1108 | if doxbin_results: 1109 | for link in doxbin_results: 1110 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1111 | elif func.__name__ == "pagesjaunes_search": 1112 | pagesjaunes_results = func(fullname) 1113 | if pagesjaunes_results: 1114 | for link in pagesjaunes_results: 1115 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PagesJaunes {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1116 | elif func.__name__ == "whitepages_search": 1117 | whitepages_results = func(fullname) 1118 | if whitepages_results: 1119 | for link in whitepages_results: 1120 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} WhitePages {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1121 | else: 1122 | func(fullname) 1123 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1124 | elif command == "06" or command == "6": 1125 | bitcoin = input(f"{Fore.LIGHTBLUE_EX}Bitcoin{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1126 | categories = { 1127 | "Ahmia": [haw.extract_links_ahmia], 1128 | "Doxbin": [haw.doxbin_search], 1129 | "PasteBin": [haw.pastebin_search], 1130 | "BlockChain": [haw.get_bitcoin_info] 1131 | } 1132 | with Progress() as progress: 1133 | task = progress.add_task("[cyan]Loading...", total=100) 1134 | while not progress.finished: 1135 | progress.update(task, advance=1) 1136 | sleep(0.1) 1137 | for category, functions in categories.items(): 1138 | banner(category) 1139 | for func in functions: 1140 | if func.__name__ == "pastebin_search": 1141 | pastebin_results = func(bitcoin) 1142 | if pastebin_results: 1143 | for link in pastebin_results: 1144 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1145 | elif func.__name__ == "doxbin_search": 1146 | doxbin_results = func(bitcoin) 1147 | if doxbin_results: 1148 | for link in doxbin_results: 1149 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1150 | else: 1151 | func(bitcoin) 1152 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1153 | elif command == "07" or command == "7": 1154 | file = input(f"{Fore.LIGHTBLUE_EX}File .exe{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1155 | categories = { 1156 | "PyInstaller Information": [haw.get_pe_info] 1157 | } 1158 | with Progress() as progress: 1159 | task = progress.add_task("[cyan]Loading...", total=100) 1160 | while not progress.finished: 1161 | progress.update(task, advance=1) 1162 | sleep(0.1) 1163 | for category, functions in categories.items(): 1164 | banner(category) 1165 | for func in functions: 1166 | func(file) 1167 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1168 | elif command == "08" or command == "8": 1169 | mac = input(f"{Fore.LIGHTBLUE_EX}MAC Address{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1170 | categories = { 1171 | "Ahmia": [haw.extract_links_ahmia], 1172 | "Doxbin": [haw.doxbin_search], 1173 | "PasteBin": [haw.pastebin_search], 1174 | "MAC Information": [haw.get_pe_info] 1175 | } 1176 | with Progress() as progress: 1177 | task = progress.add_task("[cyan]Loading...", total=100) 1178 | while not progress.finished: 1179 | progress.update(task, advance=1) 1180 | sleep(0.1) 1181 | for category, functions in categories.items(): 1182 | banner(category) 1183 | for func in functions: 1184 | if func.__name__ == "pastebin_search": 1185 | pastebin_results = func(mac) 1186 | if pastebin_results: 1187 | for link in pastebin_results: 1188 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1189 | elif func.__name__ == "doxbin_search": 1190 | doxbin_results = func(mac) 1191 | if doxbin_results: 1192 | for link in doxbin_results: 1193 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1194 | elif func.__name__ == "get_pe_info": 1195 | result = haw.mac_address_lookup(mac) 1196 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} MAC Prefix: {result.get('macPrefix', 'N/A')}") 1197 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Company: {result.get('company', 'N/A')}") 1198 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Address: {result.get('address', 'N/A')}") 1199 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Country: {result.get('country', 'N/A')}") 1200 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} MAC Block Start: {result.get('blockStart', 'N/A')} - {result.get('blockEnd', 'N/A')}") 1201 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Block Size: {result.get('blockSize', 'N/A')}") 1202 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Block Type: {result.get('blockType', 'N/A')}") 1203 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Updated on: {result.get('updated', 'N/A')}") 1204 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Is Random: {result.get('isRand', 'N/A')}") 1205 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Is Private: {result.get('isPrivate', 'N/A')}") 1206 | else: 1207 | func(mac) 1208 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1209 | elif command == "09" or command == "9": 1210 | vin_number = input(f"{Fore.LIGHTBLUE_EX}VIN{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1211 | categories = { 1212 | "Ahmia": [haw.extract_links_ahmia], 1213 | "Doxbin": [haw.doxbin_search], 1214 | "PasteBin": [haw.pastebin_search], 1215 | "VIN Information": [haw.get_vehicle_info] 1216 | } 1217 | with Progress() as progress: 1218 | task = progress.add_task("[cyan]Loading...", total=100) 1219 | while not progress.finished: 1220 | progress.update(task, advance=1) 1221 | sleep(0.1) 1222 | for category, functions in categories.items(): 1223 | banner(category) 1224 | for func in functions: 1225 | if func.__name__ == "pastebin_search": 1226 | pastebin_results = func(vin_number) 1227 | if pastebin_results: 1228 | for link in pastebin_results: 1229 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1230 | elif func.__name__ == "doxbin_search": 1231 | doxbin_results = func(vin_number) 1232 | if doxbin_results: 1233 | for link in doxbin_results: 1234 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}") 1235 | else: 1236 | func(vin_number) 1237 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1238 | elif command == "00" or command == "0": 1239 | print( 1240 | f'''{Fore.LIGHTWHITE_EX} 1241 | Hawker+ is not yet available, if you want to be notified when it arrives, join the discord 1242 | https://discord.gg/KRjzDPzDbx 1243 | 1244 | Hawker+ is a more advanced version of the OSINT tool that provides access to large databases for investigative purposes. 1245 | This tool is intended for law enforcement and cybersecurity professionals. 1246 | 1247 | 1. Contact Me: Reach out to me via Discord for further information and access to the tool. 1248 | My Discord username is: `0.d4y`. 1249 | 1250 | 2. Make a Donation: To support the development of this tool, a donation of **1 XMR (Monero)** is required. Please send the 1251 | donation to the following 1252 | 1253 | Monero address: 455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p 1254 | 1255 | 3. Confirmation: After completing the donation, send me the following: 1256 | - The transaction ID (txid)** of your Monero transaction. 1257 | - A screenshot** of your donation confirmation. 1258 | 1259 | 4. Receive the Tool: Once I confirm your donation, I will provide you with the link to 1260 | download the Hawker+ tool in a `.7z` archive format. 1261 | ''' 1262 | ) 1263 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1264 | 1265 | elif command == "11": 1266 | docx_path = input(f"{Fore.LIGHTBLUE_EX}DOCX File{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1267 | metadata = haw.extract_metadata(docx_path) 1268 | pprint(metadata) 1269 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1270 | elif command == "10": 1271 | pdf_path = input(f"{Fore.LIGHTBLUE_EX}PDF File{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ") 1272 | haw.extract_pdf_metadata(pdf_path) 1273 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .") 1274 | if __name__ == "__main__": 1275 | main() 1276 | 1277 | 1278 | """ 1279 | In the next update I will make the code cleaner. 1280 | """ 1281 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | cryptography 2 | colorama 3 | requests 4 | beautifulsoup4 5 | fake-useragent 6 | lxml 7 | rich 8 | python-docx 9 | --------------------------------------------------------------------------------