La Barre Fixe
404CTF{x86_64-iGnor3s-5TuFF}
Dernière mise à jour
Cet article vous a-t-il été utile ?
404CTF{x86_64-iGnor3s-5TuFF}
Dernière mise à jour
Cet article vous a-t-il été utile ?
Catégorie: Stegano Difficulté: easy Flag: -
C'est le grand moment, tous les yeux sont rivés sur vous. Vous vous apprêtez à commencer votre prestation sur l'épreuve de la barre fixe. Mais quelques instants avant de vous élancer, vous remarquez un détail intriguant. Certaines choses sont là... alors qu'elles ne devraient pas l'être... Un message peut être ?
On commence par chercher ce que l'on a entre les mains, donc soit avec un coup de commande file
, soit via un site en ligne comme .
Il s'agit d'un exécutable x86 en 64bits. On va donc le décompiler pour savoir ce qu'il fait, ici, j'utilise IDA. Direction la fonction _start
qui est le point d'entrée du programme.
On voit plein d'instructions db
. Elles signifient que le logiciel n'a pas su les comprendre, car elles ne sont pas censées être là.
On trouve toujours les mêmes valeurs hexadécimales : 65, 2E et 3E. Il s'agit de préfixes pour indiquer les segments à utiliser.
Pas besoin de comprendre ce que ça veut dire, IDA nous dit qu'elles n'ont rien à faire ici donc c'est surement une bonne piste à explorer vu l'énoncé du challenge.
Pour aller un peu plus loin, on peut s'amuser en Python à décompiler le binaire pour lister chaque instruction, puis à les recompiler. On pourra ainsi voir les différences puisque les instructions inutiles vont partir d'elles-mêmes.
On a confirmation que le début de chaque instruction est étrange, et en plus de nos trois valeurs, on voit également 40
qui disparaît.
Ça nous fait un total de 4 valeurs "fantômes", et le plus bizarre, c'est qu'elles semblent toutes respecter un certain ordre.
2E
apparaît toujours avant 3E
65
apparaît toujours avant 2E
40
apparaît toujours avant 65
Ce qui donne l'ordre : 40 65 2E 3E
On a 4 valeurs qui apparaissent ou non, dans un ordre précis. Et si elles représentaient les bits du message caché que l'on cherche ?
Le flag commence par 404
, ce qui donne en binaire : 0011 0100 0011 0000 0011 0100
Si l'on prend les instructions une à une et que l'on regarde si nos valeurs y sont :
Ça ressemble à notre flag en binaire. La première instruction correspond aux 4 bits bas du caractère "4", puis la seconde instruction aux 4 bits hauts.
Pour chaque instruction, on va donc écrire un bloc de 4 bits en fonction de si les valeurs fantômes sont présentes. Ensuite, il faudra simplement assembler 2 blocs par 2 blocs pour reformer nos octets (en veillant à ce que le 1ᵉʳ bloc corresponde bien aux bits de poids faibles).