Introduction: Quand la corruption de fichiers rencontre la criminalistique inversion de génie

La corruption de fichiers peut frapper aux moments les plus défavorables — à mi-chemin d'une archive critique de projets, à l'intérieur d'une sauvegarde de bases de données ou tout en transférant des photos irremplaçables. Les outils traditionnels de récupération analysent souvent les en-têtes et tentent de reconstruire en utilisant des modèles connus, mais ils échouent lorsque les dommages sont graves ou le format est obscur. L'ingénierie inverse offre un chemin complémentaire, parfois supérieur: au lieu de vous fier à la combinaison de motifs seule, vous dissèquez manuellement ou semi-automatiquement la structure binaire, identifiez les blocs de données survivants et les remontez en forme utilisable.

Ce que signifie l'ingénierie inverse dans le contexte de la récupération de données

L'ingénierie inverse, au cœur de celle-ci, est le processus d'extraction des connaissances d'un artefact en déconstruisant la façon dont il a été construit. Appliquée aux fichiers corrompus, vous traitez le blob binaire endommagé comme une scène de crime. Vous étudiez les en-têtes, les pied de pied, les structures de morceaux, les chocksums et les motifs de rembourrage jusqu'à ce que vous puissiez déduire d'où viennent chaque octet et comment il était censé être interprété.

Pourquoi les outils de récupération standard sont courts

La plupart des outils de récupération commerciale fonctionnent sur des signatures de fichiers connues : ils scannent (JPEG), , ou (WAV) et copient tout jusqu'à la signature connue suivante. Bien que cela fonctionne pour des fichiers intacts ou légèrement endommagés, il échoue avec:

  • Dossiers très fragmentés où les blocs logiques sont dispersés dans les médias et non contigus.
  • Conteneurs chiffrés ou comprimés qui n'ont pas de marqueurs de texte clair reconnaissables.
  • Parallèlement à une partie du fichier où seule une partie du fichier demeure, mais cette partie est significative.
  • Formats propriétaires ou obscurs qui ne sont pas dans la base de données de signature de l'outil de récupération.

Inverser l'ingénierie vous permet de contrôler en arrière : vous décidez de ce qui ressemble à des données valides basées sur votre propre analyse, et non sur une base de données préétablie.

Comprendre les structures de fichiers au niveau binaire

Avant de pouvoir récupérer des données, vous devez comprendre comment les données sont généralement organisées. Chaque format de fichier est défini par une spécification (ou, si non documenté, par l'ingénierie inverse une copie de travail).

En-têtes, pied de page et octets magiques

La plupart des fichiers commencent par un en-tête contenant un numéro --magique (par exemple, pour JPEG) et un pied de page (par exemple, ). Même après la corruption, ces structures survivent souvent parce qu'elles sont petites et placées à des décalages prévisibles.

Structures de tronçonnage et de VLT (valeur de longueur de type)

Des formats comme PNG, RIFF (AVI/WAV) et de nombreux moteurs de base de données stockent des données en morceaux. Chaque morceau a un identifiant de type, un champ de longueur et la charge utile. Lorsqu'un fichier est corrompu, vous pouvez parfois reconstruire un morceau en lisant le champ de longueur et en sautant en avant, même si le type est partiellement détruit.

Points d'intérêt et offsets internes

Les formats plus complexes (p. ex. PDF, ZIP, Documents Office) contiennent des renvois internes. Un PDF a une table de renvoi () qui liste l'octet offset de chaque objet. Si le xref est perdu mais que les objets restent, vous pouvez reconstruire la table en cherchant des marqueurs et .

Processus étape par étape : Inverser l'ingénierie d'un fichier corrompu

Le flux de travail suivant s'applique à la plupart des tentatives de récupération :

1. Acquérir une copie de travail (et ne jamais toucher l'original)

Toujours faire une image octet-pour-octet du fichier corrompu. Utilisez (Linux) ou des outils comme FTK Imager pour créer une copie en lecture seule. Travailler sur l'original risque de dommages irréversibles de l'écrasement, surtout si vous essayez de modifier en place avec un éditeur de hexagones.

2. Inspectez le binaire brut avec un éditeur de hexagones

Ouvrez la copie dans un éditeur de hexagones (par exemple, HxD, 010 Editor, ou hexadump dans un terminal).

  • Bytes magiques reconnaissables à 0.
  • Des motifs répétés ou des rodages de zéros (souvent rembourrage).
  • Les chaînes ASCII intégrées dans le binaire — noms de fichiers, horodatages ou métadonnées peuvent être lisibles par des humains.
  • Transitions brutales de l'ASCII lisible au bruit aléatoire (indique le début de la corruption).

3. Identifier les marqueurs et limites connus

Rechercher des signatures connues même si elles apparaissent à des décalages inattendus. Par exemple, les fichiers JPEG peuvent contenir plusieurs segments EXIF commençant par . Chaque segment a sa propre longueur. Si vous trouvez un segment valide, vous pouvez l'isoler et extraire la vignette ou l'aperçu JPEG intégré.

4. Reconstruire la structure logique

En utilisant votre compréhension du format, essayez de reconstruire la structure manuellement. Par exemple, un fichier ZIP a un répertoire central à la fin. Si le répertoire central est corrompu mais que les en-têtes de fichier local sont intacts, vous pouvez lire chaque en-tête local (qui contient le nom de fichier et la taille compressée) et récupérer le morceau de données stockées par le morceau.

5. Extraire les blocs de données de survie

Une fois que vous avez identifié des fragments intacts, les extraire dans des fichiers séparés. Des outils comme avec et paramètres sont idéaux. Pour des extractions plus complexes, vous pouvez écrire un script Python qui lit le fichier corrompu, analyse la structure que vous avez inventée, et écrit les parties valides.

6. Valider et remonter

Après extraction, testez les fragments récupérés. Pour les données d'image, ouvrez-les dans un visionneur d'images; pour les enregistrements de texte ou de base de données, vérifiez que le contenu a un sens. Si les fragments doivent être concaténés, faites-le soigneusement, en maintenant l'alignement aux limites du format. Des outils comme ou des menuisers personnalisés peuvent vous aider.

Outils essentiels pour la récupération de données d'ingénierie inverse

Les bons outils accélèrent considérablement le processus d'analyse et d'extraction. Voici les catégories les plus importantes:

Hex Editors et l'analyse binaire des données

  • HxD[ — Gratuit, rapide et prend en charge les fichiers volumineux. Permet la visualisation de plusieurs fichiers côte à côte, ce qui est utile pour comparer un fichier corrompu à un modèle connu-bon.
  • 010 Editeur — Prend en charge les modèles binaires (par exemple, JPEG.bt, ZIP.bt) qui analysent automatiquement la structure du fichier selon les règles de format. Vous pouvez écrire ou télécharger des modèles pour identifier les anomalies instantanément.
  • wxHexEditor — Open-source, gère des fichiers très importants (des centaines de GB), et prend en charge l'édition au niveau du disque.

Analyseurs et carters de format de fichier

  • PhotoRec — Excellent pour la sculpture à base de signature lorsque vous n'avez pas le temps d'inverser manuellement l'ingénieur. Il découpe plus de 480 types de fichiers en scannant les données brutes. Utilisez-le comme un premier passage, puis inverse-ingénieur ce qu'il manque.
  • Scalpel — Carveur de fichiers léger et rapide qui utilise des paires d'en-têtes/pieds définis dans un fichier de configuration. Vous pouvez l'étendre avec des signatures personnalisées découvertes lors de l'ingénierie inverse.
  • Binwalk — Initialement pour l'analyse du firmware, Binwalk peut scanner un blob pour les signatures de fichiers embarqués et les extraire. Utile lorsque la corruption intègre un fichier dans un autre.

Environnements de script personnalisés

Lorsque les outils hors-la-selle sont courts, vous devez écrire vos propres. Python avec les bibliothèques ou vous permet d'analyser les données binaires au niveau bit et octet. Par exemple, un script de récupération PDF pourrait :

  • Trouver tous les marqueurs ,
  • Lire jusqu'à ,
  • Vérifiez la syntaxe valide du dictionnaire,
  • Et n'écrivez que les objets bien formés.

De même, pour une base de données corrompue (p. ex. SQLite), vous pouvez analyser les en-têtes de page valides et reconstruire l'arborescence d'index à partir de cellules b-tree lisibles.

Techniques avancées : quand les dommages sont graves

La corruption n'est pas toujours simple. Voici des scénarios avancés et comment les aborder avec l'ingénierie inverse.

Fichiers chiffrés avec clés corrompues

Si un fichier est chiffré mais que la corruption n'affecte que les métadonnées clés (par exemple, l'en-tête de chiffrement dans un volume TrueCrypt), l'ingénierie inverse peut révéler une clé de sauvegarde ou un titre de créance cache dans le même fichier.

Systèmes de fichiers fragmentés

Lorsqu'un fichier est dispersé sur le disque (commun sur le stockage flash ou après suppression), l'ingénierie inverse implique l'analyse des images de disque, et non des fichiers individuels. Utilisez des outils comme en mode avancé, mais si cela échoue, examinez manuellement l'image de disque dans un éditeur de hexagone. Recherchez les structures du système de fichiers (entrées MFT sur NTFS, inodes sur Ext4) qui contiennent des pointeurs aux fragments. Combinez des fragments en localisant le prochain bloc logique à travers des listes de renvois croisés.

Récupération partielle et interleaving

Parfois, deux fichiers sont partiellement écrits dans le même espace disque (par exemple, après un crash pendant une opération de sauvegarde). Vous pouvez avoir interlevé les données : un en-tête JPEG suivi de cadres audio MP3. L'ingénierie inverse de chaque section par rapport à sa spécification de format vous permet de les séparer. La clé est d'identifier le début de chaque format , bloc valide et découpe à partir de là, ignorant les octets étrangers entre.

Meilleures pratiques pour réussir la récupération d'ingénierie inverse

  • Toujours travailler sur une copie médico-légale. Même une seule écriture accidentelle peut ruiner une récupération qui était complète à 95 %.
  • Documentez vos hypothèses et testez-les. Utilisez un carnet ou un fichier de balisage pour enregistrer les décalages, les signatures trouvées et les décisions prises. Cela vous aidera à revoir le cas quelques jours plus tard.
  • Comparer avec une bonne version connue du même format. Si possible, créer un petit fichier de test (par exemple, un JPEG avec un pixel noir, un ZIP basé sur un texte avec un seul fichier) et le corrompre intentionnellement pour voir comment la structure regarde le niveau binaire. Cela vous donne une base de référence.
  • Combinez des approches manuelles et automatisées. Automatisez les tâches répétitives avec des scripts, mais gardez l'humain dans la boucle pour la reconnaissance des motifs. Un script peut scanner toutes les signatures , mais vous décidez lesquelles sont de faux positifs.
  • Validez la récupération itérativement. Après avoir extrait un fragment, essayez de l'ouvrir dans l'application native. Si elle échoue partiellement, examinez le message d'erreur — il vous indique souvent exactement ce qui manque (par exemple, --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  • Respecter les contraintes de temps. L'ingénierie inverse est intellectuellement enrichissante mais peut être un évier de temps. Fixez une limite : si après quelques heures vous n'avez pas fait de progrès significatifs, retombez à un carver comme PhotoRec pour obtenir ce que vous pouvez, puis réévaluer si les données restantes méritent une attention manuelle.

Pièges courants et comment les éviter

  • Musin interprète le rembourrage comme des données. Certains formats (p. ex., PNG) sont des tampons avec zéros pour aligner les morceaux sur les limites de 4 octets.
  • Ignorer l'endianité. Les champs de longueur et les tableaux de contrôle sont stockés dans un grand end ou un petit endian selon le format.
  • Sur-relié sur des octets magiques. Un fichier corrompu peut avoir perdu ses octets magiques entièrement, mais le reste des données peut être encore intact. Si vous ne taillez que par octets magiques, vous manquez ces fichiers. Toujours rechercher des marqueurs internes aussi.
  • Tréer toute corruption comme aléatoire. Parfois, la corruption est déterministe – par exemple, un simple retournement de bits dans un flux PDF peut être inversé si vous connaissez le CRC attendu. Utilisez checksum/crc32 vérification lorsque disponible.
  • Recovering data but losing context Vous pourriez réussir à extraire une table SQLite d'une base de données corrompue, mais si les index sont partis, les données ne sont qu'un dump de table brute. Soyez prêt à investir du temps dans la reconstruction, pas seulement l'extraction.

Conclusion : L'art et la science de la résurrection binaire

L'ingénierie inverse pour la récupération de données est égale partie discipline technique et la résolution créative de problèmes. Il nécessite une bonne compréhension des formats de fichiers binaires, la patience, et la volonté de penser comme l'ingénieur qui a initialement écrit le logiciel qui a créé ce fichier. Bien que des outils comme PhotoRec et HxD gèrent la récupération de routine, les cas vraiment difficiles — fragmentés, chiffrés, ou fortement écrasés — exigent toujours l'ingéniosité humaine.

En maîtrisant l'approche d'ingénierie inverse décrite ici, vous vous transformez d'un utilisateur passif d'utilitaires de récupération en un chercheur actif qui peut récupérer des données qui autrement seraient effacées comme irrécupérables. Que vous sauviez une base de données perdue par un client, une vieille photo de famille ou un document d'entreprise critique, les compétences que vous développez vous serviront longtemps après toute tentative de récupération unique est terminée.