├── requirements.txt ├── .gitignore ├── resources └── spraygenlogo.png ├── injection-status.json ├── LICENSE ├── docs └── usage.md ├── README.md └── spraygen.py /requirements.txt: -------------------------------------------------------------------------------- 1 | argparse 2 | colorama 3 | progress -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore python venv evnrionment folders that end in env 2 | *env -------------------------------------------------------------------------------- /resources/spraygenlogo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/3ndG4me/spraygen/HEAD/resources/spraygenlogo.png -------------------------------------------------------------------------------- /injection-status.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spraygen", 3 | "version": "1.7", 4 | "platform": "all-desktop", 5 | "progress": "100%", 6 | "state": "done", 7 | "released": true, 8 | "release_version": "1.7", 9 | "download_url": "https://github.com/3ndG4me/spraygen", 10 | "featured": false, 11 | "featured_image": "https://github.com/3ndG4me/spraygen/blob/main/resources/spraygenlogo.png" 12 | } 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Casey Erdmann 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /docs/usage.md: -------------------------------------------------------------------------------- 1 | # Spraygen Usage 2 | 3 | Spraygen comes with a lot of different options for generating unique targeting lists for password spraying. These options provide robustness but can be overwhelming. Generating with `all` options is completable, but takes quite a long time, and it is unlikely that it will be practically useful in a real spray unless you have *alot* of time. These more robust options are more useful for generating lists for offline cracking and are included just because "we can". 4 | 5 | Spraygen can generate some powerful lists, but keep in mind the more complexity you add, the longer generation will take (multi threading can only help so much!). Be sure you use the right switches and options for the job. For example: 6 | - Need to easily generate a list of all 10 character passwords in a given keyspace for offline cracking? You can do that, but it'll take some time. 7 | - If you need to spray 10 character passwords, try picking from a smaller custom list of common 6-10 character passwords and mixing up flags to get more permutations of those passwords to increase your success rate. This will generate much more quickly and be much more useful in a spray attack. 8 | 9 | While it is high recommended you experiment with the different options to make the most of the tool, below there are few common options that have proven to be highly effective and quick to generate. 10 | 11 | # Custom 12 | Generate limited custom separators and attributes with some of the most common. Escape "!" to avoid weird CLI parsing. Example usage with `password` permutation type: 13 | `python3 spraygen.py --mode custom -s ".,_" -a "\!,\!\!,#,##,1,123,1234" --type password -o spray_list.txt` 14 | 15 | Example with custom word list: 16 | `python3 spraygen.py --mode custom -s ".,_" -a "\!,\!\!,#,##,1,123,1234" --type custom -w wordlist.txt -o spray_list.txt` 17 | 18 | 19 | # Seasons and Months 20 | Generate seasons and months with all attribute and separator types, defaults to current year. Try mixing up with the `year_start` and `year_end` parameters if you target has a weak rotation policy: 21 | `python3 spraygen.py --mode all --type seasons months -o spray_list.txt` -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spraygen 2 | Password list generator for password spraying - prebaked with goodies 3 | 4 |

5 | 6 |

7 | 8 | **Version 1.7** 9 | 10 | Generates permutations of Months, Seasons, Years, Sports Teams (NFL, NBA, MLB, NHL), Sports Scores, "Password", and even Iterable Keyspaces of a specified size. 11 | 12 | All permutations are generated with common attributes appended/prepended (such as "!" or "#"), or custom separators (such as "." or "_"). 13 | 14 | Common letter replacement option (change all A -> 4/@ for example) 15 | 16 | Users can extend the attributes and separators using comma delimited lists of characters. 17 | 18 | Spraygen also accepts single words or external wordlists that allow you to generate tuned custom wordlists in addition to what is already provided. 19 | 20 | You could use tools like crunch, a fancy bash loop over SecLists, or whatever have you but that takes time...this one is made for spraying, so get to it! 21 | 22 | 23 | ``` 24 | python3 spraygen.py -h 25 | _ 26 | ( \_ 27 | ( \_ 28 | ( \_ 29 | ( \_ ___ 30 | ( Password \ | | 31 | ( Spray |คคคคคคคค|___| 32 | ( _ / | 33 | ( _ / /~~~~~~~~~\ 34 | ( _ / ( Spray ) 35 | (_/ | This | 36 | | | 37 | | Get | 38 | | Creds | 39 | |_________| 40 | 41 | Original Art by Alex Chudnovsky (Unaffiliated) 42 | Spraygen tool by 3ndG4me 43 | Version 1.7 44 | 45 | usage: spraygen.py [-h] [--year_start YEAR_START] [--year_end YEAR_END] [-s separators] [-a attributes] [-w wordlist] [-n single word] [--mode {all,nosep,noattr,years,plain,letter,quick,custom}] 46 | [--type {all,iterative,sports,nfl,nba,mlb,nhl,months,seasons,password,common,short,custom} [{all,iterative,sports,nfl,nba,mlb,nhl,months,seasons,password,common,short,custom} ...]] 47 | [--iter {ascii,num,spec,asciinum,asciispec,numspec,full}] [--size SIZE] [--min_length MIN_LENGTH] [--max_length MAX_LENGTH] [-o output file] [-p] [--sort {nosort,asc,desc,random}] [-v] 48 | 49 | Parse Spray List Arguments. 50 | 51 | optional arguments: 52 | -h, --help show this help message and exit 53 | --year_start YEAR_START 54 | starting year for a range of years 55 | --year_end YEAR_END ending year for a range of years 56 | -s separators a comma delimited list of one or more separators 57 | -a attributes a comma delimited list of one or more attributes 58 | -w wordlist path to a custom wordlist 59 | -n single word single custom word to generate a custom wordlist with 60 | --mode {all,nosep,noattr,years,plain,letter,quick,custom} 61 | Mode for list generation. Can be all, no separators, no attributes, only years, plain, letter, quick, or custom (will only use parameters passed into -s or -a). 62 | --type {all,iterative,sports,nfl,nba,mlb,nhl,months,seasons,password,common,short,custom} [{all,iterative,sports,nfl,nba,mlb,nhl,months,seasons,password,common,short,custom} ...] 63 | Type of list to generate. Can be all, iterative, sports, nfl, nba, mlb, nhl, months, seasons, password, common, short, or custom. Choosing 'all' executes all options except for 'iterative' which 64 | must be run manually. 65 | --iter {ascii,num,spec,asciinum,asciispec,numspec,full} 66 | Keyspace mode for iterative list generation. Only works when --type is set to 'iterative'. Can be ascii, num, spec, asciinum, asciispec, numspec, or full. Will generate all permutations of the 67 | selected keyspace with a given length set with the --size parameter. 68 | --size SIZE Length of passwords generated by a set keyspace. Only works when --type is set to 'iterative' and an --iter keyspace mode is set. 69 | --min_length MIN_LENGTH 70 | Minimum length of passwords to include in the list. (Default: 1) 71 | --max_length MAX_LENGTH 72 | Maximum length of passwords to include in the list (Default: 999) 73 | -o output file name of a file to create and write the final output to 74 | -p prints the output line by line as plaintext 75 | --sort {nosort,asc,desc,random} 76 | Sort final output. Sorting methods supported are nosort, asc, desc, random. 77 | -v prints the current version of spraygen and exits 78 | ``` 79 | 80 | ## Basic Usage 81 | 1. Install dependencies `pip3 install -r requirements.txt` 82 | 2. Run `python3 spraygen.py -p` - this will generate all default built in wordlists with all permutations and print them to the screen 83 | 84 | ## Usage Recommendations 85 | - [Usage Docs](docs/usage.md) 86 | 87 | ## Credits 88 | - [@MarkoH17](https://github.com/MarkoH17) - for the boolean python3.8 backwards compatibility fix 89 | - [@absolomb](https://github.com/absolomb) - for enhancing type selection and attribute logic in year generation 90 | -------------------------------------------------------------------------------- /spraygen.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | from datetime import datetime 5 | from colorama import init, Fore, Back, Style 6 | import itertools 7 | import string 8 | import time 9 | from progress.bar import Bar 10 | import threading 11 | import random 12 | 13 | # Global start time to keep track of process running time 14 | start_time = time.time() 15 | 16 | # Colorama init call 17 | init() 18 | 19 | # Globals for separators and attribute toggles 20 | isPlain = False 21 | isYears = True 22 | isNotSep = False 23 | isNoAttr = False 24 | isLetter = False 25 | isQuick = False 26 | 27 | # Months list 28 | months = [ 29 | "January", 30 | "February", 31 | "March", 32 | "April", 33 | "May", 34 | "June", 35 | "July", 36 | "August", 37 | "September", 38 | "October", 39 | "November", 40 | "December" 41 | ] 42 | 43 | # Seasons list 44 | seasons = [ 45 | "Fall", 46 | "Autumn", 47 | "Winter", 48 | "Spring", 49 | "Summer" 50 | ] 51 | 52 | 53 | # Attributes list 54 | attributes = [ 55 | "!", 56 | "!!", 57 | "#", 58 | "##", 59 | "123", 60 | "1234", 61 | "1", 62 | "1!", 63 | "1#" 64 | ] 65 | 66 | # Separators list 67 | common_separators = [ 68 | ".", 69 | "_", 70 | "-", 71 | "@", 72 | "+", 73 | "=", 74 | "," 75 | ] 76 | 77 | 78 | # NFL Teams list 79 | nfl_teams = [ 80 | "Cardinals", 81 | "Falcons", 82 | "Ravens", 83 | "Bills", 84 | "Panthers", 85 | "Bears", 86 | "Bengals", 87 | "Browns", 88 | "Cowboys", 89 | "Broncos", 90 | "Lions", 91 | "Packers", 92 | "Texans", 93 | "Colts", 94 | "Jaguars", 95 | "Chiefs", 96 | "Chargers", 97 | "Rams", 98 | "Dolphins", 99 | "Vikings", 100 | "Patriots", 101 | "Saints", 102 | "Giants", 103 | "Jets", 104 | "Raiders", 105 | "Eagles", 106 | "Steelers", 107 | "49ers", 108 | "Seahawks", 109 | "Buccaneers", 110 | "Titans", 111 | "Redskins" 112 | ] 113 | 114 | # NBA Teams list 115 | nba_teams = [ 116 | "Hawks", 117 | "Celtics", 118 | "Nets", 119 | "Hornets", 120 | "Bulls", 121 | "Cavaliers", 122 | "Mavericks", 123 | "Nuggets", 124 | "Pistons", 125 | "Warriors", 126 | "Rockets", 127 | "Pacers", 128 | "Clippers", 129 | "Lakers", 130 | "Grizzlies", 131 | "Heat", 132 | "Bucks", 133 | "Timberwolves", 134 | "Pelicans", 135 | "Knicks", 136 | "Thunder", 137 | "Magic", 138 | "76ers", 139 | "Suns", 140 | "Blazers", 141 | "Kings", 142 | "Spurs", 143 | "Raptors", 144 | "Jazz", 145 | "Wizards" 146 | ] 147 | 148 | # MLB Teams list 149 | mlb_teams = [ 150 | "Diamondbacks", 151 | "Braves", 152 | "Orioles", 153 | "RedSox", 154 | "Cubs", 155 | "WhiteSox", 156 | "Reds", 157 | "Indians", 158 | "Rockies", 159 | "Tigers", 160 | "Astros", 161 | "Royals", 162 | "Angels", 163 | "Dodgers", 164 | "Marlins", 165 | "Brewers", 166 | "Twins", 167 | "Mets", 168 | "Yankees", 169 | "Athletics", 170 | "Phillies", 171 | "Pirates", 172 | "Padres", 173 | "Giants", 174 | "Mariners", 175 | "Cardinals", 176 | "Rays", 177 | "Rangers", 178 | "Jays", 179 | "Nationals" 180 | ] 181 | 182 | # NHL Teams list 183 | nhl_teams = [ 184 | "Ducks", 185 | "Bruins", 186 | "Sabres", 187 | "Flames", 188 | "Hurricanes", 189 | "Blackhawks", 190 | "Avalanche", 191 | "BLUEJackets", 192 | "Stars", 193 | "RedWings", 194 | "Oilers", 195 | "Panthers", 196 | "Kings", 197 | "Wild", 198 | "Canadiens", 199 | "Predators", 200 | "Devils", 201 | "Islanders", 202 | "Rangers", 203 | "Senators", 204 | "Flyers", 205 | "Coyotes", 206 | "Penguins", 207 | "BLUEs", 208 | "Sharks", 209 | "Lighting", 210 | "Leafs", 211 | "Canucks", 212 | "GoldenKnights", 213 | "Capitals", 214 | "Jets" 215 | ] 216 | 217 | # Common super bowl scores list 218 | superbowl_scores = [ 219 | "35", 220 | "33", 221 | "16", 222 | "23", 223 | "24", 224 | "14", 225 | "21", 226 | "32", 227 | "27", 228 | "31", 229 | "26", 230 | "38", 231 | "46", 232 | "39", 233 | "42", 234 | "20", 235 | "55", 236 | "52", 237 | "30", 238 | "49", 239 | "34", 240 | "48", 241 | "29", 242 | "17", 243 | "43", 244 | "41" 245 | ] 246 | 247 | # Common nba finals scores list 248 | nbafinals_scores = [ 249 | "4" 250 | ] 251 | 252 | # Common world series scores list 253 | worldseries_scores = [ 254 | "4", 255 | "5" 256 | ] 257 | 258 | # Common stanley cup scores list 259 | stanleycup_scores = [ 260 | "3", 261 | "5", 262 | "2", 263 | "6", 264 | "15", 265 | "4", 266 | "9", 267 | "10", 268 | "12", 269 | "17", 270 | "22", 271 | "20", 272 | "21" 273 | ] 274 | 275 | # Common permutations of "password" list 276 | password_permutations = [ 277 | "Password", 278 | "P4ssw0rd", 279 | "P@55w0rd", 280 | "Pa$$w0rd", 281 | "P@$$w0rd", 282 | "P455w0rd", 283 | "P4$$w0rd" 284 | ] 285 | 286 | # Common misc passwords 287 | common_words = { 288 | "Welcome", 289 | "Baseball", 290 | "Football", 291 | "Letmein", 292 | "Access", 293 | "Superman", 294 | "Batman", 295 | "Qwertyuiop", 296 | "Qwerty", 297 | "Jesus", 298 | "Coronavirus" 299 | } 300 | 301 | # Global keyspace for random strings 302 | ascii_keyspace = string.ascii_letters 303 | numeral_keyspace = string.digits 304 | special_keyspace = string.punctuation 305 | ascii_numeral_keyspace = ascii_keyspace + numeral_keyspace 306 | numeral_special_keyspace = numeral_keyspace + special_keyspace 307 | ascii_special_keyspace = ascii_keyspace + special_keyspace 308 | full_keyspace = ascii_numeral_keyspace + special_keyspace 309 | 310 | # Global year list to keep track of and manipulate year permutations 311 | year_list = [] 312 | 313 | # Global sports scores list to keep track of and manipulate sports score permutations 314 | sports_scores_list = [] 315 | 316 | # Global attribute list to keep track of and manipulate attributes 317 | attr_list = [] 318 | # Global separators list to keep track of and manipulate separators 319 | sep_list = [] 320 | # Global combined attributes and separators list to keep track of and manipulate the concatenation of attribute + separator permutations 321 | attr_sep_list = [] 322 | 323 | # Global custom list to keep track of and manipulate and user supplied custom words 324 | custom_wordlist = [] 325 | # Global custom list to keep track of and manipulate and user supplied custom attributes 326 | custom_attr_list = [] 327 | # Global custom list to keep track of and manipulate and user supplied custom separators 328 | custom_sep_list = [] 329 | 330 | # Global spray list, dictionary to make things fast cause that's what it should've been the whole time 331 | spray_list = {} 332 | # Global index tracker for the spray list dictionary keys, we don't actually need the keys since it's treated like a list so it's just a formality to satisfy the requirement 333 | spray_list_index = 0 334 | 335 | # Global max and min lengths for password sizes that are filtered into the final list 336 | max_length = 999 337 | min_length = 1 338 | 339 | # Instead of "appending" directly we manually add in based on the global index, check if something exists already, add it if it doesn't and increment the global key 340 | def update_spray_list(item): 341 | global spray_list_index 342 | 343 | if item in spray_list.values(): 344 | # current item exists so just return and do not duplicate 345 | return 346 | 347 | if len(item) >= min_length and len(item) <= max_length: 348 | spray_list[spray_list_index] = item 349 | spray_list_index += 1 350 | 351 | 352 | def generate_keyspace_list(mode, size, year_start, year_end): 353 | if mode == "ascii": 354 | ascii_items = list(itertools.product(ascii_keyspace, repeat=size)) 355 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(ascii_items)) 356 | for item in ascii_items: 357 | update_spray_list(''.join(item)) 358 | generate_years(''.join(item), year_start, year_end) 359 | bar.next() 360 | bar.finish() 361 | elif mode == "num": 362 | num_items = list(itertools.product(numeral_keyspace, repeat=size)) 363 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(num_items)) 364 | for item in num_items: 365 | update_spray_list(''.join(item)) 366 | generate_years(''.join(item), year_start, year_end) 367 | bar.next() 368 | bar.finish() 369 | elif mode == "spec": 370 | spec_items = list(itertools.product(special_keyspace, repeat=size)) 371 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(spec_items)) 372 | for item in spec_items: 373 | update_spray_list(''.join(item)) 374 | generate_years(''.join(item), year_start, year_end) 375 | bar.next() 376 | bar.finish() 377 | elif mode == "asciinum": 378 | asciinum_items = list(itertools.product(ascii_numeral_keyspace, repeat=size)) 379 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(asciinum_items)) 380 | for item in asciinum_items: 381 | update_spray_list(''.join(item)) 382 | generate_years(''.join(item), year_start, year_end) 383 | bar.next() 384 | bar.finish() 385 | elif mode == "asciispec": 386 | asciispec_items = list(itertools.product(ascii_special_keyspace, repeat=size)) 387 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(asciispec_items)) 388 | for item in asciispec_items: 389 | update_spray_list(''.join(item)) 390 | generate_years(''.join(item), year_start, year_end) 391 | bar.next() 392 | bar.finish() 393 | elif mode == "numspec": 394 | numspec_items = list(itertools.product(numeral_special_keyspace, repeat=size)) 395 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(numspec_items)) 396 | for item in numspec_items: 397 | update_spray_list(''.join(item)) 398 | generate_years(''.join(item), year_start, year_end) 399 | bar.next() 400 | bar.finish() 401 | elif mode == "full": 402 | full_items = list(itertools.product(full_keyspace, repeat=size)) 403 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating " + mode + " keyspace list", suffix='%(percent)d%%', max=len(full_items)) 404 | for item in full_items: 405 | update_spray_list(''.join(item)) 406 | generate_years(''.join(item), year_start, year_end) 407 | bar.next() 408 | bar.finish() 409 | 410 | 411 | def generate_custom(year_start, year_end): 412 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating custom list", suffix='%(percent)d%%', max=len(custom_wordlist)) 413 | for word in custom_wordlist: 414 | # Add base word to list 415 | update_spray_list(word) 416 | update_spray_list(word.capitalize()) 417 | update_spray_list(word.upper()) 418 | update_spray_list(word.lower()) 419 | # Get year permutation with base custom word 420 | generate_years(word, year_start, year_end) 421 | bar.next() 422 | bar.finish() 423 | 424 | def generate_common(year_start, year_end): 425 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating common list", suffix='%(percent)d%%', max=len(common_words)) 426 | for word in common_words: 427 | # Add base word to list 428 | update_spray_list(word) 429 | update_spray_list(word.capitalize()) 430 | update_spray_list(word.upper()) 431 | update_spray_list(word.lower()) 432 | # Get year permutation with base common word 433 | generate_years(word, year_start, year_end) 434 | bar.next() 435 | bar.finish() 436 | 437 | def generate_short(year_start, year_end): 438 | short_list = [*common_words, *seasons, *password_permutations, *months] 439 | if custom_wordlist: 440 | short_list += custom_wordlist 441 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating short list", suffix='%(percent)d%%', max=len(short_list)) 442 | for word in short_list: 443 | # Add base word to list 444 | update_spray_list(word.capitalize()) 445 | # Get year permutation with base word 446 | generate_years(word, year_start, year_end) 447 | bar.next() 448 | bar.finish() 449 | 450 | def generate_password_perms(year_start, year_end): 451 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating 'password' list", suffix='%(percent)d%%', max=len(password_permutations)) 452 | for password in password_permutations: 453 | # Add base word to list 454 | update_spray_list(password) 455 | update_spray_list(password.capitalize()) 456 | update_spray_list(password.upper()) 457 | update_spray_list(password.lower()) 458 | # Get year permutation with base password permutation 459 | generate_years(password, year_start, year_end) 460 | bar.next() 461 | bar.finish() 462 | 463 | def generate_months(year_start, year_end): 464 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating months list", suffix='%(percent)d%%', max=len(months)) 465 | for month in months: 466 | # Add base word to list 467 | update_spray_list(month) 468 | update_spray_list(month.capitalize()) 469 | update_spray_list(month.upper()) 470 | update_spray_list(month.lower()) 471 | # Get year permutation with base month 472 | generate_years(month, year_start, year_end) 473 | 474 | 475 | def generate_nfl(year_start, year_end): 476 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating nfl list", suffix='%(percent)d%%', max=len(nfl_teams)) 477 | for team in nfl_teams: 478 | # Add base word to list 479 | update_spray_list(team) 480 | update_spray_list(team.capitalize()) 481 | update_spray_list(team.upper()) 482 | update_spray_list(team.lower()) 483 | sports_scores_list.append(team) 484 | sports_scores_list.append(team.capitalize()) 485 | sports_scores_list.append(team.upper()) 486 | sports_scores_list.append(team.lower()) 487 | 488 | # Get year permutation with base nfl team 489 | generate_years(team, year_start, year_end) 490 | bar.next() 491 | bar.finish() 492 | 493 | 494 | def generate_nba(year_start, year_end): 495 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating nba list", suffix='%(percent)d%%', max=len(nba_teams)) 496 | for team in nba_teams: 497 | # Add base word to list 498 | update_spray_list(team) 499 | update_spray_list(team.capitalize()) 500 | update_spray_list(team.upper()) 501 | update_spray_list(team.lower()) 502 | sports_scores_list.append(team) 503 | sports_scores_list.append(team.capitalize()) 504 | sports_scores_list.append(team.upper()) 505 | sports_scores_list.append(team.lower()) 506 | 507 | # Get year permutation with base nba team 508 | generate_years(team, year_start, year_end) 509 | bar.next() 510 | bar.finish() 511 | 512 | def generate_mlb(year_start, year_end): 513 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating mlb list", suffix='%(percent)d%%', max=len(mlb_teams)) 514 | for team in mlb_teams: 515 | # Add base word to list 516 | update_spray_list(team) 517 | update_spray_list(team.capitalize()) 518 | update_spray_list(team.upper()) 519 | update_spray_list(team.lower()) 520 | sports_scores_list.append(team) 521 | sports_scores_list.append(team.capitalize()) 522 | sports_scores_list.append(team.upper()) 523 | sports_scores_list.append(team.lower()) 524 | 525 | # Get year permutation with base mlb team 526 | generate_years(team, year_start, year_end) 527 | bar.next() 528 | bar.finish() 529 | 530 | def generate_nhl(year_start, year_end): 531 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating nhl list", suffix='%(percent)d%%', max=len(nfl_teams)) 532 | for team in nhl_teams: 533 | # Add base word to list 534 | update_spray_list(team) 535 | update_spray_list(team.capitalize()) 536 | update_spray_list(team.upper()) 537 | update_spray_list(team.lower()) 538 | sports_scores_list.append(team) 539 | sports_scores_list.append(team.capitalize()) 540 | sports_scores_list.append(team.upper()) 541 | sports_scores_list.append(team.lower()) 542 | 543 | # Get year permutation with base nhl team 544 | generate_years(team, year_start, year_end) 545 | bar.next() 546 | bar.finish() 547 | 548 | 549 | def generate_seasons(year_start, year_end): 550 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating seasons list", suffix='%(percent)d%%', max=len(seasons)) 551 | for season in seasons: 552 | # Add base word to list 553 | update_spray_list(season) 554 | update_spray_list(season.capitalize()) 555 | update_spray_list(season.upper()) 556 | update_spray_list(season.lower()) 557 | 558 | # Get year permutation with base season 559 | generate_years(season, year_start, year_end) 560 | bar.next() 561 | bar.finish() 562 | 563 | def generate_years(item, year_start, year_end, attr=None): 564 | 565 | # for quick mode just do simple concats with first letter capitalized 566 | if isYears and isQuick: 567 | 568 | for year in range(year_start, year_end+1): 569 | # Get basic year concat 570 | new_item = item + str(year) 571 | year_list.append(new_item.capitalize()) 572 | 573 | # Cut year concat 574 | new_item = item + str(year)[-2:] 575 | year_list.append(new_item.capitalize()) 576 | 577 | if attr: 578 | new_item = item + str(year) + attr 579 | year_list.append(new_item.capitalize()) 580 | 581 | 582 | elif isYears and not isQuick: 583 | 584 | for year in range(year_start, year_end+1): 585 | # Get basic year concat 586 | new_item = item + str(year) 587 | year_list.append(new_item) 588 | year_list.append(new_item.capitalize()) 589 | year_list.append(new_item.lower()) 590 | year_list.append(new_item.upper()) 591 | 592 | # Prepend year permutation 593 | new_item = str(year) + item 594 | year_list.append(new_item) 595 | year_list.append(new_item.capitalize()) 596 | year_list.append(new_item.lower()) 597 | year_list.append(new_item.upper()) 598 | 599 | # Cut year concat 600 | new_item = item + str(year)[-2:] 601 | year_list.append(new_item) 602 | year_list.append(new_item.capitalize()) 603 | year_list.append(new_item.lower()) 604 | year_list.append(new_item.upper()) 605 | 606 | # Prepend cut year concat 607 | new_item = str(year)[-2:] + item 608 | year_list.append(new_item) 609 | year_list.append(new_item.capitalize()) 610 | year_list.append(new_item.lower()) 611 | year_list.append(new_item.upper()) 612 | 613 | if attr: 614 | new_item = item + str(year) + attr 615 | year_list.append(new_item) 616 | year_list.append(new_item.capitalize()) 617 | year_list.append(new_item.lower()) 618 | year_list.append(new_item.upper()) 619 | 620 | def generate_year_list_permutations(): 621 | if isYears: 622 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Adding year permutations to final list", suffix='%(percent)d%%', max=len(year_list)) 623 | for item in year_list: 624 | # Add base word to list 625 | update_spray_list(item) 626 | bar.next() 627 | bar.finish() 628 | 629 | def gen_sports_separators(list_mode, sport, year_start, year_end): 630 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating separators list for sports scores", suffix='%(percent)d%%', max=len(sports_scores_list)) 631 | 632 | if sport == "all" or sport == "sports": 633 | sport = "all" 634 | 635 | temp_separators = [] 636 | if list_mode == "custom": 637 | temp_separators = custom_sep_list 638 | else: 639 | temp_separators = common_separators 640 | 641 | for team in sports_scores_list: 642 | if sport == "nfl" or sport == "all": 643 | for score in superbowl_scores: 644 | # Basic concat with score 645 | item = team + score 646 | generate_years(item, year_start, year_end) 647 | update_spray_list(item) 648 | # Basic prepend with score 649 | item = score + team 650 | generate_years(item, year_start, year_end) 651 | update_spray_list(item) 652 | for sep in temp_separators: 653 | # Get basic permutation with separators and just score 654 | item = score + sep + team 655 | generate_years(item, year_start, year_end) 656 | update_spray_list(item) 657 | # Get basic permutation with separators and just score 658 | item = team + sep + score 659 | generate_years(item, year_start, year_end) 660 | update_spray_list(item) 661 | if sport == "nba" or sport == "all": 662 | for score in nbafinals_scores: 663 | # Basic concat with score 664 | item = team + score 665 | generate_years(item, year_start, year_end) 666 | update_spray_list(item) 667 | # Basic prepend with score 668 | item = score + team 669 | generate_years(item, year_start, year_end) 670 | update_spray_list(item) 671 | for sep in temp_separators: 672 | # Get basic permutation with separators and just score 673 | item = score + sep + team 674 | generate_years(item, year_start, year_end) 675 | update_spray_list(item) 676 | # Get basic permutation with separators and just score 677 | item = team + sep + score 678 | generate_years(item, year_start, year_end) 679 | update_spray_list(item) 680 | if sport == "mlb" or sport == "all": 681 | for score in worldseries_scores: 682 | # Basic concat with score 683 | item = team + score 684 | generate_years(item, year_start, year_end) 685 | update_spray_list(item) 686 | # Basic prepend with score 687 | item = score + team 688 | generate_years(item, year_start, year_end) 689 | update_spray_list(item) 690 | for sep in temp_separators: 691 | # Get basic permutation with separators and just score 692 | item = score + sep + team 693 | generate_years(item, year_start, year_end) 694 | update_spray_list(item) 695 | # Get basic permutation with separators and just score 696 | item = team + sep + score 697 | generate_years(item, year_start, year_end) 698 | update_spray_list(item) 699 | if sport == "nhl" or sport == "all": 700 | for score in stanleycup_scores: 701 | # Basic concat with score 702 | item = team + score 703 | generate_years(item, year_start, year_end) 704 | update_spray_list(item) 705 | # Basic prepend with score 706 | item = score + team 707 | generate_years(item, year_start, year_end) 708 | update_spray_list(item) 709 | for sep in temp_separators: 710 | # Get basic permutation with separators and just score 711 | item = score + sep + team 712 | generate_years(item, year_start, year_end) 713 | update_spray_list(item) 714 | # Get basic permutation with separators and just score 715 | item = team + sep + score 716 | generate_years(item, year_start, year_end) 717 | update_spray_list(item) 718 | bar.next() 719 | bar.finish() 720 | 721 | 722 | def gen_sports_attributes(list_mode, sport, year_start, year_end): 723 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating attributes list for sports scores", suffix='%(percent)d%%', max=len(sports_scores_list)) 724 | if sport == "all" or sport == "sports": 725 | sport = "all" 726 | 727 | temp_attrs = [] 728 | if list_mode == "custom": 729 | temp_attrs = custom_attr_list 730 | else: 731 | temp_attrs = attributes 732 | 733 | for team in sports_scores_list: 734 | if sport == "nfl" or sport == "all": 735 | for score in superbowl_scores: 736 | # Basic concat with score 737 | item = team + score 738 | generate_years(item, year_start, year_end) 739 | update_spray_list(item) 740 | # Basic prepend with score 741 | item = score + team 742 | generate_years(item, year_start, year_end) 743 | update_spray_list(item) 744 | for attr in temp_attrs: 745 | # Get basic concat 746 | item = team + score + attr 747 | generate_years(item, year_start, year_end) 748 | update_spray_list(item) 749 | # Prepend permutation 750 | item = score + attr + team 751 | generate_years(item, year_start, year_end) 752 | update_spray_list(item) 753 | if sport == "nba" or sport == "all": 754 | for score in nbafinals_scores: 755 | # Basic concat with score 756 | item = team + score 757 | generate_years(item, year_start, year_end) 758 | update_spray_list(item) 759 | # Basic prepend with score 760 | item = score + team 761 | generate_years(item, year_start, year_end) 762 | update_spray_list(item) 763 | for attr in temp_attrs: 764 | # Get basic concat 765 | item = team + score + attr 766 | generate_years(item, year_start, year_end) 767 | update_spray_list(item) 768 | # Prepend permutation 769 | item = score + attr + team 770 | generate_years(item, year_start, year_end) 771 | update_spray_list(item) 772 | if sport == "mlb" or sport == "all": 773 | for score in worldseries_scores: 774 | # Basic concat with score 775 | item = team + score 776 | generate_years(item, year_start, year_end) 777 | update_spray_list(item) 778 | # Basic prepend with score 779 | item = score + team 780 | generate_years(item, year_start, year_end) 781 | update_spray_list(item) 782 | for attr in temp_attrs: 783 | # Get basic concat 784 | item = team + score + attr 785 | generate_years(item, year_start, year_end) 786 | update_spray_list(item) 787 | # Prepend permutation 788 | item = score + attr + team 789 | generate_years(item, year_start, year_end) 790 | update_spray_list(item) 791 | if sport == "nhl" or sport == "all": 792 | for score in stanleycup_scores: 793 | # Basic concat with score 794 | item = team + score 795 | generate_years(item, year_start, year_end) 796 | update_spray_list(item) 797 | # Basic prepend with score 798 | item = score + team 799 | generate_years(item, year_start, year_end) 800 | update_spray_list(item) 801 | for attr in temp_attrs: 802 | # Get basic concat 803 | item = team + score + attr 804 | generate_years(item, year_start, year_end) 805 | update_spray_list(item) 806 | # Prepend permutation 807 | item = score + attr + team 808 | generate_years(item, year_start, year_end) 809 | update_spray_list(item) 810 | bar.next() 811 | bar.finish() 812 | 813 | def gen_sports_attrs_separators(list_mode, sport, year_start, year_end): 814 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating attributes + separators list for sports scores", suffix='%(percent)d%%', max=len(sports_scores_list)) 815 | if sport == "all" or sport == "sports": 816 | sport = "all" 817 | 818 | temp_separators = [] 819 | temp_attrs = [] 820 | if list_mode == "custom": 821 | temp_separators = custom_sep_list 822 | temp_attrs = custom_attr_list 823 | else: 824 | temp_separators = common_separators 825 | temp_attrs = attributes 826 | 827 | for team in sports_scores_list: 828 | if sport == "nfl" or sport == "all": 829 | for score in superbowl_scores: 830 | # Basic concat with score 831 | item = team + score 832 | generate_years(item, year_start, year_end) 833 | update_spray_list(item) 834 | # Basic prepend with score 835 | item = score + team 836 | generate_years(item, year_start, year_end) 837 | update_spray_list(item) 838 | for attr in temp_attrs: 839 | for sep in temp_separators: 840 | # Get basic permutation with separators 841 | item = team + sep + score + attr 842 | generate_years(item, year_start, year_end) 843 | update_spray_list(item) 844 | # Get basic permutation with separators 845 | item = score + attr + sep + team 846 | generate_years(item, year_start, year_end) 847 | update_spray_list(item) 848 | elif sport == "nba" or sport == "all": 849 | for score in nbafinals_scores: 850 | # Basic concat with score 851 | item = team + score 852 | generate_years(item, year_start, year_end) 853 | update_spray_list(item) 854 | # Basic prepend with score 855 | item = score + team 856 | generate_years(item, year_start, year_end) 857 | update_spray_list(item) 858 | for attr in temp_attrs: 859 | for sep in temp_separators: 860 | # Get basic permutation with separators 861 | item = team + sep + score + attr 862 | generate_years(item, year_start, year_end) 863 | update_spray_list(item) 864 | # Get basic permutation with separators 865 | item = score + attr + sep + team 866 | generate_years(item, year_start, year_end) 867 | update_spray_list(item) 868 | elif sport == "mlb" or sport == "all": 869 | for score in worldseries_scores: 870 | # Basic concat with score 871 | item = team + score 872 | generate_years(item, year_start, year_end) 873 | update_spray_list(item) 874 | # Basic prepend with score 875 | item = score + team 876 | generate_years(item, year_start, year_end) 877 | update_spray_list(item) 878 | for attr in temp_attrs: 879 | for sep in temp_separators: 880 | # Get basic permutation with separators 881 | item = team + sep + score + attr 882 | generate_years(item, year_start, year_end) 883 | update_spray_list(item) 884 | # Get basic permutation with separators 885 | item = score + attr + sep + team 886 | generate_years(item, year_start, year_end) 887 | update_spray_list(item) 888 | elif sport == "nhl" or sport == "all": 889 | for score in stanleycup_scores: 890 | # Basic concat with score 891 | item = team + score 892 | generate_years(item, year_start, year_end) 893 | update_spray_list(item) 894 | # Basic prepend with score 895 | item = score + team 896 | generate_years(item, year_start, year_end) 897 | update_spray_list(item) 898 | for attr in temp_attrs: 899 | for sep in temp_separators: 900 | # Get basic permutation with separators 901 | item = team + sep + score + attr 902 | generate_years(item, year_start, year_end) 903 | update_spray_list(item) 904 | # Get basic permutation with separators 905 | item = score + attr + sep + team 906 | generate_years(item, year_start, year_end) 907 | update_spray_list(item) 908 | bar.next() 909 | bar.finish() 910 | 911 | 912 | def gen_separators(list_mode, year_start, year_end): 913 | temp_list = spray_list.copy() 914 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating separators list", suffix='%(percent)d%%', max=len(temp_list)) 915 | if list_mode == "custom": 916 | for item in temp_list.values(): 917 | for sep in custom_sep_list: 918 | # Get year permutation with separators 919 | new_item = item + sep 920 | generate_years(new_item, year_start, year_end) 921 | sep_list.append(new_item) 922 | # Get year permutation with separators prepend 923 | new_item = sep + item 924 | generate_years(new_item, year_start, year_end) 925 | sep_list.append(new_item) 926 | bar.next() 927 | else: 928 | for item in temp_list.values(): 929 | for sep in common_separators: 930 | # Get year permutation with separators 931 | new_item = item + sep 932 | generate_years(new_item, year_start, year_end) 933 | sep_list.append(new_item) 934 | # Get year permutation with separators prepend 935 | new_item = sep + item 936 | generate_years(new_item, year_start, year_end) 937 | sep_list.append(new_item) 938 | bar.next() 939 | bar.finish() 940 | 941 | def gen_attributes(list_mode, year_start, year_end): 942 | temp_list = spray_list.copy() 943 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating attributes list", suffix='%(percent)d%%', max=len(temp_list)) 944 | if list_mode == "custom": 945 | for item in temp_list.values(): 946 | for attr in custom_attr_list: 947 | # Get basic concat 948 | new_item = item + attr 949 | generate_years(new_item, year_start, year_end) 950 | attr_list.append(new_item) 951 | 952 | # Prepend custom permutation 953 | new_item = attr + item 954 | generate_years(new_item, year_start, year_end) 955 | attr_list.append(new_item) 956 | 957 | # Append custom permutation 958 | generate_years(item, year_start, year_end, attr) 959 | attr_list.append(item) 960 | bar.next() 961 | else: 962 | for item in temp_list.values(): 963 | for attr in attributes: 964 | # Get basic concat 965 | new_item = item + attr 966 | # only concat with ! before the year for quick mode 967 | if isQuick and attr in ("!"): 968 | generate_years(new_item, year_start, year_end) 969 | elif not isQuick: 970 | generate_years(new_item, year_start, year_end) 971 | 972 | # only add just the raw concat if the item is not a month or season for quick mode 973 | if isQuick and item not in months and item not in seasons: 974 | attr_list.append(new_item) 975 | elif not isQuick: 976 | attr_list.append(new_item) 977 | 978 | # Prepend permutation if quick mode isn't selected 979 | if not isQuick: 980 | new_item = attr + item 981 | generate_years(new_item, year_start, year_end) 982 | attr_list.append(new_item) 983 | 984 | # Append permutation but just use the default '!' or '#' variations since they make the most sense when combined with years 985 | if attr in ("!", "!!", "#", "##"): 986 | generate_years(item, year_start, year_end, attr) 987 | bar.next() 988 | bar.finish() 989 | 990 | def gen_attrs_separators(list_mode, year_start, year_end): 991 | temp_list = spray_list.copy() 992 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating attributes + separators list", suffix='%(percent)d%%', max=len(temp_list)) 993 | if list_mode == "custom": 994 | for item in temp_list.values(): 995 | for attr in custom_attr_list: 996 | for sep in custom_sep_list: 997 | # Permutation separator and attribute 998 | new_item = item + sep + attr 999 | generate_years(new_item, year_start, year_end) 1000 | attr_sep_list.append(new_item) 1001 | # Prepend separator and attribute 1002 | new_item = attr + sep + item 1003 | generate_years(new_item, year_start, year_end) 1004 | attr_sep_list.append(new_item) 1005 | bar.next() 1006 | else: 1007 | for item in temp_list.values(): 1008 | for attr in attributes: 1009 | for sep in common_separators: 1010 | # Permutation separator and attribute 1011 | new_item = item + sep + attr 1012 | generate_years(new_item, year_start, year_end) 1013 | attr_sep_list.append(new_item) 1014 | # Prepend separator and attribute 1015 | new_item = attr + sep + item 1016 | generate_years(new_item, year_start, year_end) 1017 | attr_sep_list.append(new_item) 1018 | bar.next() 1019 | bar.finish() 1020 | 1021 | 1022 | # If the letter mode is enabled this will iterate over all generated items and do a replacement on common letters for 1337 speak or other common substitutes 1023 | def gen_letter_replacement(): 1024 | # Letters list, mostly common vowels with some common consonants 1025 | letters = "AEIOSaeios" 1026 | temp_list = spray_list.copy() 1027 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating letter replacement list", suffix='%(percent)d%%', max=len(temp_list)) 1028 | for item in temp_list.values(): 1029 | for l in letters: 1030 | if l.lower() == "a": 1031 | new_item = item.replace(l.lower(), "4") 1032 | update_spray_list(new_item) 1033 | new_item = item.replace(l.lower(), "@") 1034 | update_spray_list(new_item) 1035 | if l.lower() == "e": 1036 | new_item = item.replace(l.lower(), "3") 1037 | update_spray_list(new_item) 1038 | if l.lower() == "i": 1039 | new_item = item.replace(l.lower(), "1") 1040 | update_spray_list(new_item) 1041 | new_item = item.replace(l.lower(), "!") 1042 | update_spray_list(new_item) 1043 | if l.lower() == "o": 1044 | new_item = item.replace(l.lower(), "0") 1045 | update_spray_list(new_item) 1046 | if l.lower() == "s": 1047 | new_item = item.replace(l.lower(), "5") 1048 | update_spray_list(new_item) 1049 | new_item = item.replace(l.lower(), "$") 1050 | update_spray_list(new_item) 1051 | bar.next() 1052 | 1053 | def combine_attrs_separators(): 1054 | 1055 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Adding relevant attribute/separator permutations to final list, this could take some time...") 1056 | 1057 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Progress", suffix='%(percent)d%%', max=3) 1058 | 1059 | # Multi threading each call to speed things up since each of these steps is independent of the other 1060 | sep_thread = threading.Thread(target=combine_seps, args=[]) 1061 | attr_thread = threading.Thread(target=combine_attrs, args=[]) 1062 | attr_sep_thread= threading.Thread(target=cobmine_attr_seps, args=[]) 1063 | 1064 | sep_thread.start() 1065 | attr_thread.start() 1066 | attr_sep_thread.start() 1067 | 1068 | sep_thread.join() 1069 | bar.next() 1070 | attr_thread.join() 1071 | bar.next() 1072 | attr_sep_thread.join() 1073 | bar.next() 1074 | bar.finish() 1075 | 1076 | 1077 | def combine_seps(): 1078 | if len(sep_list) > 0: 1079 | for sep in sep_list: 1080 | update_spray_list(sep) 1081 | def combine_attrs(): 1082 | if len(attr_list) > 0: 1083 | for attr in attr_list: 1084 | update_spray_list(attr) 1085 | def cobmine_attr_seps(): 1086 | if len(attr_sep_list) > 0: 1087 | for item in attr_sep_list: 1088 | update_spray_list(item) 1089 | 1090 | def add_separators(separator): 1091 | common_separators.append(separator) 1092 | 1093 | def add_attributes(attr): 1094 | attributes.append(attr) 1095 | 1096 | def generate_sports(year_start, year_end): 1097 | generate_nfl(year_start, year_end) 1098 | generate_nba(year_start, year_end) 1099 | generate_mlb(year_start, year_end) 1100 | generate_nhl(year_start, year_end) 1101 | 1102 | def generate_all(year_start, year_end): 1103 | if len(custom_wordlist) > 0: 1104 | generate_custom(year_start, year_end) 1105 | generate_months(year_start, year_end) 1106 | generate_seasons(year_start, year_end) 1107 | generate_password_perms(year_start, year_end) 1108 | generate_sports(year_start, year_end) 1109 | 1110 | 1111 | def main(): 1112 | 1113 | banner = ''' 1114 | _ 1115 | ( \_ 1116 | ( \_ 1117 | ( \_ 1118 | ( \_ ___ 1119 | ( Password \ | | 1120 | ( Spray |คคคคคคคค|___| 1121 | ( _ / | 1122 | ( _ / /~~~~~~~~~\\ 1123 | ( _ / ( Spray ) 1124 | (_/ | This | 1125 | | | 1126 | | Get | 1127 | | Creds | 1128 | |_________| 1129 | 1130 | Original Art by Alex Chudnovsky (Unaffiliated) 1131 | Spraygen tool by 3ndG4me 1132 | Version 1.7 1133 | ''' 1134 | 1135 | print(Fore.BLUE + banner + Style.RESET_ALL) 1136 | 1137 | parser = argparse.ArgumentParser(description='Parse Spray List Arguments.') 1138 | parser.add_argument('--year_start', help="starting year for a range of years", type=int) 1139 | parser.add_argument('--year_end', help="ending year for a range of years", type=int) 1140 | parser.add_argument('-s', metavar='separators', help="a comma delimited list of one or more separators", type=str) 1141 | parser.add_argument('-a', metavar='attributes', help="a comma delimited list of one or more attributes", type=str) 1142 | parser.add_argument('-w', metavar='wordlist', help="path to a custom wordlist", type=str) 1143 | parser.add_argument('-n', metavar='single word', help="single custom word to generate a custom wordlist with", type=str) 1144 | parser.add_argument('--mode', help="Mode for list generation. Can be all, no separators, no attributes, only years, plain, letter, quick, or custom (will only use parameters passed into -s or -a).", choices=['all', 'nosep', 'noattr', 'years', 'plain', 'letter', 'quick', 'custom'], default="all", type=str) 1145 | parser.add_argument('--type', help="Type of list to generate. Can be all, iterative, sports, nfl, nba, mlb, nhl, months, seasons, password, common, short, or custom. Choosing 'all' executes all options except for 'iterative' which must be run manually.", choices=['all', 'iterative', 'sports', 'nfl', 'nba', 'mlb', 'nhl', 'months', 'seasons', 'password', 'common', 'short', 'custom'], default="all", type=str, nargs="+") 1146 | parser.add_argument('--iter', help="Keyspace mode for iterative list generation. Only works when --type is set to 'iterative'. Can be ascii, num, spec, asciinum, asciispec, numspec, or full. Will generate all permutations of the selected keyspace with a given length set with the --size parameter.", choices=['ascii', 'num', 'spec', 'asciinum', 'asciispec', 'numspec', 'full'], default="full", type=str) 1147 | parser.add_argument('--size', help="Length of passwords generated by a set keyspace. Only works when --type is set to 'iterative' and an --iter keyspace mode is set.", default="4", type=int) 1148 | parser.add_argument('--min_length', help="Minimum length of passwords to include in the list. (Default: 1)", default=1, type=int) 1149 | parser.add_argument('--max_length', help="Maximum length of passwords to include in the list (Default: 999)", default=999, type=int) 1150 | parser.add_argument('-o', metavar='output file', help="name of a file to create and write the final output to", type=str) 1151 | parser.add_argument('-p', action="store_true", help="prints the output line by line as plaintext", dest="p") 1152 | parser.add_argument('--sort', help="Sort final output. Sorting methods supported are nosort, asc, desc, random.", choices=['nosort', 'asc', 'desc', 'random'], default="nosort", type=str) 1153 | parser.add_argument('-v', action="store_true", help="prints the current version of spraygen and exits", dest="v") 1154 | 1155 | args = parser.parse_args() 1156 | 1157 | if args.v: 1158 | print("Spraygen Version: 1.6") 1159 | return 1160 | 1161 | if args.year_start == None: 1162 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Year Start not provided, setting to current year...") 1163 | args.year_start = datetime.now().year 1164 | 1165 | if args.year_end == None: 1166 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Year End not provided, setting to current year...") 1167 | args.year_end = datetime.now().year 1168 | 1169 | if args.s != None: 1170 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Adding custom separators to list...") 1171 | temp_list = args.s.split(",") 1172 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Progress", suffix='%(percent)d%%', max=len(temp_list)) 1173 | if args.mode == "custom": 1174 | for sep in temp_list: 1175 | custom_sep_list.append(sep) 1176 | bar.next() 1177 | else: 1178 | for sep in temp_list: 1179 | common_separators.append(sep) 1180 | bar.next() 1181 | bar.finish() 1182 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- custom separators added in %s seconds ---" % (time.time() - start_time)) 1183 | if args.a != None: 1184 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Adding custom attributes to list...") 1185 | temp_list = args.a.split(",") 1186 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Progress", suffix='%(percent)d%%', max=len(temp_list)) 1187 | if args.mode == "custom": 1188 | for attr in temp_list: 1189 | custom_attr_list.append(attr) 1190 | bar.next() 1191 | else: 1192 | for attr in temp_list: 1193 | attr_list.append(attr) 1194 | bar.next() 1195 | bar.finish() 1196 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- custom attributes added in %s seconds ---" % (time.time() - start_time)) 1197 | if args.w != None: 1198 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Creating custom wordlist...") 1199 | fileSize = open(args.w, "r") 1200 | bar = Bar(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Progress", suffix='%(percent)d%%', max=len(fileSize.readlines())) 1201 | fileSize.close() 1202 | 1203 | global custom_wordlist 1204 | 1205 | customFile = open(args.w, "r") 1206 | for item in customFile: 1207 | custom_wordlist.append(item.strip()) 1208 | bar.next() 1209 | customFile.close() 1210 | bar.finish() 1211 | # Filter any blank lines 1212 | custom_wordlist = list(filter(None, custom_wordlist)) 1213 | 1214 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- custom wordlist loaded in %s seconds ---" % (time.time() - start_time)) 1215 | if args.n != None: 1216 | custom_wordlist.append(args.n) 1217 | 1218 | # Set password length filters 1219 | global max_length 1220 | global min_length 1221 | max_length = args.max_length 1222 | min_length = args.min_length 1223 | 1224 | if args.mode != "all": 1225 | global isPlain 1226 | global isYears 1227 | global isNotSep 1228 | global isNoAttr 1229 | global isLetter 1230 | global isQuick 1231 | if args.mode == "plain": 1232 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating PLAIN list...") 1233 | isPlain = True 1234 | isYears = False 1235 | isNotSep = True 1236 | isNoAttr = True 1237 | elif args.mode == "nosep": 1238 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating NO SEPARATOR list...") 1239 | isNotSep = True 1240 | elif args.mode == "noattr": 1241 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating NO ATTRIBUTE list...") 1242 | isNoAttr = True 1243 | elif args.mode == "years": 1244 | isPlain = False 1245 | isYears = True 1246 | isNotSep = True 1247 | isNoAttr = True 1248 | elif args.mode == "letter": 1249 | isLetter = True 1250 | elif args.mode == "custom": 1251 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating CUSTOM SEPARATOR/ATTRIBUTE list...") 1252 | isPlain = True 1253 | isYears = True 1254 | isNotSep = True 1255 | isNoAttr = True 1256 | elif args.mode == "quick": 1257 | isQuick = True 1258 | isPlain = False 1259 | isNotSep = True 1260 | isYears = True 1261 | 1262 | if "all" not in args.type: 1263 | if "months" in args.type: 1264 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating MONTHS list...") 1265 | generate_months(args.year_start, args.year_end) 1266 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated months in %s seconds ---" % (time.time() - start_time)) 1267 | if "iterative" in args.type: 1268 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating ITERATIVE list...") 1269 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "List size will be: " + str(args.size)) 1270 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "List keyspace will be: " + args.iter) 1271 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "This is generating literally every permutation in that keyspace, this will take some time...") 1272 | generate_keyspace_list(args.iter, args.size, args.year_start, args.year_end) 1273 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated iterative in %s seconds ---" % (time.time() - start_time)) 1274 | if "sports" in args.type: 1275 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating SPORTS list...") 1276 | generate_sports(args.year_start, args.year_end) 1277 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated sports in %s seconds ---" % (time.time() - start_time)) 1278 | if "nfl" in args.type: 1279 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating NFL list...") 1280 | generate_nfl(args.year_start, args.year_end) 1281 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated nfl in %s seconds ---" % (time.time() - start_time)) 1282 | if "nba" in args.type: 1283 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating NBA list...") 1284 | generate_nba(args.year_start, args.year_end) 1285 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated nba in %s seconds ---" % (time.time() - start_time)) 1286 | if "mlb" in args.type: 1287 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating MLB list...") 1288 | generate_mlb(args.year_start, args.year_end) 1289 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated mlb in %s seconds ---" % (time.time() - start_time)) 1290 | if "nhl" in args.type: 1291 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating NHL list...") 1292 | generate_nhl(args.year_start, args.year_end) 1293 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated nhl in %s seconds ---" % (time.time() - start_time)) 1294 | if "seasons" in args.type: 1295 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating SEASONS list...") 1296 | generate_seasons(args.year_start, args.year_end) 1297 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated seasons in %s seconds ---" % (time.time() - start_time)) 1298 | if "password" in args.type: 1299 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating PASSWORD list...") 1300 | generate_password_perms(args.year_start, args.year_end) 1301 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated 'password' in %s seconds ---" % (time.time() - start_time)) 1302 | if "custom" in args.type: 1303 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating CUSTOM list...") 1304 | generate_custom(args.year_start, args.year_end) 1305 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated custom in %s seconds ---" % (time.time() - start_time)) 1306 | if "common" in args.type: 1307 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating COMMON list...") 1308 | generate_common(args.year_start, args.year_end) 1309 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated common list in %s seconds ---" % (time.time() - start_time)) 1310 | if "short" in args.type: 1311 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating SHORT list...") 1312 | generate_short(args.year_start, args.year_end) 1313 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated short list in %s seconds ---" % (time.time() - start_time)) 1314 | else: 1315 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating ALL list...(If a custom wordlist is specified it will be used)") 1316 | generate_all(args.year_start, args.year_end) 1317 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- generated all in %s seconds ---" % (time.time() - start_time)) 1318 | 1319 | if isNotSep == False: 1320 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating separators...") 1321 | gen_separators(args.mode, args.year_start, args.year_end) 1322 | if len(sports_scores_list) > 0: 1323 | gen_sports_separators(args.mode, args.type, args.year_start, args.year_end) 1324 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- separators generated in %s seconds ---" % (time.time() - start_time)) 1325 | if isNoAttr == False: 1326 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating attributes...") 1327 | gen_attributes(args.mode, args.year_start, args.year_end) 1328 | if len(sports_scores_list) > 0: 1329 | gen_sports_attributes(args.mode, args.type, args.year_start, args.year_end) 1330 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- attributes generated in %s seconds ---" % (time.time() - start_time)) 1331 | if isNotSep == False and isNoAttr == False: 1332 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating attributes + separators...") 1333 | gen_attrs_separators(args.mode, args.year_start, args.year_end) 1334 | if len(sports_scores_list) > 0: 1335 | gen_sports_attrs_separators(args.mode, args.type, args.year_start, args.year_end) 1336 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- attribute + separators generated in %s seconds ---" % (time.time() - start_time)) 1337 | if args.mode == "custom": 1338 | if len(custom_sep_list) > 0: 1339 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating custom separators list...") 1340 | gen_separators(args.mode, args.year_start, args.year_end) 1341 | if len(sports_scores_list) > 0: 1342 | gen_sports_separators(args.mode, args.type, args.year_start, args.year_end) 1343 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- custom separators generated in %s seconds ---" % (time.time() - start_time)) 1344 | if len(custom_attr_list) > 0: 1345 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating custom attributes list...") 1346 | gen_attributes(args.mode, args.year_start, args.year_end) 1347 | if len(sports_scores_list) > 0: 1348 | gen_sports_attributes(args.mode, args.type, args.year_start, args.year_end) 1349 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- custom attributes generated in %s seconds ---" % (time.time() - start_time)) 1350 | if len(custom_sep_list) > 0: 1351 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating custom attributes + separators list...") 1352 | gen_attrs_separators(args.mode, args.year_start, args.year_end) 1353 | if len(sports_scores_list) > 0: 1354 | gen_sports_attrs_separators(args.mode, args.type, args.year_start, args.year_end) 1355 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- custom attributes + separators generated in %s seconds ---" % (time.time() - start_time)) 1356 | elif isPlain == True or (isNotSep == True and isNoAttr == True): 1357 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Skipping separators and attributes...") 1358 | 1359 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Adding new generated items to the list...") 1360 | combine_attrs_separators() 1361 | generate_year_list_permutations() 1362 | 1363 | if isLetter: 1364 | print(Fore.BLUE + "[*] Info: " + Style.RESET_ALL + "Generating letter replacement...") 1365 | gen_letter_replacement() 1366 | print(Fore.GREEN + "\n[+] Success: " + Style.RESET_ALL + "--- letter replacement generated in %s seconds ---" % (time.time() - start_time)) 1367 | 1368 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "--- initial list built in %s seconds ---" % (time.time() - start_time)) 1369 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "Bulding final list!") 1370 | 1371 | final_list = list(spray_list.values()) 1372 | if args.sort == "asc": 1373 | final_list.sort() 1374 | elif args.sort == "desc": 1375 | final_list.sort(reverse=True) 1376 | elif args.sort == "random": 1377 | random.shuffle(final_list) 1378 | 1379 | 1380 | if args.o != None: 1381 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "Writing output to: " + args.o) 1382 | f = open(args.o, "a") 1383 | bar = Bar(Fore.GREEN + "[*] Success: " + Style.RESET_ALL + "Progress", suffix='%(percent)d%%', max=len(final_list)) 1384 | for password in final_list: 1385 | f.write(password + "\n") 1386 | bar.next() 1387 | f.close() 1388 | bar.finish() 1389 | 1390 | if args.p == True: 1391 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "Printing final list:") 1392 | for password in final_list: 1393 | print(password) 1394 | 1395 | print(Fore.GREEN + "\n[+] Success: " + Style.RESET_ALL + "--- finished in %s seconds ---" % (time.time() - start_time)) 1396 | print(Fore.GREEN + "[+] Success: " + Style.RESET_ALL + "Done!") 1397 | 1398 | 1399 | try: 1400 | main() 1401 | except Exception as e: 1402 | print(Fore.RED + "\n[!] Error: " + Style.RESET_ALL + str(e)) 1403 | --------------------------------------------------------------------------------