Pour ce chall, il faut laisser tourner le modèle et au bout de quelques minutes il nous donne le flag en clair.
Voici le script utilisé pour résoudre ce chall :
import torch
from gorfougym import load_model
# 1. Chargement du modèle Gorfoustral (GPT-2 medium fine-tuné) sur CPU en dtype par défaut (bfloat16)
model = load_model("gorfoustral-1_300M.pt", device="cpu")
# 2. Préparation du prompt initial pour la complétion
prompt = "User: 404CTF{"
tokens = model.to_tokens(prompt) # Conversion du prompt en tokens pour le modèle
# 3. Génération gloutonne (deterministe) d'un nombre suffisant de tokens pour obtenir le flag et la réponse
# On génère jusqu'à 100 tokens supplémentaires (ce qui couvre largement la longueur du flag + "Assistant: True")
output_tokens = model.generate(tokens, max_new_tokens=100, temperature=0.0)
# Conversion des tokens de sortie en texte brut
output_text = model.to_string(output_tokens[0])
# 4. Extraction du flag à partir du texte généré
# On trouve les positions de la première occurrence de "404CTF{" et de la première '}' qui suit
start_index = output_text.find("404CTF{")
end_index = output_text.find("}", start_index)
if start_index != -1 and end_index != -1:
flag_content = output_text[start_index + len("404CTF{"): end_index]
found_flag = "404CTF{" + flag_content + "}"
else:
raise ValueError("Le flag n'a pas été trouvé dans la sortie du modèle.")
# 5. Affichage du flag
print(found_flag)
Après quelques minutes (ou secondes selon votre machine), le résultat s'affiche en clair :