Message audio stéganographié

Analysez le cri de Pikachu.

Ce défi est tiré de c0d1ngUP 2017

Vous pensez qu'un message audio a été camouflé dans un enregistrement du cri de Pikachu que vous avez dérobé dans les locaux de la Team Rocket. La méthode employée est inspirée de la très courante méthode LSB pour stéganographier des images.

L'échantillon sonore que vous avez récupéré est un enregistrement stéréo au format Wav (PCM 16bits).

Vous pouvez le télécharger ici.

Des fuites dans la Team Rocket vous ont révélé la manière dont l'audio a été camouflé. À vous d'arriver à inverser le procédé pour récupérer les informations.

Ce que vous savez du procédé de stéganographie employé :

Initialement, on dispose de deux fichiers audio Wav : SUPPORT (qui contiendra le message caché), et SECRET (le message caché lui même). Ces deux messages audio sont des messages monophoniques (il y a une seule voix).

Un échantillon d'un enregistrement mono est un nombre entier relatif codé sur 16 bits en complément à deux (donc un nombre entier entre -32768 et 32767).

La première étape consiste à modifier les données contenues dans SECRET. Puisque c'est un message audio mono, c'est une séquence de nombres entiers compris entre -2^15 (-32768) et 2^15 - 1 (32767). Pour cela, on prend tous les échantillons de SECRET, on les divise par 2^n (vous ne connaissez pas la valeur de n utilisée, mais si n valait 9 on diviserait par 2^n = 512) puis on ajoute 2^(15 -n) afin d'obtenir des nombres positifs entre 0 et 2^(16-n) - 1.

Voici un exemple de 3 échantillons (en bleu clair) du fichier audio : 16578, -2756, -10456, -32768, 32767. Si on choisit n=9, il faut donc diviser par 512 (on obtient les valeurs en orange), puis on ajoute 2^(15-9) = 64, et on obtient les valeurs finales en rose, comprises entre 0 et 127.

La seconde étape consiste à injecter ces données dans le SUPPORT. Pour cela, on construit une seconde voix au SUPPORT, qui devient ainsi stéréo. Chaque valeur de la seconde voix du support est obtenue en faisant un ou exclusif (Xor) entre la première voix et les valeurs obtenues à l'étape précédente.

Supposons que le SUPPORT commence avec les valeurs (il n'a qu'une voix) en vert. Le résultat du Xor avec les données obtenues à l'étape précédente sont indiquées en bleu.

On enregistre alors le fichier audio avec la voix gauche égale aux données en vert et la voix droite les données en bleu.

En combinant correctement ces deux voix, il est possible de restituer le SECRET.

Validation du défi

Pour valider le défi, vous devez donner les noms des Pokémons mentionnés dans le SECRET. Attention, baissez le son pour que les autres participants n'entendent pas, et vérifiez l'orthographe des noms des Pokémons (il y a un pokédex complet ici et un mini pokédex là.)

Pensez-y : dans l'exemple, SECRET était divisé par 2^9 = 512, mais ce n'était qu'un exemple. Dans le défi, vous savez que le message est divisé par 2^n, mais vous ne connaissez pas la valeur de n. À vous de la rechercher.

Type de retour
une chaîne de caractères
Entrées du problème
Pas de données d'entrée
Vous devez être connecté.e pour proposer une réponse au défi
Vous devez être connecté.e pour accéder aux forums.