8vers10 (Divers) - 404CTF 2022

8vers10 (Divers) - 404CTF 2022

Fichiers du challenge Principe:
Convertir un nombre décimal de la base 10 à la base 8 et le lire comme un sample d'audio

Le challenge

Le challenge nous demande d'interpréter un fichier de données (dispo ici), qui n'aurait pas été chiffré

Le fichier: des nombres

En dessinant la courbe des données du fichier, je n'ai pas pu en déduire grand chose…
En zoomant un peu, on devine un genre de sinusoïde, irrégulière
J'ai tenté d'en générer l'audio, mais ce n'est qu'un bruit de fond (voir le zip avec les fichiers du challenge )
Libreoffice ne m'a pas trop aidé non plus

Un signal?

Tentant de manière un peu hasardeuse et suite au challenge Par câble (Divers) , je me suis dit qu'il s'agit peut-etre d'un signal "analogique" à convertir

Je trouve alors une succession de 0 et de 1 (logique, j'ai créé un signal numérique)
Le "mot" binaire fait 330 bits, ce qui n'est pas un multiple de 8. C'est en revanche un multiple de 10 et le titre "8 vers 10" me pousse à croire qu'on a un simili-code-ASCII sur 10 bits

Comme on sait que le flag est de la forme 404CTF{...} et que le mot binaire représente surement le flag, on peut inférer ce que les premiers et derniers bits représentent, et faire le remplacement dans le reste du mot binaire

Inférence du flag

Ca me laisse beaucoup de "trous" dans mon flag, essayons de les boucher: le flag est sûrement en français
Le 1010110101 (693) revient souvent: il pourrait représenter l'espace _ et il n'y a alors pas beaucoup de mots de la forme #.co#..
On va partir sur le mot "décoder" comme premier mot, et faire les remplacements: decoder_le_???o?_?_?a??le en transcrivant le l33tspeak
Le l étant le code 236, je "piffe" que le code 230 sera 6 lettres avant dans l'alphabet (ou dans la table ASCII, ce qui revient au même), donc, 230 serait peut-etre f
Au vu du titre du challenge et des trous restants, je piffe alors que le milieu du flag serait du genre 8f10f, ce qui donnerait décoder le 8f10f c'est facile

Inférer le flag me sert ici à trouver un indice sur la vraie méthode de résolution, car étant en l33tspeak, je ne sais pas si certains caractères sont des e ou des E ou des 3

10 bits encoding

Je cherche alors sur le net un encodage en 10 bits (plutôt que 8)… et j'aurai dû commencer par là!

Je n'était pas loin avec "8f10f"! Je pensais à "f" pour "float" initialement, allez savoir…

En appliquant le décodage 8b/10b j'obtient des nombres, mais je n'arrive pas à remonter au code ASCII
Ayant trouvé une lib Python pour ce codage 8b/10b, je la tente

Flag

Et ouais, cette lib marche bien mieux que ma tentative! Un peu de colle PHP/Python pour faire "joli" et le flag est là: 404CTF{d3C0d3r_l3_8b10b_c_f4c1l3}

Initialement, je pensais qu'on aurait dû changer de base et transformer les nombres flottants de la base 10 à la base 8 par exemple. Mais ce fut une fausse piste, que je n'ai pas détaillée ici.

Fichiers du challenge

↩ Retour à la liste des challenges

⇇ Retour à l'accueil