Quadratique Mystérieuse
Flag: StarHack{eb89e2cef3201cfc947285a03705bcb22b8}
Challenge
Solution
Le flag commence par StarHack, on va utiliser le S pour trouver a et b.
a et b sont compris entre 1 et 25, soit 25 * 25 = 625 possiblités. On peut bruteforce pour trouver un a et b qui donne le même résultat que la première valeur de cipher.
Ensuite, il suffit d'inverser la fonction, on retire b, puis on divise par a, et enfin on prend la racine carrée.
cipher = [75794, 148031, 103514, 142971, 57039, 103514, 107826, 125954, 166434, 112226, 105659, 34511, 35754, 112226, 27515, 107826, 112226, 114459, 28626, 27515, 25359, 26426, 107826, 114459, 107826, 35754, 29759, 33290, 27515, 34511, 30914, 103514, 25359, 28626, 33290, 25359, 30914, 105659, 107826, 105659, 27515, 27515, 105659, 34511, 171890]
def func(x, a, b):
return a * x**2 + b
# Bruteforce de a et b
def find_ab():
for a in range(25):
for b in range(25):
if func(ord('S'), a, b) == cipher[0]:
return a, b
# Inverse la fonction quadratique
def inverse(x, a, b):
return int(pow((x - b) // a, 1/2))
a, b = find_ab()
flag = ''.join([chr(inverse(n, a, b)) for n in cipher])
print(flag)StarHack{eb89e2cef3201cfc947285a03705bcb22b8}Mis à jour
Ce contenu vous a-t-il été utile ?