[COMINFOR2017] Étape 5 – Brainfuck

[COMINFOR2017] Étape 5 – Brainfuck

C’qui compte, c’est les pointeurs. Bien botté en touche ! Pour un souci de lisibilité, je n’ai pas remis le code du programme en brainfuck.

J’ai tout de suite reconnu le langage Brainfuck qui est également un classique dans ce genre de challenge. Il s’agit d’un langage de programmation exotique. J’ai donc tenté d’exécuter dans un interpréteur en ligne. On obtient la phrase suivante :

L’objectif de Müller était de créer un langage de programmation simple,
destiné à fonctionner sur une machine de Turing, et dont le compilateur
aurait la taille la plus réduite possible. Le langage se satisfait en effet de
seulement huit instructions. Ùî...

Les caractères à la fin ne sont plus des caractères ASCII représentables. De plus le titre nous met sur la voie, il s’agit ici d’un programme qui contient une erreur de pointeur. En regardant le programme ligne par ligne, on s’aperçoit qu’une des lignes est incohérente. Il y a un double décalage vers la droite alors qu’il devrait être vers la gauche.

<<-----------.		#c1=105 print(105)		i
+++++.			#c1=110 print(110)		n
+++++.			#c1=115 print(115)		s
+.			#c1=116 print(116)		t
--.			#c1=114 print(114)		r
+++.			#c1=117 print(117)		u
------------------.	#c1=99 print(99)		c
+++++++++++++++++.	#c1=116 print(116)		t
-----------.		#c1=105 print(105)		i
++++++.			#c1=111 print(111)		o
-.			#c1=110 print(110)		n
+++++.			#c1=115 print(115)		s
>>++++++++++++++.	#c3=46 print(46)		.
--------------.		#c3=32 print(32)		space

# ERREUR
# Le décalage devrait être vers la gauche
# >>---------------------------------------. 
# La bonne ligne est
# <<---------------------------------------.

Une fois cette erreur corrigée, j’ai relancé le programme dans l’interpréteur et obtenu la phrase :

L'objectif de Müller était de créer un langage de programmation simple, destiné à fonctionner sur une machine de Turing, et dont le compilateur aurait la taille la plus réduite possible. Le langage se satisfait en effet de seulement huit instructions. La version 2 du compilateur originel de Müller, écrit pour l'Amiga, ne pesait lui-même que 240 octets, la version actuelle se contentant de 171 octets. Le brainfuck est pourtant un langage Turing-complet, ce qui signifie que, malgré les apparences, il est théoriquement possible d'écrire n'importe quel programme informatique en brainfuck. Le flag est : PRbTVu7Ufq

On peut alors valider le challenge avec le flag : PRbTVu7Ufq

Leave a Reply

Your email address will not be published. Required fields are marked *