Puisque le challenge nous en parle, installons Sigrok
Et puis gtkwave aussi, tiens
GTKWave
On ouvre GTKWave et on charge le fichier donné: ce sont trois trames binaires
En zoomant un peu, on aperçoit de cours blocs, d'aspect similaire
Les deux créneaux de début et de fin de d3 semblent revenir d'un bloc à l'autre
Et les canaux d2 ressemblent à une horloge régulière
Transcription
On transcrit alors le canal d3 en binaire (en PHP parce que pourquoi pas)
et on obtient des blocs de taille identique
Quand le tick (d2) tombe à zéro, cela signifie qu'on peut lire le canal de données d3
d'om le //Clock tick dans le code PHP de déchiffrement.
Je l'ai fait à la devinette car d2 est à 1 entre deux blocs,
ce qui pourrait signifier "n'écoute pas le signal", donc le 0 signifie "écoute le signal d3"
Analyse
On s'aperçoit rapidement que le début de chaque bloc est identique: on va l'ignorer
Les 5 bits suivants ressemblent à un incrément, on ignore également
On s'aperçoit ensuite que le pattern 010 intervient toujours à la même place,
et le bloc finit toujours par 1
On décode le reste en ASCII, et on trouve quelque chose d'assez proche du flag
Les erreurs
Le challenge nous avait prévenu, il y a des erreurs de transmission,
donc, j'affiche les caractères proches…
et la chance fait le reste:
FCSC{MY-PRECIOUS-PLEASE-STAY-SECRET!}
Quand un flag a une signification humaine (et n'est pas une suite aléatoire de caractères hexadécimaux),
le cerveau peut être un allié très efficace pour "boucher les trous" :)
J'avais quand même tenté la correction d'erreur, qui m'a aiguillé sur un mélange de ,
et de - mais cela a foiré, alors, j'ai tenté avec que des - et bingo!
Une tentative foireuse de correction d'erreur
Je n'ai pas bien saisis la logique de la correction d'erreur, j'ai mis de côté,
ayant flaggué et faute de temps