rainbownatorjson/rainbownator.py

100 lines
10 KiB
Python

import hashlib
import json
import threading
from os.path import exists
import numpy as np
import argparse
def parser():
parser = argparse.ArgumentParser(description="rainbownator args")
parser.add_argument("--hash")
parser.add_argument("--algo")
parser.add_argument("--wlist")
args = parser.parse_args()
check_args(args)
table={}
def jsoncrack(jsonf, hashin):
with open(jsonf,"r") as f:
table=json.loads(f.read())
print(f"from tables - {hashin} : {table[hashin]}")
exit()
def crack(hashin, algo, passcomp):
match algo:
case "md5":
hashtype=hashlib.md5
case "sha1":
hashtype=hashlib.sha1
case "sha224":
hashtype=hashlib.sha224
case "sha256":
hashtype=hashlib.sha256
case "sha384":
hashtype=hashlib.sha384
case "sha512":
hashtype=hashlib.sha512
table[hashtype(passcomp.encode()).hexdigest()]=passcomp
if hashtype(passcomp.encode()).hexdigest() == hashin:
print(f"{hashin} : {passcomp}")
def split(a,n):
return(np.array_split(a, n))
def check_args(args):
if exists(f"{args.wlist}-{args.algo}.json"):
jsoncrack(f"{args.wlist}-{args.algo}.json",args.hash)
else:
with open(args.wlist,"r") as wf:
lines=wf.readlines()
if(len(lines)) > 40:
number=int(len(lines)/40)
else:
number=int(len(lines))
chunks=split(lines,number)
for chunk in chunks:
threads=[]
for line in chunk:
t=threading.Thread(target=crack, args=(args.hash, args.algo, line.replace("\n","")))
threads.append(t)
t.start()
for t in threads:
t.join()
with open(f"{args.wlist}-{args.algo}.json","w") as f:
f.write(json.dumps(table))
print('''\033[49m \033[m
\033[49m \033[m
\033[49m \033[48;5;102m \033[38;5;102;49m▄\033[49m \033[m
\033[49m \033[49;38;5;102m▀\033[48;5;102m \033[38;5;102;48;5;102m▄\033[38;5;102;49m▄\033[49m \033[38;5;145;49m▄▄\033[49m \033[38;5;145;49m▄▄▄▄▄▄▄\033[49m \033[m
\033[49m \033[48;5;102m \033[38;5;145;48;5;102m▄\033[48;5;145m \033[38;5;102;48;5;145m▄\033[48;5;102m \033[48;5;145m \033[38;5;145;48;5;145m▄\033[38;5;145;49m▄▄▄\033[49m \033[m
\033[49m \033[49;38;5;102m▀\033[38;5;145;48;5;102m▄\033[48;5;145m \033[49m \033[38;5;145;48;5;145m▄\033[48;5;145m \033[49m \033[38;5;145;49m▄▄\033[49m \033[m
\033[49m \033[48;5;145m \033[49;38;5;145m▀\033[38;5;248;49m▄\033[48;5;145m \033[38;5;102;48;5;245m▄\033[38;5;102;48;5;102m▄\033[48;5;145m \033[38;5;145;49m▄▄▄▄\033[49m \033[38;5;167;49m▄▄▄▄▄▄▄▄\033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[49m \033[38;5;145;49m▄\033[48;5;145m \033[49m \033[48;5;145m \033[48;5;102m \033[48;5;145m \033[38;5;145;49m▄▄▄▄\033[49m \033[38;5;167;49m▄▄▄▄▄\033[48;5;167m \033[38;5;167;48;5;167m▄\033[38;5;167;49m▄▄▄\033[49m \033[m
\033[49m \033[38;5;145;49m▄▄\033[48;5;145m \033[48;5;102m \033[48;5;145m \033[38;5;145;48;5;145m▄\033[49m \033[38;5;246;48;5;145m▄\033[48;5;145m \033[49m \033[38;5;102;48;5;145m▄\033[38;5;247;48;5;145m▄\033[48;5;145m \033[38;5;145;49m▄\033[49m \033[38;5;167;48;5;167m▄\033[48;5;167m \033[38;5;167;48;5;167m▄\033[38;5;167;49m▄\033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[48;5;145m \033[48;5;102m \033[38;5;102;48;5;145m▄\033[48;5;145m \033[38;5;102;48;5;102m▄▄\033[49;38;5;145m▀▀\033[48;5;145m \033[38;5;145;48;5;145m▄\033[49m \033[48;5;145m \033[38;5;145;48;5;102m▄▄▄\033[38;5;248;48;5;145m▄\033[38;5;102;48;5;145m▄▄\033[38;5;245;48;5;145m▄\033[48;5;145m \033[49m \033[38;5;167;49m▄\033[48;5;167m \033[38;5;173;48;5;167m▄▄▄▄▄\033[48;5;173m \033[38;5;173;48;5;167m▄▄▄\033[48;5;167m \033[38;5;167;49m▄\033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[38;5;145;48;5;145m▄\033[48;5;145m \033[38;5;145;48;5;247m▄\033[48;5;102m \033[38;5;102;48;5;145m▄\033[48;5;145m \033[38;5;145;49m▄▄▄▄\033[49m \033[49;38;5;145m▀▀▀▀\033[48;5;145m \033[49m \033[38;5;145;49m▄\033[48;5;145m \033[49;38;5;145m▀▀\033[48;5;145m \033[38;5;145;48;5;246m▄\033[38;5;145;48;5;102m▄▄\033[49;38;5;145m▀▀▀▀\033[48;5;145m \033[49m \033[38;5;215;48;5;167m▄\033[38;5;221;48;5;167m▄\033[38;5;221;48;5;173m▄▄▄▄▄▄▄\033[38;5;221;48;5;215m▄▄\033[38;5;221;48;5;221m▄▄\033[38;5;221;48;5;215m▄▄\033[38;5;221;48;5;173m▄▄▄▄▄▄▄\033[38;5;173;48;5;173m▄\033[48;5;173m \033[38;5;173;48;5;167m▄\033[48;5;167m \033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[48;5;145m \033[38;5;248;48;5;145m▄\033[48;5;145m \033[38;5;145;48;5;145m▄▄\033[38;5;145;48;5;102m▄\033[48;5;102m \033[38;5;102;48;5;145m▄▄\033[48;5;145m \033[38;5;145;49m▄▄▄▄\033[38;5;102;48;5;102m▄\033[48;5;102m \033[48;5;145m \033[49m \033[49;38;5;145m▀▀\033[49m \033[38;5;96;49m▄\033[38;5;96;48;5;65m▄\033[38;5;60;48;5;65m▄▄▄▄▄\033[48;5;65m \033[38;5;65;48;5;71m▄\033[38;5;65;48;5;221m▄▄▄▄▄▄\033[38;5;185;48;5;221m▄\033[48;5;221m \033[38;5;221;48;5;173m▄▄\033[38;5;215;48;5;173m▄\033[48;5;173m \033[38;5;173;48;5;167m▄\033[38;5;167;48;5;167m▄▄\033[49;38;5;167m▀\033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[48;5;145m \033[38;5;243;48;5;145m▄▄\033[49;38;5;243m▀\033[49;38;5;145m▀\033[48;5;145m \033[38;5;145;48;5;145m▄\033[49m \033[49;38;5;243m▀\033[48;5;243m \033[38;5;243;48;5;243m▄\033[38;5;243;48;5;102m▄\033[49;38;5;247m▀\033[49;38;5;145m▀▀▀▀\033[48;5;145m \033[49;38;5;145m▀\033[49m \033[49;38;5;96m▀▀▀\033[38;5;96;48;5;96m▄\033[38;5;96;48;5;60m▄▄▄\033[48;5;60m \033[38;5;60;48;5;60m▄\033[38;5;60;48;5;65m▄▄▄\033[38;5;242;48;5;65m▄\033[48;5;65m \033[38;5;65;48;5;221m▄▄\033[38;5;71;48;5;221m▄\033[48;5;221m \033[38;5;221;48;5;173m▄\033[48;5;173m \033[38;5;173;49m▄\033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[48;5;145m \033[38;5;246;48;5;243m▄\033[38;5;145;48;5;243m▄\033[48;5;145m \033[49m \033[49;38;5;145m▀\033[38;5;145;48;5;249m▄\033[49m \033[48;5;145m \033[38;5;145;48;5;243m▄\033[49m \033[49;38;5;145m▀▀▀▀▀\033[49m \033[49;38;5;96m▀▀\033[48;5;96m \033[38;5;96;48;5;60m▄▄\033[38;5;60;48;5;60m▄\033[48;5;60m \033[38;5;60;48;5;242m▄\033[38;5;60;48;5;65m▄▄\033[48;5;65m \033[38;5;65;48;5;221m▄\033[48;5;221m \033[38;5;221;48;5;173m▄\033[48;5;173m \033[49;38;5;173m▀\033[49m \033[m
\033[49m \033[38;5;145;49m▄\033[48;5;145m \033[49;38;5;145m▀\033[49m \033[38;5;145;48;5;145m▄\033[48;5;145m \033[38;5;145;49m▄▄\033[49m \033[38;5;145;49m▄▄\033[48;5;145m \033[49;38;5;145m▀\033[49m \033[49;38;5;96m▀▀\033[48;5;96m \033[38;5;96;48;5;60m▄▄\033[38;5;60;48;5;60m▄\033[48;5;60m \033[38;5;60;48;5;65m▄▄\033[48;5;65m \033[38;5;65;48;5;143m▄\033[48;5;221m \033[38;5;221;49m▄\033[49m \033[m
\033[49m \033[49;38;5;145m▀\033[48;5;145m \033[49;38;5;145m▀\033[49m \033[49;38;5;145m▀▀\033[48;5;145m \033[49;38;5;145m▀▀\033[49m \033[49;38;5;96m▀▀\033[48;5;96m \033[38;5;96;48;5;60m▄▄\033[48;5;60m \033[38;5;60;48;5;65m▄\033[48;5;65m \033[48;5;221m \033[49m \033[m
\033[49m \033[49;38;5;145m▀▀▀\033[38;5;145;48;5;145m▄\033[48;5;145m \033[38;5;145;48;5;145m▄\033[49m \033[49;38;5;145m▀▀▀▀▀\033[49m \033[49;38;5;96m▀▀\033[48;5;96m \033[38;5;96;48;5;60m▄\033[48;5;60m \033[38;5;60;48;5;65m▄\033[48;5;65m \033[38;5;65;48;5;65m▄\033[38;5;65;48;5;221m▄\033[49;38;5;221m▀\033[49m \033[m
\033[49m \033[49;38;5;96m▀\033[48;5;96m \033[38;5;96;48;5;60m▄\033[48;5;60m \033[48;5;65m \033[49m \033[m
\033[49m \033[49;38;5;96m▀\033[48;5;96m \033[48;5;60m \033[38;5;60;48;5;65m▄▄\033[49;38;5;65m▀▀\033[49m \033[m
\033[49m \033[49;38;5;96m▀\033[48;5;96m \033[38;5;96;48;5;60m▄\033[48;5;60m \033[38;5;60;49m▄\033[49m \033[m
\033[49m \033[48;5;96m \033[38;5;96;48;5;60m▄\033[48;5;60m \033[38;5;60;48;5;60m▄\033[49m \033[m
\033[49m \033[48;5;96m \033[49m \033[m
\033[49m \033[38;5;96;48;5;96m▄\033[48;5;96m \033[38;5;96;48;5;96m▄\033[49m \033[m
\033[49m \033[m
\033[49m \033[m
''')
with open("banner.txt","r") as banner:
print(banner.read())
try:
parser()
except TypeError:
print("usage: crack.py [-h] [--hash HASH] [--algo ALGO] [--wlist WLIST]")