Steg - Le secret de mon amour

NoBracketCTF-Qualif-2023 Nov 20, 2023

📜Scenario

🔎Solve

Un MSB, ou Most Significant Bit en anglais, décrit le bit le plus significatif d'un nombre binaire. Dans un nombre binaire, chaque chiffre est représenté par un bit, soit un 0 ou un 1. Le bit le plus à gauche est considéré comme le MSB, car il a la plus grande valeur en termes de poids. Par exemple, dans le nombre binaire 10110, le MSB est le premier bit à gauche, qui vaut 1.

Le MSB est crucial dans de nombreux contextes, notamment lors de la conversion de nombres binaires en nombres décimaux ou lors de l'interprétation de données dans des protocoles de communication.

Dans notre cas on va scripter un coup :

from PIL import Image
import qrcode
def extract_qrcode(encoded_image_path, extracted_qrcode_path):
    # Ouvrir l'image encodée
    encoded_image = Image.open(encoded_image_path)

    # Créer une nouvelle image pour stocker le code QR extrait
    extracted_qrcode = Image.new("RGB", encoded_image.size)

    for x in range(encoded_image.width):
        for y in range(encoded_image.height):
            # Obtenir le pixel de l'image encodée
            encoded_pixel = encoded_image.getpixel((x, y))

            # Extraire le bit MSB du canal rouge (oĂč le code QR est cachĂ©)
            msb = encoded_pixel[0] & 0x01

            # Rétablir le bit MSB dans le canal rouge de l'image résultante
            extracted_pixel = (msb * 255, 0, 0)

            # Écrivez le pixel modifiĂ© dans l'image rĂ©sultante
            extracted_qrcode.putpixel((x, y), extracted_pixel)

    # Enregistrez l'image résultante contenant le code QR extrait
    extracted_qrcode.save(extracted_qrcode_path)
if __name__ == "__main__":
    encoded_image_path = "encoded.png"  # Chemin de l'image encodée
    extracted_qrcode_path = "extracted_qrcode.png"  # Chemin de l'image contenant le code QR extrait

    extract_qrcode(encoded_image_path, extracted_qrcode_path)
    print("Le code QR a été extrait avec succÚs et enregistré dans 'extracted_qrcode.png'.")

On obtient le résultat suivant :

On scan le qrcode avec https://pageloot.com/fr/lecteur-qr-code/

Et on obtient le flag : NBCTF{c00l_msb_in_qrc0de}

NOTE : On peux carrĂ©ment utiliser Aperisolve et solve le chall en 2 click, c’est chill

WriteUp and Chall made by Shaym

Tags