Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Actualités


Index du Forum » Actualités » Le puzzle de l'Avent 2018 : Débriefing et solutions
Lephenixnoir En ligne Administrateur Points: 24556 Défis: 170 Message

Le puzzle de l'Avent 2018 : Débriefing et solutions

Posté le 01/01/2019 22:01

En Décembre, nous avons organisé le Puzzle de l'Avent, une grande énigme logique et mathématique avec une calculatrice à remporter. C'est l'heure de revenir sur vos découvertes et les solutions !

Avant de commencer, par curiosité j'aimerais que tous ceux qui ont cherché (même juste un peu) le puzzle disent ce qu'ils ont trouvé. Les objectifs sont multiples :
• Évaluer la difficulté de l'énigme proposée et la pertinence des indices ;
• À des fins pures de statistiques pour les événements du site ;
• Pour savoir si ça vous a plu et envisager d'en organiser d'autres dans le même genre.
Merci !

Rappelons les règles : il fallait reconstituer le puzzle et trouver la phrase-mystère cachée dans l'énigme. Pour le puzzle, la solution a été donnée par Krevo_ mais je pense que vous y seriez tous arrivés sans souci. La seule chose à remarquer est que les dimensions de l'image étaient 384×216, la surface utilisable dans un add-in programmé sur Graph 90+E, le seul modèle moderne capable d'afficher une image en couleurs. Voici l'image complète, signée votre serviteur :


Les séquences de 6 chiffres et lettres servaient de checkpoint, en quelque sorte, pour s'assurer que vous passiez bien au bon endroit. Il y en avait deux à trouver : 9L3AF4 et LINK24.

Je vais d'abord vous donner la solution, ensuite j'y ajouterai une explication de tous les indices.

Solution étape-par-étape : le message Arécibo.

La première chose à faire était de remarquer que certaines pièces du panneau inférieur comportaient des pixels irréguliers formant un QR Code :


Ce n'est pas facile à voir car j'avais choisi des couleurs volontairement très proches pour produire un effet stéganographique. Pour s'en apercevoir, il fallait jouer très fort avec les couleurs ou simplement faire une sélection par couleur dans un outil d'édition :


Il y avait donc la partie supérieure et la partie inférieure séparées. Hasard ? Non. Car pour obtenir le QR code d'origine flashable, il fallait transposer horizontalement la partie supérieure.



Ce QR Code contenait l'URL planet-casio.com/Fr/4v3n7mMxv111.php, un petit script prévu pour l'occasion qui redirige vers la page d'un programme de dessin pour fx-92 SC+. Pas d'autre choix que de recopier ou exécuter le programme à la main, pour obtenir une image du message Arécibo légèrement modifiée :



Et voici le premier code de l'énigme : 9L3AF4 !

Solution étape-par-étape : le papillon.

J'ai ensuite posté le 10 Décembre, dans une discréation totale () le programme Nollipap pour Graph 90+E. Il s'agit d'un papillon dessiné par Critor de façon probabiliste sur un fond représentant une forêt. Une fois que l'utilisateur a appuyé sur 6 touches, le programme s'arrête et affiche un message généralement cryptique.


La forme du papillon, comme le fond choisi, évoquent une idée de symétrie horizontale, tout comme le titre du programme qui était en fait un indice pour la transposition du QR Code à l'étape précédente !

Ici donc, pas de miracle : il suffit de taper le code obtenu à l'étape précédente, et puisque c'est un nollipap, il faut le taper à l'envers : 4FA3L9, ce qui se lit sur le clavier :

[4], [tan], [X,θ,T], [3], [→], [9]

Le nollipap affiche alors le message secret : REV STEGANO!, où STEGANO fait bien sûr référence à la stéganographie que l'on a croisé avant, et REV signifie plusieurs choses : revoir ou revisiter mais aussi reverse, le plus important !

Solution étape-par-étape : le code morse.

Forts de cette découverte, on retourne sur l'image pour remarque une deuxième séquence stéganographiée et ouvertement affichée :


Elle semble représenter un signal binaire, comme du morse. Cependant, et c'est là l'astuce, pour interpréter cette séquence il faut utiliser le sens reverse et échanger les deux parties du signal. Les parties à 1 deviennent 0 et celles à 0 deviennent 1. Le véritable message est le suivant :


La première partie se traduit en morse par LINK et la seconde par 24. Et voici le second code secret de l'énigme, LINK24 !

Solution étape-par-étape : la finale.

Bien sûr, link n'évoque pas ici le protagoniste de la série Zelda qui était le thème d'illustration de notre triconcours de rentrée, mais bien un lien hypertexte. La promesse est claire : il y aura un lien hypertexte à suivre le 24 Décembre !

C'est ici que se trouve la plus grosse fourberie de l'ensemble, je pense : j'ai caché le lien dans la liste des indices, à l'entrée « 24 Décembre », en introduisant dedans un caractère Unicode bien connu des trolleurs : U+200B ZERO WIDTH SPACE, un espace invisible pusiqu'il n'a pas de largeur. Vous pouviez trouver le lien en cherchant dans les outils développeurs de votre navigateur, comme le montre cette capture d'écran !


La cible du lien n'est pas une URL mais la phrase suivante :

Product of all numbers (not digits) in the 6-character secret codes

Et il n'y a pas d'erreur, c'est bien codes au pluriel puisqu'il y a deux codes secrets, 9L3AF4 et LINK24. Le produit de tous les nombres qu'ils contiennent est 9×3×4×24 = 2592. Certains indices indiquaient de façon très explicite qu'il fallait chercher un numéro du programme, et cet ID mène à mon add-in "Jeu de la vie". Je garde pour moi le secret de cette coïncidence ! :o

Et voici, mesdames et messieurs, cachée en blanc dans la description du programme, la solution du problème, apparente dès que vous sélectionnez le texte !


Je l'ai changée à deux reprises ; bravo encore à Krevo_ et Dark Storm qui ont complètement hacké notre énigme en sautant chacun plusieurs étapes. Je leur laisse le plaisir de vous présenter les méthodes originales qu'ils ont utilisées pour arriver à leurs fins !

Explication des indices

Indice n°1 (charade) : Tout simplement « l'énigme », le thème de l'événement.

Indice n°2 (charade) : Il s'agit de « trouve ».

Indice n°3 (charade) : La solution est « image », indiquant que l'image à reconstituer fait partie de l'énigme.

Indice n°4 (trois sens) : Une symétrie en vaut deux...
Plus d'une fois, les indices du puzzle devaient être réutilisées à plusieurs occasion. Ici, on aurait pu partir sur une symétrie en vaut trois car il faut s'y référer pour (1) transposer horizontalement la partie haute du QR Code, (2) épeler le premier code à l'envers pour le nollipap, et (3) intervertir les 0 et les 1 dans le code morse.

Indice n°5 (deux sens) : Une pièce peut en cacher une autre...
Ici, une pièce de l'image à reconstituer peut cacher une pièce du puzzle, à savoir le QR Code. Comme Dark Storm l'a relevé avec finesse, « ça pue la stéganographie » ! Il fallait donc l'utiliser à deux occurrences : pour trouver le QR Code et pour trouver le message en morse inversé.

Indice n°6 : Quel est le point commun entre un téléphone et une fx-92+ Spéciale Collège ?
Le QR Code, ni plus ni moins. La fx-92 SC+ les produit et les téléphones les déchiffrent !

Indice n°7 (charade) : Encore une fois on insiste sur le « dessin », qui contient de nombreux éléments de l'énigme.

Indice n°8 (charade) : « bas à gauche », soit la localisation d'un des morceaux du QR Code. Il était prévu de mettre le code en un seul morceaux à cet endroit-là à l'origine.

Indice n°9 : Êtes vous sûr que cette surface est unie ?
Référence brute de décoffrage à la stéganographie. Là, les premiers ont commencé à faire sortir le code.

Indice n°10 : ♫ 0x51, 0x52, f-x 9-2 ♫
Les octets 0x51 et 0x52 représentent les lettres Q et R, respectivement : c'est de plus en plus explicite.

Indice n°11 (deux sens) : La boîte de texte en cache plus que vous ne le croyez.
La boîte de texte cache en effet le QR Code et le message en morse inversé.

Indice n°12 : Papillons et -codes !
Il y a deux éléments ici : le premier confirme que le programme Nollipap fait partie du puzzle, et le second représente matriciellement la transformation qu'il faut appliquer au QR Code avant de le flasher : la deuxième ligne "QR" est normale, mais la première est transposée horizontalement. Pour obtenir le code d'origine, il faut donc remettre la partie du haut à l'endroit.

Indice n°13 : Tous les marrons ne se valent pas.
Encore une fois, un coup de stéganographie.

Indice n°14 : Quand le papillon s'envole, les mots se dévoilent...
Seconde référence au nollipap, où l'on explicite qu'il y a bien un code à résoudre en appuyant sur les bonnes touches pour le faire parler.

Indice n°15 :
De nouveau la symétrie horizontale pour la moitié supérieure du QR Code. On ne pourra pas prétendre que c'était caché dans un coin !

Indice n°16 (deux sens) : Ce qui n'a pas de sens dans un sens peut avoir du sens dans l'autre sens.
Cette référence à peine voilée à la symétrie invite à réinterpréter les éléments dont on dispose en les lisant dans l'autre sens : à la fois pour le code à donner au nollipap, et en préparation pour le code morse inversé.

Indice n°17 : En touchant un peu au contraste de cette pièce du jour 7...
Alors là ça y est, je révèle carrément la supercherie. Vous ne pourrez pas dire que vous ne saviez pas !

Indice n°18 : Not X, ~X, x^1, 1-X : quel est le sens commun ?
Quatre façons différentes d'écrire le complémentaire binaire viennent s'ajouter au mot sens de l'indice 16 pour vous aider à interpréter le morse.

Indice n°19 : Si vous pensez avoir résolu les indices 4, 11 et 16, cherchez encore.
Un indice méta pour vous rappeler que tous les indices ne sont pas à usage unique !

Indice n°20 : ...___...
"SOS" en morse, rien de plus. Un indice facile pour éviter que vous tentier de trouver un autre code pour déchiffrer le second code secret.

Indice n°21 : REV a du sens.
Ici, "REV" c'est bien sûr "REV STEGANO!", le message du nollipap. On refait le lien avec les indices 16 et 18 pour exhiber l'interprétation de "REV" comme reverse, qui n'était pas forcément la plus naturelle (Krevo_ parlait de revoir ou revisiter).

Indice n°22 : Ce qui vous échappe... manque juste encore un peu de sens !
Référence flagrante à trois indices précédents.

Indice n°23 : Toutes les instructions sont dans le titre.
De nouveau le nollipap. La seule instruction à voir est de lire à l'envers ! Le fait qu'il faille presser 6 touches pour le faire parler devait être amplement suffisant pour faire le lien avec le premier code secret caché dans le message Arécibo.

Indice n°24 : Le code est la clé.
Ou, de façon plus verbeuse, « le premier code secret est la clé pour faire parler le papillon », avec un petit jeu de mot sur « clé » que l'on peut voir ici comme « clé de déchiffrement » (objet cryptographique).

Indice ultime : C'est un numéro de programme.
Dans le rush final, le principe était d'aider ceux qui fonçaient vers la solution, d'où cet indice extrêmement explicite mais qui ne peut être compris que par ceux qui ont lu le lien secret où, il était question d'un produit de nombres.

Indice de Noël : Il est impensable de ne pas chanter [...] Vous noterez la présence subtilement cachée de l'image du puzzle de l'avent [...]
Évidemment l'indice ultime n'était pas tout à fait ultime puisque le dernier élément que je vous livrais était caché dans la news de Noël où les mots « puzzle » et « chanter » devaient vous aider à trouver la solution, qui se présentait sous la forme d'une petite phrase à chanter sur la page de mon add-in. La phrase a évolué à chaque découverte, mais gardait la forme « ♫ ... - Joyeux Noël ♫ ».

Quant aux indices bonus, ce sont des choses encore plus explicites qui dévoilent progressivement le mystère !

Conclusion

Merci à tous les participants, et à tous ceux qui ont mis de l'animation sur le topic en général. Merci également à Casio Éducation qui a accepté de nous donner une Graph 90+E pour cet événement d'un genre tout nouveau pour nous !

Si le concept a plu, il est parfaitement envisageable d'organiser de nouveau un jeu de piste, sous cette forme ou sous une autre forme, pour une autre fois comme le prochain Avent. Faites-nous part des votre ressenti dans les commentaires !

Allez, à la prochaine sur Planète Casio !



1, 2 Suivante
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 02/01/2019 11:17 | #


Le titre de maître du puzzle était vraiment mérité
GG à Krevo_ pour avoir trouvé en premier le puzzle !
Zezombye Hors ligne Rédacteur Points: 1756 Défis: 13 Message

Citer : Posté le 02/01/2019 12:19 | #


Ouais le truc du lien caché c'était introuvable
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
Lephenixnoir En ligne Administrateur Points: 24556 Défis: 170 Message

Citer : Posté le 02/01/2019 12:30 | #


Et du coup, Massena, Zezombye, vous avez essayé l'énigme ? Vous en êtes arrivés où ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Massena Hors ligne Ancien rédacteur Points: 2244 Défis: 11 Message

Citer : Posté le 02/01/2019 12:46 | #


Je n'ai rien fait, j'ai pas de tel pour le QR code, et puis de toute façon c'était trop dur x)
Manolo Hors ligne Membre Points: 910 Défis: 13 Message

Citer : Posté le 02/01/2019 12:58 | #


Moi j'ai juste fais la première énigme... J'ai déjà une cg90+e et en plus, j'avais la flemme et pas trop le temps...
Et sinon c'était plutôt cool à suivre, mais comme je m'y attendais, c'est beaucoup trop galère...
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 02/01/2019 13:21 | # | Fichier joint


Bonjour,

Voici mon debriefing du puzzle de l'Avent. Je vais vous dire ce que j'ai trouvé, comment j'ai trouvé, ce qu'il s'est vraiment passé de mon côté.... et aussi quelques fausses pistes que j'ai suivies.

Et vous verrez qu'à part prendre un peu d'avance sur le décryptage du QR-Code et sauté l'opération de FLIP ... je n'ai pas vraiment zappé d'étapes

Partie I (jusqu'au message d'Arecibo)

Au début ça démarrais doucement, j'avais trouvé la charade n°1 avec l'énigme (lait-ni-g-meuh) et probablement la n°2 avec Trouve (trou-voeu). Par contre, la charade n°3 .... je n'ai toujours pas trouvé une réponse concluante. Idem pour la charade n° 7. J'attends donc avec impatience les solutions. Par contre j'ai peut-être la N°8 avec "En bas à gauche" ?!? (mais ça ne m'a pas aidé...)

Ensuite, je me suis trouvé très malin en croyant avoir trouvé la solution avec une image qui nous souhaiterait un Joyeux Noël 2018, .... ("Est ce que ce pixel art ne nous souhaiterais pas un Joyeux No"ël 2"018 ?!?" disais-je le 04/12) mais évidemment c'était trop simple pour être ça.

A partir du 07/12, c'est là que c'est devenu intéressant. L'indice du jour était "Indice n°9 : Êtes vous sûr que cette surface est unie ?". Et là je me suis dit, si on nous demande cela c'est que la surface en question ne doit pas l'être... donc c'est à ce moment que ça a fait TILT !! J'ai scruté avec attention les tiles postées jusque-là, et j'ai vu que la 3e pièce du 04/12 et la 10e pièce du 07/12 n'étaient pas tout à fait unie. En zoomant sur mon tel. je voyais deux nuances de marrons, sans pouvoir dire ce que c'était. Arrivé devant mon ordinateur, j'ai pris GIMP et j'ai réduit ces pièces à une palette de 2 couleurs, et bien vu que c'était des morceaux de QR Code :





En premier j'ai essayé de scanner chaque morceaux séparément, sans succès bien sûr. J'ai pris l'un des morceaux pour un QR-Code rectangulaire différent des QR code carrés que l'on voit généralement.

J'ai assemblé ces 2 morceaux ..... et j'ai essayé de scanner avec une appli. mobile => TOUJOURS RIEN. Je me suis dit "on ne sais jamais..." .. mais bon, je me disais que si cela ne marchais pas il faudra que j'attende les jours suivants pour avoir les morceaux manquants du QR-Code...

Alors j'ai ajouter 2 "gros carré" manquant typiques d'un QR code, en haut à droite et en bas à gauche, comme ceci (+ quelques détails comme une bande "repère" de pixel alternés blanc/noir) :



Ensuite.... scan => tjrs RIEN.

Ensuite, j'ai chercher sur Internet s'il y avait moyen de lire un QR code partiel (ce que aucune appli. mobile ne semble faire), alors je tombe sur
http://aioo.be/2015/07/28/Decoding-a-partial-QR-code.html et sur http://blog.qartis.com/decoding-small-qr-codes-by-hand/

. et je vois qu'il y a peut être moyen d'y arriver. Alors je me lance, ..... mais sans jamais avoir eu la certitude que ça sera jouable à la main. Mais je me dit ... ça se tente !

Et là, ... en gros je fais un peu pareil je suis les étapes ... je retrouve la taille du QR -Code ( carré 29px par 29px soit un QR Code version 3), .... et surtout dans la ligne sous le carré en haut à droite je lis "00100101" ... ce qui correspond aux bit 7 à 14 de la "version information" du QR code (cf https://www.thonky.com/qr-code-tutorial/format-version-information) .... je consulte https://www.thonky.com/qr-code-tutorial/format-version-tables et voit qu'il n'y a qu'1 chaine de 14 bits sur les 28 possibles qui finit par "00100101". De là il resssort que le QR-Code est de type "Correction d'erreur type M" et surtout de "Mask Pattern" de type 1.

Donc là, avec le pattern de type 1 (qui est un motif de lignes alternée ....) j'inverse les 0 et 1 d'une ligne sur deux. Puis enfin, je démarre en bas à droite du QR Code, un premier bloc de 2x2 indique que l'encodage est de type "8-bit". Ensuite on continue en prenant des bloc de 4x2 pixels, Le 1er bloc dit "taille 29 caracteres".



Ensuite, les blocs de 8 pixels, pris un par un, donne un numéro et en codage ASCII trouve "p", "l", "a", ...... (donc là ça sentais pas trop mal parce que je reconnaissais déjà le début du nom de domaine de notre site préféré) ..... "1", "1". Soit les 29 caractères suivants : planet-casio.com/4v3n7mMxv111" ... comme indiqué dans la solution du puzzle

Décryptage effectué à l'heure de l'apéro :



Et là ça amène à un truc Casio Education avec un algo. ... je regarde et je vois donc des instructions :

Go to x=4, y=1
Move4pixels
Pen Down
Move0pixels
Pen Up
Move2pixels
Pen Down
Move3pixels
....


Là je pense que c'est du scratch ... et donc je commence à prendre des blocks un par un .... pour reconstruire le programme dans scratch.... mais c'était trop long (parce que le listing faisait 777 lignes !! ). Je voyez bien que ça dessinait quelque-chose mais avec mon début de programme je n'avais pas assez. Après j'ai essayé Snap ... en faisant un import xml, sans beaucoup plus de succès.

Alors je suis allé sur https://www.calormen.com/jslogo/ qui est un interpréteur logo. A grand coups de rechercher/remplacer j'ai obtenu une version logo du script de 777 lignes. Du genre :

clearscreen
fd 4
pendown
fd 0
penup
fd 2
pendown
fd 3
....


Et c'est là le 07/12 à 19h56 que j'ai posté mon message "Après des heures de travail, je viens d'obtenir ceci :"



Mais ...
1/ Cette image était un peu floue (parce que ça dessine sur un Canvas HTML5 et que ça fait des interpolations .... et donc c'est flou).
2/ Cette image ne contenait pas le fameux code à 6 caractères. En effet, Lephe m'a dit n'avoir pas prévu que quelqu'un trouve si vite et donc tout n'étais pas prêt. Mais le script a été modifié durant le week-end et en rejouant j'ai obtenu l'image voulue (celle avec le code). Cette fois pour que ce ne soit pas flou j'ai utilisé l'astuce de taper "ctx.imageSmoothingEnabled = false" dans la console développeur de Chrome.

Partie II

voir ci-après ....

Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Shadow15510 Hors ligne Administrateur Points: 5503 Défis: 18 Message

Citer : Posté le 02/01/2019 14:04 | #


Alors les charades et les énigmes c'est moi

"bas à gauche" faisait référence à une partie du QR code effectivement caché en bas à gauche de l'image.
Les deux première charades sont justes. Concernant le 7ème indice :
• Mon 1er peut avoir 20 faces, mais rarement plus (dé)
• Mon 2nd est en forme (sain)
• Mon tout peut être beau et va vous aider à trouver un précédent indice. (dessin)

et le 3ème :
Je peux être sage, ou incarner la violence.
Pour qui sait, je suis source d’information.
Trafiquée je peux mentir, mais véridique je montre la vérité sans détour…

La réponse était : Image sans grand interêt...
En effet une image peut être violente. Être sage comme une image.
Si on sait analyser une image on peut décelé un tas d'information (référence à la stégano)
Trafiquée : les images photoshopées qui ne montre pas la vérité. Ou à l'inverse les photo simples qui elle ne montre que la vérité et rien d'autre...

J'avais 'autre indices mais Krevo_ s'est amusé à nous couper l'herbe sous le pied donc vous n'avez pas eu mes plus dur... (je les garde pour une foi prochaine peut-être )


"Ce n'est pas parce que les chose sont dures que nous ne les faisons pas, c'est parce que nous ne les faisons pas qu'elles sont dures." Sénèque

Ityt Hors ligne Membre Points: 216 Défis: 0 Message

Citer : Posté le 02/01/2019 14:27 | #


Je
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 02/01/2019 15:15 | #


Bon, je copie-colle ici ce que j'ai déjà envoyé à Lephe, mais je complèterai le post ce soir avec tout le reste.

Tout ce que j'ai produit est dans le zip qui sera ci-joint
Pour ce qui est des fausses pistes, j'ai plus tout en tête, mais j'essaierai de compléter ce pavé. Désolé si ça vous parait simple à la lecture, mais j'ai quand même bien galéré par moments.

Récupérer le QR code

Bon, dès le début je me doutais d'un coup de stégano quand j'ai vu l'indice 5 (Une pièce peut en cacher une autre). Sous entendu une pièce du puzzle (dans le sens image) peut cacher une pièce du puzzle (dans le sens énigme).
Par flemme, je n'ai pas cherché quoi que ce soit avant que Krevo_ trouve le message d'Arecibo.
Ne sachant pas vraiment quoi chercher, j'ai développé un outil permettant de mettre en valeur les très faibles modifications de contraste. L'image de sortie est en nuances de gris, sur un octet par pixel. Je mets ici le calcul de la couleur de sortie.
def contrast(a, b): # le contraste inversé entre deux pixels
    if type(a) == type(()): # si il y a plusieurs canaux de couleurs (RGB par exemple, voire RGBA)
        k = [abs(i - j) for i, j in zip(a, b)]
    else: # si il n'y a qu'un seul canal
        k = [abs(a - b)]
    # k est donc un tableau contenant le contraste de chaque canal de couleur
    # on commence par calculer `255/i` pour chaque bande, ou `0` si `i == 0`. Cela veut dire que si sur une bande on a légèrement du contraste (`i` faible mais non nul), `255/i` sera très grand, et inversement. Si les deux couleurs sont identiques, on met 0 car pas de contraste.
    # on fait ensuite la somme de toutes les bandes, de manière à ce qu'un très faible contraste sur une unique bande soit bien visible
    # puis on majore à 255, dans le cas où ça dépasserait.
    # on retourne alors la valeur
    return min(255, int(sum([255/i if i != 0 else 0 for i in k])))


En appliquant la fonction contrast sur les pixels a(x, y) et b(x+1, y), puis a(x, y) et c(x, y+1), en faisant la somme majorée encore une fois à 255, on obtient des résultats intéressants :


Les pièces du jour 7 passées au détecteur de stégano


Clairement on voit bien qu'un QR code est planqué dans la tuile en bas à droite. Avec Gimp, j'ai extrait les bouts en jouant sur le contraste.

À ce stade, on n'avait à disposition que deux petites parties du QR code, celles que Krevo_ a décryptées. Je me suis douté qu'il avait procédé à la manip, mais clairement j'étais impressionné qu'il soit arrivé au bout. Bravo encore !
Encore par flemme, j'ai attendu la partie suivante pour recomposer le QR code.

Pas de bol pour nos chers admins, le flip de la partie du haut ne changeait absolument rien au fait que le QR code était lisible ou non. Du coup j'ai grillé une étape. J'ai trouvé le QR code le 11 décembre, jour où Casio a décidé de faire la maintenance de son site pendant 24h…

Bruteforce du Nollipap

Entre temps, je me suis penché sur le Nollipap.

Après analyse du programme, il s'avère que le papillon n'est là que pour faire joli, on peut donc le virer du code à analyser.

Ensuite, on s'aperçoit qu'une combinaison de 6 touches sert de code secret pour trouver une information stockée de manière cachée dans la Str 2.
Il y a donc potentiellement 47 touches, ce qui amène à 47^6 ~= 10^10 clés différentes.

Voici quelques éléments qui vont nous permettre d'affiner la recherche.
1. Les règles indiquent une séquence de 6 caractères alphanumériques. On peut supposer que c'est le code que l'on cherche. Si l'on s'en tient au pavé habituel, on réduit à 22 touches le champ à explorer.
2. Seuls deux caractères spéciaux sont dans le dictionnaire, l'espace et le point d'exclamation. On peut là aussi supposer qu'ils sont utiles, et dans ce cas le point d'exclamation se retrouve probablement en fin de message.

En reprogrammant l'algorithme en Python, il est facile de générer les 22^6 ~= 113 millions de messages. Sur ma machine cela a pris environ 2 heures.
À l'aide d'un grep, on sélectionne les messages qui finissent par un point d'exclamation.

Une rapide analyse visuelle des 10 millions de lignes qui en résultent montrent que des bouts comme ST*G ou ANO reviennent régulièrement. On peut là aussi supposer qu'il s'agit du mot STEGANO. Même si il n'existe pas dans le dictionnaire, on peut supposer qu'il fait référence à « stéganographie ». C'est d'autant plus probable puisque le QR code est caché selon une technique classique de stéganographie.
En affinant encore la recherche selon les messages qui finissent par STEGANO!, on fini par n'avoir plus qu'une dizaine de milliers de messages.

Là aussi, on sait que l'espace a sûrement un rôle à jouer. Or avec ce que l'on a vu au dessus, il ne peut se situer que avant le mot STEGANO!. On affine en conséquence.

À ce stade, il n'y a plus qu'environ 3000 messages, parmi lesquels des trucs qui ne veulent absolument rien dire, mais un a retenu mon attention. Il s'agit de REV STEGANO!. En effet, avec l'indice 4 (Une symétrie en vaut deux…) et le nom du programme "Nollipap", on se rend compte que ce dernier est inver. VER, REV, cela est étonnant parmi les formules qui sortent, dont la grande majorité ne comporte aucune voyelle.

En récupérant la clé associée au message, on se rendra alors compte que c'est celle qui correspond à la clé indiquée dans le message d'Arecibo, mais à l'envers.

Fun-fact 1 : le nollipap fonctionne avec une liste de 24 valeurs qui contiennent les informations nécessaires pour afficher les 12 caractères du message. Or chaque caractère est associé à une unique valeur. Cela veut dire que 12 valeurs sont inutilisées avec le premier code. C'est pour cela que j'ai passé un peu de temps à essayer de trouver une autre combinaison de touches capable de faire parler le nollipap une deuxième fois, en vain.

Fun-fact 2 : parce que REV peut faire référence à INVERSE, je me suis demandé si l'indice ⋅⋅⋅–––⋅⋅⋅ n'était en fait pas plutôt ⋅⋅–––⋅⋅ pour INVERSE.

Là, on était le 13 décembre.

À la recherche d'Arecibo

Bon c'est pas tout, mais le 12 au soir le site de Casio était de nouveau en ligne. Pour nous balancer trouzemille lignes de code turtle… J'ai pas trouvé de quoi, donc j'ai codé vite fait un interpréteur assez rudimentaire.
Le programme prend en entrée des instructions comme celles ci-dessous. En jouant sur des rechercher/remplacer, j'ai viré les trucs qui me faisaient chier pour l'interprétation du code.
Turn90degrees
Move-1
Turn90degrees
Move4
Pen Down
Move0
Pen Up
Move2

En moins de 20 minutes de programmation, j'avais le message d'Arecibo (avec le code) sous les yeux.

En le couplant avec mes recherches de bruteforce, ça a validé ma théorie. On était autour du 14 décembre.

À la recherche du programme mystère

À partir de là, les indices ont étés vachement moins intéressants pour moi. J'avais compris qu'il y avait quelque chose à inverser, et Lephe continuait de radoter avec ses histoires de sens. Du coup j'ai laissé tomber l'affaire jusqu'au 24. Là Lephe a dit que c'était un numéro de programme. J'ai tenté de faire parler le nollipap de toutes les manières possibles, mais il est resté muet comme une carpe… Et je n'étais pas sûr de l'ordre des tuiles qui composaient le morse, donc je n'ai pas cherché dans cette direction. J'étais avec toute ma famille, donc j'ai pas try-hard. Idem le 25.

Le 26, Krevo_ donne la solution de l'énigme. Ça me remotive pour finir. Lephe poste l'image complète, me donnant par la même occasion la confirmation de l'ordre du morse. Mais j'ai commencé par chercher du binaire (un nombre quoi…) avant de me rendre compte que c'était du morse. Je crois qu'on en discutait sur la shout à ce moment là, du coup j'ai tenté. Et ouais, je comprends pas pourquoi je l'ai pas vu plus tôt, parce que bon, je le connais quand même par cœur.

Je tombe sur LINK24. Génial, le programme n°24 est Drug Life 2, le jeu qui est resté presque 10 ans en haut du top des jeux du site. Lephe avait dit qu'on serait sur le cul en voyant de quel programme il s'agissait, je me suis réellement demandé si j'étais bien tombé sur le bon. Mais sans commentaires ni modifications depuis un bail, c'était peu probable.

Tiens, en parlant de modification récente… Lephe a dit avoir changé la phrase après le passage de Krevo_. Ça doit se voir sur la page du programme en question. Dans le doute, j'ai parcouru la liste des programmes de Critor, ce qui va assez vite, puis celle de Lephe. Et là, oh miracle, le jeu de la vie a été modifié le 26 décembre. Coïncidence ? Je ne pense pas.

Pouf, une deuxième étape de grillée.

L'étape finale

En voyant le programme, j'ai pensé à une sorte de message qui s'afficherait à la manière du message d'Arecibo. J'avais pas de calto sur moi, ni d'émulateur, donc j'ai attendu un peu. Lorsque j'ai dit ça à Lephe, il m'a répondu que y'avait pas besoin de le télécharger. Et j'ai demandé un indice sur le forum. Et c'était tout de suite plus clair.

Voilà comment j'ai "résolu" le puzzle de l'Avent.

Plus de détails à venir, peut-être…
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Lephenixnoir En ligne Administrateur Points: 24556 Défis: 170 Message

Citer : Posté le 02/01/2019 15:19 | #


Alors bravo pour avoir trouvé le sens inverse du mot "REV" donné par le papillon ! Pour l'indice que tu pointes, c'était bien ...___..., un bête SOS qui permettait de vous concentrer sur le morse et chercher commencer modifier la séquence pour que ce soit du morse intéressant, au lieu de chercher un autre code qui aurait permis d'interpréter la suite.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Leno Hors ligne Membre Points: 282 Défis: 0 Message

Citer : Posté le 02/01/2019 16:13 | #


Pour ma part j'ais tout de suite trouvé les morceaux de QR code mais je n'ais pas trouvé comment les assembler et comme j'avais déjà la calto j'ai laissé tomber.
Lephenixnoir En ligne Administrateur Points: 24556 Défis: 170 Message

Citer : Posté le 02/01/2019 16:15 | #


C'est quand même ironique que la Graph 90 soit si répandue déjà. Mais ça montre que c'est un bon modèle, c'est cool !

Ajouté le 02/01/2019 à 17:06 :
Comme promis, j'ai ajouté l'explication des 26 indices du problème ! Oui... 26. Aviez-vous raté celui de Noël ?
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 02/01/2019 18:02 | # | Fichier joint


Suite de mon debriefing du puzzle de l'Avent. Je continue de vous dire ce que j'ai trouvé, comment j'ai trouvé, ce qu'il s'est vraiment passé de mon côté, les idées et les intuitions que j'ai eus .... et aussi quelques fausses pistes que j'ai suivies.

Partie II - Nollipap

Après Arecibo, me voilà avec un code 9L3AF4 dont je ne sais quoi faire ... mais les jours suivants allaient m'apporter la réponse.

Comme l'a dit Lephe, il a posté un programme Nollipap le 10/12. Pour tout dire, je n'y ai pas prêté attention au début. Puis dans la shoutbox, à force de voir des "Nouveau commentaire sur Nollipap", je suis allé voir. Le commentaire qui a le + attiré mon attention est celui de Santaro21 : "Does character string when I stopped it have any meaning?", qui fût suivi de cette réponse de Lephe : "Yes the character string is contextual!" .... tiens tiens un programme qui à la fin vous donne une chaine de caractères... je pense que je tenais l'étape 2... Mon intuition semblait confirmée par le commentaire de Ne0tux qui était un lien vers le topic du puzzle de l'Avent !

Comme j'étais au boulot, j'ai téléchargé le programme et aussi BIDE, j'ai regardé ce que ça faisais et j'ai vu que la chaine de caractères dépendait des 6 touches qui avait était tapées. 6 touches <-> 6 caractères.... j'ai fait le lien avec le code obtenu avec Arecibo. Pour la petite histoire, j'ai recodé en php (voici le programme), à la pause déjeuner, la partie qui manipulait les chaines de caractères, car certes le dessin est joli, mais tout ça c'était de la poudre aux yeux pour nous égarer Bon, bref je pouvais tester différentes séquences, en premier j'ai testé le code à l'endroit .... et puis comme le nom du programme était Papillon mais à l'envers, j'ai testé le code mais à l'envers .... et j'ai obtenu le "REV STEGANO!", que j'ai compris comme Réviser ou Revoir la stégano !

Avec ça j'étais encore en mode pause à attendre la suite.

Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Kikoodx Hors ligne Ancien labélisateur Points: 3037 Défis: 11 Message

Citer : Posté le 02/01/2019 18:46 | #


C'est très impressionnant
Félicitations aux participants et organisateurs !
ouais ouais
Critor Hors ligne Administrateur Points: 2670 Défis: 18 Message

Citer : Posté le 02/01/2019 19:05 | #


Merci à tous pour le détail de vos astuces, souvent très impressionnantes et instructives !
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 02/01/2019 19:46 | #


Suite de mon debriefing du puzzle de l'Avent. Je continue de vous dire ce que j'ai trouvé, comment j'ai trouvé, ce qu'il s'est vraiment passé de mon côté, les idées et les intuitions que j'ai eus .... et aussi quelques fausses pistes que j'ai suivies.

Partie III - Revoir la stegano, code morse

Donc le 12/12 à 13h34, je disais "Le papillon m'a chuchoté un petit mot ".

Me voilà alors avec un message REV STEGANO! dont je ne sais quoi faire ... mais les jours suivants allaient m'apporter la réponse (oui, je sais je l'ai déjà dit à l'étape précédente).

A partir de là, je recherche comme un malade tout ce qui pourrait être caché dans l'image et que je n'aurais pas vu. Pour cela je télécharge une programme java "stegSolve" et je passe au crible tous les blocs de tiles donnés depuis le début.... sans succès

Il fallait encore de la patience, car c'est un puzzle de l'avent et l'enigme se dévoile un peu + chaque jour.

Le 14/12 et le 15/12, je remarque des sortes de pointillés marrons, dans le tour du cadre de texte. Et là je commence à essayer d'interpréter tout ça comme du binaire, en essayant de décoder 8 bits, d'avoir un code ASCII ..... sans succès

Le 18/12 arrive enfin un indice qui allait me débloquer un petit peu, "Indice n°20 : ...___...", je reconnais tout de suite le "SOS" en code Morse. J'arrête donc d'essayer d'interpréter les "pointillés marrons" comme du binaire mais plutôt comme du morse. Il y a des pixels (le court du morse) et des "double pixels" ou traits (les longs du morse) et il y a même des séparations (non, parce en Morse si on regarde bien wikipédia, il y a une certaine séparation entre les lettres à respecter sinon on peut confondre 2 lettres successivres pour une autre ... vous verrez que c'est important dans le rush final). Il me restait à savoir si c'était "le marron clair significatif" ou le "marron foncé significatif" (la fameuse inversion 0 / 1 dont Lephe nous parle dans sa solution). De plus, je me disais que c'était peut-être à lire de droite à gauche au lieu de gauche à droite. J'avais donc 4 possibilités d'interprétation. De plus, avec 2 tiles, je me disait qu'il en manquais surement encore 1 ou 2 pour le message morse complet.

Donc en gros ça donnait ça :



Donc, le meilleur candidat c'était quand même "LIN" et "2S", parce que I E E B ça veut rien dire .... mais tant qu'on à pas le message complet on ne peut pas être vraiment sûr.

Partie IV - Rush final

Bon, là j'étais parti en vacances donc ça veux dire moins de moyens informatique et aussi moins de temps solo car + de temps en famille....

Le 24, en revenant de la sortie raquette (décidemment vous saurez tout ...), je vois que les derniers morceaux sont postés. Après le déjeuner, je tente donc une petite session de travail. Dans les pièces postées, encore du morse, comme je m'attendais. Je termine mon assemblage du puzzle (car il faut trouver la phrase mystère et donner l'image finale du puzzle). Puis je décrypte le message en morse, et j'aboutit à "LINK2SA". Et là .... c'est l'impasse. Je pars m'aérer à la patinoire en famille, je fais des tours de piste en ressassant "LINK2SA, LINK2SA, .... qu'est ce que ça peut bien vouloir dire ?????" (en direct de ma tête)

Et là, la nuit du 24 au 25 passe, tjrs en réfléchissant sur "LINK2SA".
"Link 2SA" ?? "Link 2 SA" ?? "Link To SA" ?? SA ???
La nuit du 25 au 26 .... pas mieux... peut être refaire parler le papillon mais avec 7 caractères ça colle pas ...

Et là, subitement le 26 au matin, je me dit que non, si je veux refaire parler le papillon, c'est pas 7 caractères qu'il faut mais 6 !! Et je regarde mon brouillon du 24, et en fait je vois que j'avais fait une accolade sous "S" et "A" pour regrouper en "4".

En effet,
... + .- = SA
alors que
....- = 4

mais pour ma défense "..." et ".-" était sur 2 tiles différentes, donc j'avais imaginé une séparation (comme celle qui séparait les autres lettres), alors qu'il n'y en avait pas.

Du coup, j'ai "LINK24" : super 6 caractères .... j'essaye de refaire parler le papillon (Dark a eu la même idée de le refaire parler) à l'endroit et à l'envers, mais sans succès

Donc, comme le papillon ne voulait pas reparler, il fallait trouver autre chose. Comme on cherchait un id de programme, j'ai aussi testé l'id 24 soit "Drug Life" mais ça n'avait pas l'air d'être ça.

Là j'ai eu l'idée toute bête de chercher un lien ("LINK" !!) hypertexte caché sur le "24 décembre". Un petit view source sur la page et hop on pouvait lire le Product of all numbers (not digits) in the 6-character secret codes.

Après j'ai fait 9 x 3 x 4 = 108 .. pas le bon id non plus.
Alors j'ai essayé les codes de ces touches, ça faisait un id trop grand.
Alors j'ai demandé à Lephe sur le chat ce que c'était un chiffre, ce que c'était un nombre ... et là j'avoue que ça m'a un peu aidé. Il a dit "xxx3xx4" c'est 2 nombres et "xx34xx" c'est 1 nombre. Là je pense que Lephe avait aussi envie que quelqu'un finisse par trouver. J'ai repensé à l'indice in the 6-character secret codes et j'ai trouvé bizarre le "s" à la fin alors que je n'utilise qu'un seul "secret code" le "9L3AF4".... ça m'a pris un moment mais j'ai fini par comprendre que le s n'était pas là pour rien, il fallait utiliser aussi le secret code "LINK24". J'ai donc bien fini par faire le 9×3×4×24 = 2592, ce qui est l'id du programme add-in du Jeu de la vie , un programme de Lephe (oui, j'ai aussi eu l'idée d'inspecter tous les programmes de Lephe mais je n'ai pas suivie cette voie car ne sachant pas déterminer si je serais ou non sur le bon programme). En arrivant sur la page du jeu, j'ai vu "Modifié le 23/12", je me suis dit "Bingo !! C'est le bon programme". Par contre, j'ai perdu du temps à le télécharger et à l’exécuter pour voir si à la fin ça affichait un code ou la phrase mystère, un peu à la manière du papillon. J'ai même choisi différents paramètres (nombre d'itération, motif de départ, ....).

Après tout ces essais infructueux, j'ai décidé d'appliquer la même méthode que pour le LINK24, à savoir regarder le code source de la page... et là EURÊKA j'ai vu ce qui ne pouvait être que la phrase mystère finale que je recherchais : ♫ C'est l'esprit du puzzle - Joyeux Noël ♫

Là, si vous avez tout lu, bravo !



Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 02/01/2019 20:01 | #


Je suis en train de mettre à jour mon commentaire au fur et à mesure.
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Krevo_ Hors ligne Maître du Puzzle Points: 412 Défis: 2 Message

Citer : Posté le 02/01/2019 20:07 | #


Dark storm a écrit :
Je suis en train de mettre à jour mon commentaire au fur et à mesure.


Oui, oui, moi aussi !
Casio Basic Web Interpreter, c'était le basic Casio dans votre navigateur web !
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 02/01/2019 20:20 | #


Fini. Enfin, pour ce soir
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Dark storm Hors ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 02/01/2019 21:26 | # | Fichier joint


D'ailleurs, un exemple de pourquoi je me suis fait chier à développer un outil de contre-stéganogaphie :


Saurez-vous retrouver le QR code caché dans ce QR code ?
C'est un lien vers le profil de l'un des membres de PC
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 61 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd