Le FCSC édition 2022 a proposé dans ce troisième challenge de la catégorie Hardware de s’intéresser au traitement du signal en nous demandant de générer du morse dans un fichier au format IQ.
Introduction
En cherchant un peu sur le net, je suis tombé sur ça: https://github.com/jgibbard/iqtool.
Je vais m’en servir comme base (c’est à dire que je vais aller récupérer du code dedans… 😉).
Premièrement, j’ajoute une fonction pour transformer du texte en morse sous forme écrite, c’est-à-dire à base de . et de -.
J’importe mon signal sur Audacity, avec les paramètres ci-dessous :
Et j’obtiens :
La suite n’est pas très conventionnelle. En effet, n’ayant pas vu le fichier server.py fourni par le CTF, j’ai donc dû faire autrement. J’ai pris par ci par là les bouts de code qui m’intéressaient dans le script iqgen.py du repository GitHub, et j’ai ensuite généré des signaux que j’ai importés dans Audacity afin de reproduire le signal source. Ne vous inquiétez-pas, je développe cela ci-dessous.
Reproduire le signal source
- Etape 1 : trouver l’amplitude
La première étape consiste à trouver l’amplitude du signal attendu. Pour cela, j’ouvre le fichier signal.iq fournit, et je regarde la valeur hexadécimale
Je regarde combien cela vaut en décimal mais attention, il s’agit d’un nombre signé, et négatif d’ailleurs d’après ce que montre Audacity.
Donc l’amplitude du signal carré alterne entre -32705 et 0. Il faut maintenant générer un signal carré.
- Etape 2 : générer un signal carré
D’abord, je commence par compter le nombre de points composant un signal court, celui composant un signal long, le nombre de points entre chaque signal et le nombre de points entre chaque groupe de signaux.
On obtient le résultat suivant :
- durée_signal_court = 48 pts
- durée_signal_long = 240 pts
- durée_entre_signal = 48 pts
- durée_entre_groupes_signaux = 240 pts
C’est à peu près à ce moment que je suis tombé sur le fichier server.py, qui a confirmé le nombre de points que j’ai comptés 😊 (On a la même relation de proportionnalité entre les différentes variables).
Et par ce biais j’obtiens le nombre de points codant l’espace, 20*48.
On peut donc commencer la création de notre tableau de valeur avec NumPy
- Etape 3 : NumPy
Générer le fichier IQ
Il ne reste plus qu’à générer le fichier IQ. Pour cela j’ai «repris» des petits bouts de code du repository GitHub cité auparavant.
Il ne reste plus qu’à générer le signal avec le texte demandé, et l’envoyer via le client.py fourni par l’énoncé pour obtenir le flag.
😊