Ce billet n'avait été publié qu'en anglais. Nous l'avons traduit en 2026 pour que les archives se lisent dans les deux langues. Lire l'original →


iHack 2013, volet forensique #1 - la machine à voyager dans le temps

Ce défi-là a été vraiment le fun à réaliser, parce que j'étais dans une humeur nostalgique et que je voulais en même temps essayer quelque chose d'exotique. J'ai décidé que je devais essayer de faire rouler un vieux système d'exploitation, plus vieux que les versions de MS-DOS avec lesquelles je travaillais quand j'étais plus jeune, et je me suis souvenu d'un prof au cégep qui disait avoir commencé à travailler avec des ordinateurs sur CP/M. Je me suis donc mis à la chasse pour trouver une copie [probablement] abandonware et pour savoir comment la faire rouler sur un PC moderne. J'ai commencé à expérimenter avec YAZE sur Linux, mais c'était vraiment loin d'être une expérience complète. Puis, en chignant sur Google, j'ai découvert un autre outil.


Comme j'étais d'humeur à expérimenter, que j'aime apprendre sur les structures de données, leur reconnaissance et leur récupération, et que l'iHack 2012 arrivait à grands pas... aussi bien faire tout ça en même temps. Les objectifs : découvrir ce qu'est ce fichier inconnu, comment l'identifier et, finalement, comment l'utiliser/l'exploiter pour explorer plus loin. Ah, et aussi RTFM ;)

Les participants recevaient un fichier nommé bttf (en l'honneur de la description et du film Retour vers le futur), sans autre identification. La première étape serait de vérifier s'il y a un en-tête d'identification

# file bttf
bttf: data

Ça ne dit pas grand-chose... c'est le temps de sortir hexedit pour trouver ceci dans les premiers buffers :

Ça fait beaucoup d'information. SiMH est l'émulateur/la machine virtuelle que j'ai trouvé pour faire rouler CP/M et, juste pour pimenter les choses, sur une machine Altair 8800 « virtuelle »; googlez-la rapidement. Notre fichier n'est qu'un fichier disque, pas l'émulateur lui-même, et en lisant les pages de doc de SiMH, vous apprendriez qu'on peut charger des images disque avec une commande pour accéder à ces données.


Une fois rendu là... on explore le disque, on apprend les commandes et leur syntaxe, et on découvre rapidement l'utilisation de scripts mBasic, comme ELIZA.BAS... ou KILLFLAG.BAS. Ce dernier était juste là pour faire un peu peur au monde, au cas où ils effaceraient le fichier en le lançant. Il fallait charger le fichier dans l'éditeur mbasic puis en lister les lignes, puisque c'est du « code » procédural.

LIST

20 A$="lcmUgdGhlIGJlc3uLi5"

30 AB$="yZW1lbWJlciBCVNJQz8="

40 SWAP A$,B$

50 C$=SEG$(A$,INT(RND*20+),1)

60 D$=C$

70 PRINT FRE("")

80 FLAG$=A$,B,AB$

90 PRINT FLAG$

Ok


Ce script n'est pas censé rouler correctement; c'est juste pour forcer les participants à analyser le processus manuellement (ou à prendre le temps et l'occasion d'apprendre un peu de BASIC pour le corriger — j'ai d'abord eu le trip techno de le faire en asm 6502) afin d'arriver au flag. Comprendre les fonctions mBasic utilisées vous dirait comment les variables sont brouillées et assemblées. Bien sûr, certaines données étaient là juste pour vous mettre sur une fausse piste!

flag : b2xkIHRpbWVzIHdlcmUgdGhlIGJlc3QuLi5yZW1lbWJlciBCQVNJQz8= (décodez-le si ça vous tente...)