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}
Dernière mise à jour
Cet article vous a-t-il été utile ?