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 :
-
00000920 58 DF 7F 00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 4F 50 59 52 49 47 48 54 20 28 43 X... COPYRIGHT (C
-
00000940 29 20 31 39 37 39 2C 20 44 49 47 49 54 41 4C 20 52 45 53 45 41 52 43 48 20 20 00 00 00 00 00 00 ) 1979, DIGITAL RESEARCH ......
-
00003180 02 13 04 15 06 17 08 19 0A 1B 0C 1D 0E 1F 10 0D 0A 36 34 4B 20 43 50 2F 4D 20 56 65 72 73 69 6F .................64K CP/M Versio
-
000031A0 6E 20 32 2E 32 20 28 53 49 4D 48 20 41 4C 54 41 49 52 20 38 38 30 30 2C 20 42 49 4F 53 20 56 E5 n 2.2 (SIMH ALTAIR 8800, BIOS V.
Ç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...)