En ouvrant le fichier, on voit directement qu'il s'agit d'un schéma "Logisim",
donc, on va installer le paquet associé (un simulateur de circuits logiques)
On ouvre le fichier du circuit dans Logisim
On explore ensuite les différents circuits (chaque "Système" à gauche est un circuit)
L'un d'eux m'a fait marrer (et m'a poussé à me dire que le challenge "reverse" serait complexe)
Deux fichiers set1 et set2 sont également fournis:
on les charge dans les puces mémoire du circuit
Je suis passé à une version "dark" de Logisim car sinon, les options ("Contents", à gauche)
ne s'affichent pas bien: elles sont en blanc sur fond blanc
On va tenter de charger le set2 dans la puce du bas (et le set1 dans celle du haut),
car cela semble aller de soi, mais on gardera à l'esprit que, peut-etre, c'est l'inverse
Une fois le tout chargé, on lance la simulation… et ça ne produit aucun résultat
Des erreurs
En regardant de plus près, on voit un fil bleu et un fil rouge.
On ouvre le circuit avant le fil rouge
Là, on voit des "E", probablement pour "ERROR"
et on observe des "trous" au-dessus des portes logiques
A ce moment-là, j'ai compris que le circuit avait des erreurs qu'il nous faut corriger d'abord
On va au plus simple, et on connecte les portes du haut à celles du bas, deux à deux
(au vu de leur configuration et de leur nombre, ça semble cohérent)
On ouvre les autres circuits un à un, à la recherche d'autres erreurs du genre
Une fois qu'on a tout corrigé, au plus cohérent, le circuit vire au vert
Si on le lance, il se passe mainteant des choses: on a un message "ERROR" affiché
Keyboard
En allant voir la documentation en ligne,
on découvre que cet élément est une entrée clavier…
…comme l'indique cette page web
J'essaie alors, caractère par caractère, de voir ce qui se passe en brute-forçant la première
valeur. On s'aperçoit que "ERROR" apparait toujours, mais "plus tard"
Compteur et brute-force
Je décide donc d'ajouter un nouvel élément au diagramme, un compteur,
qui me servira à déterminer combien de lettres j'ai juste
Le but est alors d'essayer toutes les valeurs possible de la 1ere lettre,
et quand ce compteur sera "un cran plus haut que d'habitude",
cela signifiera que la lettre est correcte.
Brute-forcer à la main sera long, mais le concept marche: la valeur de mon compteur
me permettrait, si je peux la lire dans un script, de savoir si ma i-eme lettre est juste
xdotools
N'ayant pas trouvé comment scripter dans Logisim, je décide de me faire un script xdotools
qui simulera les entrées clavier
Cela rend la machine inutilisable pendant le temps du brute-force, mais tant pis.
En revanche, le plus dur sera maintenant de "lire" le compteur de lettres,
pour que le script sache s'il a juste ou pas.
Je lance mon xdotools, et je reste devant l'écran:
dès que le compteur passe un cran de plus, je note sur un papier la bonne lettre
Log
Mais cette méthode est chiante: elle m'oblige à rester planter devant l'ordi.
Donc, en cherchant, je vois qu'on peut logger la valeur des compteurs dans un fichier
Je possède maintenant une sortie que j'intègre au script, pour qu'il détermine lui-même
s'il a bien trouvé la bonne lettre
Dans le doute, je laisse tourner le script pour toutes les lettres:
sait-on jamais, peut-être qu'une autre lettre me génèrera un faux positif?
Au final, non une seule lettre s'avère juste à chaque fois
Comme je suis allé repasser mon linge pendant que la machine cherchait les lettres,
j'ai mis un message audio (vous devinerez le jeu dont il est tiré) en cas de succès, ou d'échec
Mais le brute-force s'est arrêté en plein milieu, et mon flag n'est pas complet
Encore des erreurs
En fouillant les circuits au moment de l'arrêt, je trouve des fils rouges dans l'un d'eux
Je corrige, en rajoutant des "ronds" (NOT) aux endroits à trous, ce qui bouche les trous
La brute continue
On reprend le brute force (après avoir re-rechecké qu'il n'y a plus de trous dans les fils)
et un autre caractère est trouvé
On laisse tourner (certains caractères se "devinent", vu qu'on est en l33t speak)
Une fin imprévue
Arrivé vers la fin, j'obtient un flag presque complet
Mais ce flag "presque complet" me dit "Félicitations" quand même!
Impossible de savoir quel est réellement le flag…
Je me retrouve avec plusieurs possibilités, et je n'ai pas de moyen de savoir laquelle est juste
J'y vais alors réellement au pif, voyant qu'en gros 1 lettre sur deux est minuscule
et l'autre majuscule, et… ça passe!
404CTF{K33p_c4lM_4nD_r3VeRsE}
Par la suite, il a été annoncé que le challenge avait une erreur de données.
D'où le fait qu'une "v2" existe dans
le zip des fichiers du challenge
. Mais je n'ai pas testé si cette deuxième version corrige bien
le soucis de flag incomplet (je suppose que oui).