-
Notifications
You must be signed in to change notification settings - Fork 29
/
Copy pathhash-tool.py
63 lines (48 loc) · 1.99 KB
/
hash-tool.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
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys
import argparse
from operator import attrgetter
import findmyhash
from findmyhash import services
from findmyhash.cracker import Cracker
from findmyhash.algo import Algo
# TODO: redo the google search if not found
# In fact, no, how hard is it to actually do it by yourself...?
def crack(flags):
to_crack = None
if flags.file is True:
to_crack = open(flags.ARG, "r", encoding="utf-8")
else:
to_crack = [flags.ARG]
try:
c = Cracker(to_crack)
c.crack(Algo(flags.algo.lower()))
finally:
try:
to_crack.close()
except AttributeError:
pass
def algo_list(flags):
for algo in sorted(services.Service.get_supported_algos(), key=attrgetter("name")):
print(algo.name)
def print_help(flags):
flags.parser.print_help()
def main(args):
parser = argparse.ArgumentParser(prog=args[0])
parser.set_defaults(handler=print_help, parser=parser)
subparsers = parser.add_subparsers(help='sub-command help')
parser_crack = subparsers.add_parser('crack', help='crack help')
parser_crack.add_argument('-f', '--file', action='store_true', help='Indicates that ARG is a file storing hashes, one per')
parser_crack.add_argument('-a', '--algo', required=True, action='store', help='Algorithm used to generate the hash')
parser_crack.add_argument('ARG', help='Either the file or the hash to be cracked')
parser_crack.set_defaults(handler=crack, parser=parser_crack)
parser_algo = subparsers.add_parser('algo', help='crack help')
parser_algo.set_defaults(handler=print_help, parser=parser_algo)
algo_subparsers = parser_algo.add_subparsers(help='sub-commanh help')
parser_algo_list = algo_subparsers.add_parser('list', help='list all available algorithms')
parser_algo_list.set_defaults(handler=algo_list, parser=parser_algo_list)
args = parser.parse_args(args[1:])
args.handler(args)
if __name__ == "__main__":
main(sys.argv)