-
Notifications
You must be signed in to change notification settings - Fork 27
/
printer.py
139 lines (127 loc) · 6.83 KB
/
printer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
from enum import Enum
class Level(Enum):
INFO = 0
WARNING = 1
ERROR = 2
SUCCESS = 3
DEBUG = 4
class Printer:
# ---------------------------------
# "Private" static class variables
# ---------------------------------
__grey = 37
__red = 91
__green = 92
__yellow = 93
__blue = 94
__magenta = 95
__cyan = 96
__white = 97
__bold = "\033[1m"
__not_bold = "\033[21m"
__mVerbose: bool = False
__mDebug: bool = False
__mColorMap = {
Level.INFO: __white,
Level.WARNING: __yellow,
Level.ERROR: __red,
Level.SUCCESS: __green,
Level.DEBUG: __cyan
}
__mLevelMap = {
Level.INFO: "[*] INFO: ",
Level.WARNING: "[*] WARNING: ",
Level.ERROR: "[*] ERROR: ",
Level.SUCCESS: "[*] SUCCESS: ",
Level.DEBUG: "[*] DEBUG: "
}
# ---------------------------------
# "Public" static class variables
# ---------------------------------
@property # getter method
def verbose(self) -> bool:
return self.__mVerbose
@verbose.setter # setter method
def verbose(self: object, pVerbose: bool):
self.__mVerbose = pVerbose
@property # getter method
def debug(self) -> bool:
return self.__mDebug
@debug.setter # setter method
def debug(self: object, pDebug: bool):
self.__mDebug = pDebug
# ---------------------------------
# public instance constructor
# ---------------------------------
#def __init__(self) -> None:
# self.__mVerbose: bool = False
# self.__mDebug: bool = False
# ---------------------------------
# private instance methods
# ---------------------------------
# ---------------------------------
# public instance methods
# ---------------------------------
# ---------------------------------
# public static class methods
# ---------------------------------
@staticmethod
def print(pMessage: str, pLevel: Level) -> None:
# Only print INFO and SUCCESS messages if verbose is true
# Only print DEBUG messages if debug is true
# Warning, Error are always printed
if (pLevel in [Level.INFO, Level.SUCCESS]) and not Printer.verbose: return None
if (pLevel in [Level.DEBUG]) and not Printer.debug: return None
print("\033[1;{}m{}{}\033[21;0m".format(Printer.__mColorMap[pLevel], Printer.__mLevelMap[pLevel], pMessage))
@staticmethod
def print_example_usage():
print("""
Attempt to crack hashes using JTR Single Crack Mode\n
\tpython3 byepass.py --verbose --hash-format=Raw-SHA1 --jtr-single-crack --input-file=linkedin-1.hashes
\tpython3 byepass.py -v -f Raw-SHA1 -u -i linkedin-1.hashes\n
Attempt to crack linked-in hashes using base words linkedin and linked\n
\tpython3 byepass.py --verbose --hash-format=Raw-SHA1 --basewords=linkedin,linked --input-file=linkedin-1.hashes
\tpython3 byepass.py -v -f Raw-SHA1 -w linkedin,linked -i linkedin-1.hashes\n
Attempt to crack hashes using a large list of known passwords\n
\tpython3 byepass.py --verbose --hash-format=Raw-MD5 --hailmary --input-file=hashes.txt
\tpython3 byepass.py -f Raw-MD5 -j="--fork=4" -m -i hashes.txt\n
Attempt to brute force words from 3 to 5 characters in length\n
\tpython3 byepass.py --verbose --hash-format=Raw-MD5 --brute-force=3,5 --input-file=hashes.txt
\tpython3 byepass.py -f Raw-MD5 -j="--fork=4" -v -b 3,5 -i hashes.txt\n
Use Pathwell masks 1-5\n
\tpython3 byepass.py --verbose --hash-format=Raw-MD5 --pathwell=1,5 --input-file=hashes.txt
\tpython3 byepass.py -f Raw-MD5 -j="--fork=4" -v -l 1,5 -i hashes.txt\n
Attempt to crack password hashes found in input file "password.hashes" using default techniques\n
\tpython3 byepass.py --verbose --hash-format=descrypt --input-file=password.hashes
\tpython3 byepass.py -v -f descrypt -i password.hashes\n
Be more aggressive by using techniques level 4 in attempt to crack password hashes found in input file "password.hashes"\n
\tpython3 byepass.py --verbose --techniques=4 --hash-format=descrypt --input-file=password.hashes
\tpython3 byepass.py -v -t 4 -f descrypt -i password.hashes\n
Go bonkers and try all techniques. Start with technique level 1 and proceed to level 14 in attempt to crack password hashes found in input file "password.hashes"\n
\tpython3 byepass.py --verbose --techniques=1,2,3,4,5,6,7,8,9,10,11,12,13,14 --hash-format=descrypt --input-file=password.hashes
\tpython3 byepass.py -v -t 1,2,3,4,5,6,7,8,9,10,11,12,13,14 -f descrypt -i password.hashes\n
Only try first two techniques. Start with technique level 1 and proceed to level 2 in attempt to crack password hashes found in input file "password.hashes"\n
\tpython3 byepass.py --verbose --techniques=1,2 --hash-format=descrypt --input-file=password.hashes
\tpython3 byepass.py -v -t 1,2 -f descrypt -i password.hashes\n
Attempt to crack password hashes found in input file "password.hashes", then run statistical analysis to determine masks needed to crack 50 percent of passwords, and try to crack again using the masks.\n
\tpython3 byepass.py --verbose --hash-format=descrypt --stat-crack --percentile=0.50 --input-file=password.hashes
\tpython3 byepass.py -v -f descrypt -s -p 0.50 -i password.hashes\n
\"Real life\" example attempting to crack 25 percent of the linked-in hash set\n
\tpython3 byepass.py --verbose --hash-format=Raw-SHA1 --stat-crack --percentile=0.25 --input-file=linkedin.hashes
\tpython3 byepass.py -v -f Raw-SHA1 -s -f 0.25 -i linkedin.hashes\n
Attempt to crack linked-in hashes using base words linkedin and linked\n
\tpython3 byepass.py --verbose --hash-format=Raw-SHA1 --basewords=linkedin,linked --input-file=linkedin-1.hashes
\tpython3 byepass.py -v -f -w linkedin,linked -i linkedin-1.hashes\n
Run statistical analysis to determine masks needed to crack 50 percent of passwords, and try to crack using the masks.\n
\tpython3 byepass.py -v --hash-format=descrypt --stat-crack --percentile=0.50 --input-file=password.hashes
\tpython3 byepass.py -v -f descrypt -s -p 0.50 -i password.hashes\n
Use recycle mode to try cracking remaining hashes using root words generated from already cracked passwords\n
\tpython3 byepass.py --verbose --hash-format=descrypt --recycle --input-file=password.hashes
\tpython3 byepass.py -v -f descrypt -r -i password.hashes\n
Use JTR prince mode with dictionary prince.txt\n
\tpython3 byepass.py --verbose --hash-format=descrypt --jtr-prince --input-file=password.hashes
\tpython3 byepass.py -v -f descrypt -c -i password.hashes\n
Use pass-through to pass fork command to JTR\n
\tpython3 byepass.py --verbose --pass-through="--fork=4" --hash-format=descrypt --input-file=password.hashes
\tpython3 byepass.py -v -j="--fork=4" -f descrypt -i password.hashes
""")