Toggle menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

File formats reverse engineering: Difference between revisions

Line 35: Line 35:
Pour tous les B s'il existe un B identique à l'octet correspondant dans D alors on met l'octet dans D à 0x00
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)
Tester avec le même D pour toutes les valeurs qui permettent de créer un ensemble A et un ensemble B.


== Outils à tester ==
== Outils à tester ==

Revision as of 19:05, 24 November 2021

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 toutes les valeurs qui permettent de créer un ensemble A et un ensemble B.

Outils à tester

https://hexinator.com/

tester l'entropie avec binwalk (1. dans doku)

Doku

1. https://archive.fosdem.org/2021/schedule/event/reverse_engineering/attachments/slides/4518/export/events/attachments/reverse_engineering/slides/4518/Reverse_Engineering_of_binary_File_Formats.pdf

https://en.wikibooks.org/wiki/Reverse_Engineering/File_Formats