[CTF GEMA] Ransom
CTF GEMA Groupe 2025
Niveau de Difficulté : Very Easy
Catégorie du Challenge : Malware
Description :
"Je me suis absenté et j'ai laissé mon PC déverrouillé. Un de mes camarades a dû me faire une blague, car à mon retour, j'ai vu le message suivant sur mon écran :
'Tous les fichiers et dossiers ont été xoré.
Envoyez 0.04 BTC pour obtenir la clé de déchiffrement ! :)'
Évidemment, je ne vais pas envoyer de BTC, mais je suis bloqué. Mes fichiers sont tous chiffrés et je n'ai aucune idée de la clé utilisée. Peux-tu m'aider à récupérer mes fichiers et découvrir la clé de déchiffrement ?"
Solutions Step
Nous avons l'information qu'un XOR a été appliqué. Ne connaissant pas la clé utilisée, nous allons la brute-forcer en recherchant une occurrence connue :
import os
def xor_decrypt(data, key):
"""Applique XOR avec une clé donnée."""
return bytes([b ^ key for b in data])
def try_decrypt_file(file_path):
"""Teste toutes les clés possibles pour un fichier donné."""
print(f"Essai de déchiffrement pour le fichier : {file_path}")
with open(file_path, "rb") as f:
encrypted_data = f.read()
for key in range(256):
decrypted_data = xor_decrypt(encrypted_data, key)
if b"FLAG{" in decrypted_data:
print(f"Clé trouvée pour {file_path} : {key}")
print(f"Contenu déchiffré : {decrypted_data.decode(errors='ignore')}")
return key
print(f"Aucune clé trouvée pour le fichier : {file_path}")
return None
def try_decrypt_directory(directory):
"""Tente de déchiffrer tous les fichiers dans un répertoire donné."""
if not os.path.exists(directory):
print(f"Le répertoire spécifié n'existe pas : {directory}")
return
for root, _, files in os.walk(directory):
for file_name in files:
file_path = os.path.join(root, file_name)
try_decrypt_file(file_path)
target_directory = "./TEST"
try_decrypt_directory(target_directory)