1 min read

[CTF GEMA] Position

CTF GEMA Groupe 2025

Niveau de Difficulté : Medium

Catégorie du Challenge : Crypto

Description :

Be a reverser!!

Steps to Solve

Challenge Idea:

Le défi consiste à convertir une série de nombres binaires en texte, le nombre de chaînes binaires correspondant au nombre de codes ASCII. Chaque chaîne binaire contient un seul « 1 », et la position de ce « 1 » représente le code ASCII d'un caractère. En lisant et en traitant toutes les chaînes binaires, nous pouvons extraire le texte correspondant en convertissant chaque position en son caractère ASCII.

Solution Approach:

Pour relever ce défi, nous devons traiter chaque chaîne binaire en identifiant la position du « 1 » en commençant par le côté le plus à droite. Ceci peut être réalisé en calculant la position du '1' par rapport à la longueur de la chaîne. Une fois la position identifiée, elle est convertie en son caractère ASCII correspondant à l'aide de la fonction chr(). La répétition de ce processus pour chaque chaîne binaire génère le texte décodé. Enfin, le texte résultant est inversé pour présenter les caractères dans l'ordre correct.

solve code:

def decode_numbers_to_flag(numbers):
    """
    Decodes a list of binary-like numbers into a flag by finding the position of '1' from the right
    and converting it to the corresponding ASCII character.

    Args:
        numbers (list of str): List of binary-like strings.

    Returns:
        str: Decoded flag.
    """
    flag = ""
    for num in numbers:
        # Calculate the position of '1' from the right
        position_from_right = len(num) - num.index('1')
        # Convert the position to the corresponding ASCII character
        flag += chr(position_from_right)
    return flag

# List of binary-like numbers provided
numbers = [
    "010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000",
    "000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000",
    "000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000",
    "000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000",
]

# Decode the numbers into the flag
decoded_flag = decode_numbers_to_flag(numbers)
print("Decoded Flag:", decoded_flag[::-1])

Output:

$ python solve.py
FLAG: FLAG{Et00m_Encrypt_the_message}

Flag

FLAG{Et00m_Encrypt_the_message}