├── 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 |
--------------------------------------------------------------------------------