Reverse de formats
Cette page est destinée aux recherches sur le reverse de fichiers et aux essais en cours.
Tailles de fichiers
PGCD et taille de fichier
L'idée, c'est d'observer les tailles de fichiers pour retrouver des caractéristiques de certaines archives, telles que la taille du header, et l'éventuelle utilisations de "conteneurs"/chunks de taille fixe.
Pour cela, on prend l'ensemble des tailles en octets de chaque fichier du format étudié. On réalise le PGCD sur ces tailles et si le PGCD est conséquent, c'est qu'on a potentiellement un header et des chunks de la taille du PGCD.
PGCD et taille de header variable
Dans le cas on on aurait un fichier avec une taille différente de la taille des chunks, on peut tester les PGCD en soustrayant la taille d'un header que l'on augmente.
La structure du fichier recherché serait la suivante :
|---- HEADER ----|------------ CHUNK 1 ------------|------------ CHUNK 2 ------------|------------ CHUNK N ------------|
On utilisera alors un seuil au dessus duquel nous afficherons la taille du header et la taille du PGCD.
Recherche de propriétés et clair connu
Bruteforce d'un offset fixe
Dans le cas où on peut rassembler un ensemble de caractéristiques que l'on peut clairement attribuer à un groupe de fichiers, il est alors envisageable de bruteforcer pour retrouver l'endroit dans le fichier où ces propriétés sont stockées.
La première étape est de rechercher un ensemble de données pour les réunir dans un csv. Ces données devront être associées à un nom de fichier. On pourra par exemple scraper ces données sur des sites de fans par exemple.
La seconde étape, c'est de programmer la recherche de nombreux encodages cohérents pour chaque propriétés du csv recherchée. On recherchera tous ces encodages dans l'ensemble des fichier de la position 0 à la fin du plus petit des fichiers du lot. On vérifiera alors si la propriété apparait à la position donnée, et si elle n'est pas présente, on passera alors à la position suivante.
Ensembles et masque
Ici aussi, on dispose d'un dataset avec des propriétés en lien avec les fichiers étudiés. Il s'agit de regrouper les propriétés par valeurs et d'étudier les changements dans les fichiers associés pour identifier la position potentielle d'une propriété.
Pour les fichiers :
- A = Ensemble(fichiers AVEC valeur "a" de la propriété)
- B = Ensemble(fichiers SANS valeur "a" de la propriété)
- D = Fichier # de la taille du fichier remplis de 0x00
Pour tous les A si l'octet à l'offset étudié est identique, on met l'octet dans D à sa valeur, 00 sinon # on ne retient pas les octets à 00 - on en trouve dans le padding donc ce n'est pas significatif ... Pour tous les B s'il existe un B identique à l'octet correspondant dans D alors on met l'octet dans D à 0x00
Tester avec le même D pour tous les A (toutes les valeurs que prend la propriété dans le dataset)
Outils à tester
tester l'entropie avec binwalk (1. dans doku)
Doku
https://en.wikibooks.org/wiki/Reverse_Engineering/File_Formats