L’un gêne, il rit, un verre sait.

(Si vous n’avez pas compris le titre, prononcez-le. Si vous n’avez toujours pas compris… heuuuuuuuu….)

C’est rare, très rare, que je fasse un article pour promouvoir un logiciel (même pas libre qui plus est) mais je dois reconnaître que je vais faire une entorse au règlement (quel règlement ?).

Souvenez-vous en, je vous avais concocté un petit article sur les secrets de la compression il n’y a pas si longtemps… Dans ce même article, je vous avais présenté un document, nommé The Definitive Guide To Exploring File Formats, accompagné de deux logiciels, MultiEx Commander et Game Extractor… eh bien si vous avez envie de mettre en pratique efficacement vos nouveaux dons de reverse engineer de formats de fichiers, je vous conseille de télécharger et d’essayer 010 Editor. Et si vous voulez en savoir plus, lisez la suite…

En fait, je cherchais à la base un logiciel capable d’ouvrir de très gros fichiers XML (genre 100 Mo) et pouvoir me balader dedans, rechercher etc. le tout rapidement. Après une courte recherche sur Google, j’ai fini par trouver ce fameux logiciel. Et là, plus que la possibilité d’ouvrir de gros fichiers, il m’est apparu la possibilité de décoder des fichiers, en créant des templates. Qu’est-ce ? Il s’agit de la description de la structure du fichier que vous avez ouvert. Exemple simple, qui analyse le MBR du disque dur :

//------------------------------------
//--- 010 Editor v2.01 Binary Template
//
// Name: MBRTemplate.bt
// Author: Christian Schaffalitzky
// Purpose: Parse a Master Boot Record on a Harddisk
//------------------------------------

typedef struct fdisk_partition {
  unsigned char bootid;   /* bootable?  0=no, 128=yes  */
  unsigned char beghead;  /* beginning head number */
  unsigned char begsect;  /* beginning sector number */
  unsigned char begcyl;   /* 10 bit nmbr, with high 2 bits put in begsect */	
  unsigned char systid;   /* Operating System type indicator code */
  unsigned char endhead;  /* ending head number */
  unsigned char endsect;  /* ending sector number */
  unsigned char endcyl;   /* also a 10 bit nmbr, with same high 2 bit trick */
  int relsect;            /* first sector relative to start of disk */
  int numsect;            /* number of sectors in partition */
};


typedef struct master_boot_record {
  char    bootinst[446];   /* space to hold actual boot code */
  fdisk_partition partitions[4];
  ushort  signature;       /* set to 0xAA55 to indicate PC MBR format */
};

LittleEndian();

FSeek(0);
master_boot_record MBR;

La syntaxe ressemble fort à du C, ça fait donc un langage en moins à apprendre ;-). Une fois ce template exécuté sur un disque dur, vous pourrez consulter sur une interface très simple mais très efficace les valeurs en clair, et également les modifier ! (Mais je vous déconseille de faire ça sur un disque dur). Dans le même genre d’idée, il est également possible d’exécuter des scripts sur ces fameux fichiers, afin d’automatiser des tâches, et bien entendu, il sait très bien ouvrir des fichiers de taille virtuellement infinie, en un rien de temps.

Je m’en suis personnellement servi pour analyser le fichier de données d’un vieux logiciel qui s’appelle Comment Ça Marche (The Way Things Works en anglais), dont j’avais déjà analysé le format des animations. Pour le fichier de données, j’avais commencé avec Delphi à automatiser le processus d’analyse que fait 010 Editor mais bien sûr c’était bien plus fastidieux. Grâce à ce logiciel, j’ai gagné un temps fou, et c’est ça qui compte.

Essayez-le au pire ça ne vous coûte rien, mais je vous garanti que si tout ce que je viens de vous expliquer vous parle, alors vous ne serez pas déçu (il ne m’a fallu même pas une heure pour me décider à l’acheter, et aujourd’hui j’en fais un billet de blog).

Amis du reverse engineering, bonsoir.

3 réflexions au sujet de “L’un gêne, il rit, un verre sait.”

Les commentaires sont fermés.