80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
#!/usr/bin/python
|
|
|
|
import subprocess
|
|
import math
|
|
import hashlib
|
|
import base64
|
|
from itertools import chain, product
|
|
from zipfile import ZipFile
|
|
|
|
# for x in ["Dasher", "Dancer", "Prancer", "Vixen", "Comet", "Cupid", "Donder", "Blitzen"]:
|
|
# subprocess.call(["unzip", "-P", x, "z.zip"])
|
|
|
|
|
|
# print(bytes(int(x) for x in "5 8 16 20 27".split(" ")).decode("cp500"))
|
|
|
|
# x = [chr(i + ord('a')) for i in range(0, 26)] + [chr(i + ord('A')) for i in range(0, 26)] + [str(i) for i in range(10)]
|
|
# print(x)
|
|
#
|
|
# try:
|
|
# for s in x:
|
|
# data = ZipFile.open("Final_easy.zip", mode='r', pwd=s)
|
|
# if data != '':
|
|
# print("found pw")
|
|
# except:
|
|
# pass
|
|
|
|
|
|
# we know that b * c = 6497 and b < c
|
|
prod = 6497
|
|
for b in range(2,math.floor(math.sqrt(prod))):
|
|
if math.floor(prod / b) == prod / b:
|
|
c = prod // b
|
|
break
|
|
|
|
# which gives us:
|
|
# b = 73
|
|
# c = 89
|
|
# print("b=%d c=%d" % (b, c))
|
|
|
|
hash = "CF945B5A36D1D3E68FFF78829CC8DBF6".lower()
|
|
hash_reversed = "H0b0"
|
|
|
|
def bruteforce(charset, minlength, maxlength):
|
|
return (''.join(candidate)
|
|
for candidate in chain.from_iterable(product(charset, repeat=i)
|
|
for i in range(1, maxlength + 1)))
|
|
|
|
# alphabet = 'abcdefghiklmnopqrstuvwxyz'
|
|
# alphabet += alphabet.upper()
|
|
# alphabet += ''.join([str(i) for i in range(10)])
|
|
#
|
|
# for i in bruteforce(alphabet, 4, 4):
|
|
# try:
|
|
# m = hashlib.md5()
|
|
# m.update(i.encode("utf-8"))
|
|
# new_hash = m.hexdigest()
|
|
# if new_hash == hash:
|
|
# hash_reversed = i
|
|
# break
|
|
# except:
|
|
# pass
|
|
|
|
if hash_reversed == None:
|
|
exit("could not find hash")
|
|
|
|
# Step 3: squareRoot
|
|
squareRoot = int(math.sqrt(8814961))
|
|
|
|
# Step 4: XOR
|
|
result = 'zvru'
|
|
part3 = ''.join([chr(ord(result[i]) ^ ord(str(squareRoot)[i])) for i in range(4)])
|
|
# print(part3)
|
|
|
|
# Step 5: Base64
|
|
b64 = base64.b64decode('RjBtMA==').decode("utf-8")
|
|
# print(b64)
|
|
|
|
flag = "HV18-%02d%02d-%s-%s-%04d-%s" % (b, c, hash_reversed, part3, squareRoot, b64)
|
|
print(flag)
|