Useless Animals Sorting
Challenge
Solution
from pwn import remote, context
from hashlib import md5
context.log_level = 'error' # Pour éviter que pwntools print des trucs
hashes: dict[str, str] = {} # Dictionnaire où on aura hash_image: animal
consecutive_hit = 0 # Juste pour indication dans les logs
client = None # Client TCP
while True:
if client is None:
# On créé un nouveau client TCP et on reset les divers valeurs
print(f'New client | {len(hashes): >4} hashes in memory | {consecutive_hit: >3} consecutive hits')
consecutive_hit = 0
client = remote('challenges.hackday.fr', 51259)
data = client.recvuntil(b'Press Enter to start the game')
client.send(b'\n') # Lance le jeu
data = client.recvline() # Ligne Image n°
if b'Image' not in data: # Si on a réussi le jeu, on reçoit le flag à la place
print(data.decode())
break
data = client.recvline() # Base64 de l'image
hash = md5(data).hexdigest() # MD5 de l'image
client.recvline() # Question "Animal ?"
# Si on a connaît déjà le hash, on envoie la bonne réponse, sinon on enverra "?"
response = hashes.get(hash, '?')
client.sendline(response.encode())
data = client.recvline() # Réponse du serveur
if b'Correct !' in data: # Si c'est correct, on ajoute un hit (juste pour les logs)
consecutive_hit += 1
else:
animal = data.split(b' ')[5].decode() # Si c'est faux, on récupère la bonne réponse
hashes[hash] = animal # On associe la bonne réponse au hash
if b' 0 errors' in data: # Si on a plus d'essai, on reset le client
client.close()
client = NoneMis à jour