Quadratique Mystérieuse

Flag: StarHack{eb89e2cef3201cfc947285a03705bcb22b8}

Challenge

Description


Un mystère caché derrière des équations, prêt à être résolu. Oserez-vous déchiffrer le secret ?

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 ?