forked from Svenito/exploit-pattern
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpattern.py
More file actions
executable file
·93 lines (74 loc) · 2.54 KB
/
pattern.py
File metadata and controls
executable file
·93 lines (74 loc) · 2.54 KB
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
#!/usr/bin/env python3
import sys
from string import ascii_uppercase, ascii_lowercase, digits
MAX_PATTERN_LENGTH = 20280
class MaxLengthException(Exception):
pass
class WasNotFoundException(Exception):
pass
def pattern_gen(length):
"""
Generate a pattern of a given length up to a maximum
of 20280 - after this the pattern would repeat
"""
if length >= MAX_PATTERN_LENGTH:
raise MaxLengthException('ERROR: Pattern length exceeds maximum of %d' % MAX_PATTERN_LENGTH)
pattern = ''
for upper in ascii_uppercase:
for lower in ascii_lowercase:
for digit in digits:
if len(pattern) < length:
pattern += upper+lower+digit
else:
out = pattern[:length]
return out
def pattern_search(search_pattern):
"""
Search for search_pattern in pattern. Convert from hex if needed
Looking for needle in haystack
"""
needle = search_pattern
try:
if needle.startswith('0x'):
# Strip off '0x', convert to ASCII and reverse
needle = needle[2:]
needle = bytearray.fromhex(needle).decode('ascii')
needle = needle[::-1]
except (ValueError, TypeError) as e:
raise
haystack = ''
for upper in ascii_uppercase:
for lower in ascii_lowercase:
for digit in digits:
haystack += upper+lower+digit
found_at = haystack.find(needle)
if found_at > -1:
return found_at
raise WasNotFoundException('Couldn`t find %s (%s) anywhere in the pattern.' %
(search_pattern, needle))
def print_help():
print('Usage: %s LENGTH|PATTERN' % sys.argv[0])
print()
print('Generate a pattern of length LENGTH or search for PATTERN and ')
print('return its position in the pattern.')
print()
sys.exit(0)
if __name__ == '__main__':
if len(sys.argv) < 2:
print_help()
if sys.argv[1] == '-h' or sys.argv[1] == '--help':
print_help()
if sys.argv[1].isdigit():
pat = pattern_gen(int(sys.argv[1]))
print(pat)
else:
try:
found = pattern_search(sys.argv[1])
print('Pattern %s first occurrence at position %d in pattern.' %
(sys.argv[1], found))
except WasNotFoundException as e:
print(e)
sys.exit(1)
except (ValueError, TypeError):
print('Unable to convert hex input for searching. Invalid hex?')
sys.exit(1)