Résolution du challenge FCSC 2021 - File Format
Dans ce challenge, nous avons un fichier qui contient un signal représenté sous une forme spécifique. Le signal est composé de composantes I (In-phase) et Q (Quadrature), qui sont alternées dans le fichier (I0, Q0, I1, Q1, …). Notre objectif est de séparer ces composantes I et Q, puis de calculer le hash SHA256 du résultat.
Voici comment nous avons résolu ce challenge en utilisant Python :
Étape 1 : Lecture du fichier
Nous commençons par lire le fichier en utilisant la fonction np.fromfile
de la bibliothèque numpy. Cette fonction nous permet de lire des données binaires directement dans un tableau numpy. Nous spécifions dtype=np.float32
car les données sont stockées sous forme de nombres à virgule flottante de 32 bits.
with open('file-format.iq', 'rb') as f:
data = np.fromfile(f, dtype=np.float32)
Étape 2 : Séparation des composantes I et Q
Ensuite, nous séparons les composantes I et Q. Les composantes I sont à des indices pairs et les composantes Q sont à des indices impairs. Nous utilisons la syntaxe de découpage de Python pour obtenir ces composantes :
i_components = data[::2] # Composantes I
q_components = data[1::2] # Composantes Q
Étape 3 : Concaténation des composantes I et Q
Nous concaténons ensuite les composantes I et Q en utilisant la fonction np.concatenate
:
concatenated_data = np.concatenate((i_components, q_components))
Étape 4 : Calcul du hash SHA256
Nous convertissons les données concaténées en bytes avec la méthode tobytes
, puis nous calculons le hash SHA256 en utilisant la bibliothèque hashlib :
byte_data = concatenated_data.tobytes()
hash_object = hashlib.sha256(byte_data)
hex_dig = hash_object.hexdigest()
Étape 5 : Affichage du flag
Enfin, nous affichons le flag dans le format spécifié dans l’énoncé du challenge :
print(f'FCSC{{{hex_dig}}}')
Et voilà ! Nous avons résolu le challenge. Notez que vous devez remplacer 'file-format.iq'
par le chemin réel vers votre fichier pour que ce script fonctionne.