Skip to main content

Solution du CTF Fetch the Flag 2023 de Snyk : Honey Baked Messages

Écrit par
snyk ctf honey baked messages

30 novembre 2023

0 minutes de lecture

Merci d’avoir participé à Fetch avec nous ! Félicitations aux milliers de joueurs qui nous ont rejoints pour le CTF Fetch the Flag. Si vous avez participé à Fetch the Flag 2023 de Snyk et cherchez la solution du défi Honey Baked Messages, vous êtes au bon endroit. Découvrons ensemble la solution !

Ce défi porte sur les codes de Hamming, un type de codes correcteurs d’erreurs. Il utilise la version (7, 4) des codes de Hamming.

Le défi comporte les étapes suivantes :

  1. Comprendre qu’il s’agit d’un codage de Hamming.

  2. Lire chaque ligne du fichier. 

  3. Déterminer la matrice H nécessaire pour résoudre le problème.

  4. Corriger les erreurs dans tout le fichier et récupérer le flag.

Voici le script de solution solve.py :

import numpy as np

H = np.array(
        [
            [1, 1, 1, 0, 1, 0, 0],
            [0, 1, 1, 1, 0, 1, 0],
            [1, 1, 0, 1, 0, 0, 1]
        ]
    )
errors = {
    "000":None,
    "001": 6,
    "010": 5,
    "011": 3,
    "100": 4,
    "101": 0,
    "110": 2,
    "111": 1
}

def np2usable(nparr):
    return np.array2string(nparr).replace(" ", "" ).replace("[", "").replace(']', "")

def fixErrs(hamming):
    error = (np.matmul(H, hamming)%2)
    err_idx = errors[np2usable(error)]
    if err_idx != None:
        # print(err_idx)
        hamming[err_idx] +=1
        hamming[err_idx] %= 2

    return hamming[:4]

data = []
with open("message_2.txt", "r") as reader:
    for line in reader:
        code = np.fromstring(" ".join(line.strip("\n")), dtype = int, sep=" ")
        data.append(np2usable(fixErrs(code)))
split_chars = (list(zip(*(iter(data),) * 2)))

[print(chr(int(j+k, 2)), end="") for j,k in split_chars ]

Merci d’avoir fait de Fetch un succès !

Un immense merci à toutes les équipes de Fetch the Flag 2023 ! C’était un plaisir de vous y voir, et vous pouvez toujours me retrouver sur YouTube.

Voici les solutions des autres défis de 2023. À vous de jouer !

Publié dans: