Divulgation : Il y a quelques années, on m'a demandé s'il était possible de réparer un tel fichier et j'ai décidé d'enquêter. En conséquence, j'ai pu trouver comment je pouvais réparer le fichier et cela m'a finalement amené à écrire quelques outils (non gratuits) que je mentionnerai dans ce post. Chaque fois que possible, je pointerai vers des alternatives gratuites.
Avertissement : Avec les JPEG, beaucoup de mathématiques sont impliquées. Je ne suis pas un expert formé ou scolarisé en la matière et une grande partie de ce que j'explique, je l'ai découvert en bricolant et en trouvant ce qui fonctionne. Donc, ne vous attendez pas à ce que toutes ces informations soient scientifiquement exactes.
Cela dépend. Si nous voyons une image comme ça, 3 choses peuvent être incorrectes :
- Seule une partie du fichier est récupérée ou présente (si elle n'est pas récupérée par un outil quelconque). Pour déterminer si c'est le cas, comparez la taille du fichier avec des fichiers similaires, pris avec le même appareil photo et les mêmes réglages.
- Si la taille du fichier est bonne, une partie du fichier peut ne pas contenir de données correctes. Cela est plus facile à vérifier avec un éditeur hexadécimal (HxD par exemple, gratuit). Souvent, vous trouverez une grande partie du fichier remplie de zéros ou d'un motif de répétition de bytes (FF FF FF FF etc.).
- Si les problèmes précédents sont vérifiés, que la taille du fichier est bonne et qu'il y a des données d'entropie élevée dans tout le fichier, même une corruption mineure dans les données d'image encodées et compressées peut perturber un décodeur (celui qui est intégré dans votre visionneuse d'images).
Étant donné que le scénario 3 est le seul qui peut potentiellement être réparé, plongeons-y. Il existe des combinaisons spécifiques de bytes ayant une signification pour les décodeurs JPEG : FF xx est interprété par les décodeurs JPEG comme un marqueur JPEG (voir). Ces marqueurs servent à diviser un JPEG en 'sections' toutes ayant des finalités différentes. Si le décodeur rencontre une paire de bytes FF xx à l'intérieur des données d'image réelles qui n'est pas valide (pas FF Dn (où n = 0 à 7) et pas FF 00), la plupart des décodeurs s'arrêteront simplement de décoder. Cela peut résulter d'une simple 'inversion de bits' où FE devient FF. Puisque la partie des données d'image n'est pas décodée, cela se manifestera sous forme de bloc gris. Supprimer la paire de bytes en question n'est qu'une partie de la solution car nous ne connaissons pas les valeurs originales, mais j'ai pu réparer des images en utilisant simplement un éditeur hexadécimal et une visionneuse d'images. En utilisant JpegSnoop, il est facile de déterminer l'adresse des bytes problématiques. Cependant, en raison de la façon dont un JPEG est encodé/décodé, ce problème affecte l'ensemble des données d'image qui suit (pour simplifier, les données de luminance et de chrominance sont stockées en tant que delta, c'est-à-dire la différence par rapport au bloc précédent). Pour réparer les dommages, vous voudrez peut-être utiliser un éditeur spécial (dans cette vidéo YouTube, j'utilise le mien et un éditeur gratuit pour voir si et comment un JPEG partiellement gris peut être réparé). Très peu de fois, il se peut que le simple fait de remplacer les bytes problématiques par des zéros donne un résultat satisfaisant :
![réparer un JPEG en utilisant simplement un éditeur hexadécimal]()
Pour le scénario 2, il n'y a pas de solution. Le problème 1 peut être causé par une récupération incorrecte :
-
Outil de récupération conscient du système de fichiers : En termes simples, ces outils se basent sur la recherche de morceaux de données du système de fichiers pour localiser les données perdues. En supposant un système de fichiers basé sur FAT, car ils sont dominants sur les cartes mémoire utilisées dans les appareils photo numériques, l'outil localise une entrée de répertoire à partir de laquelle il peut décoder le nom de fichier, la taille du fichier, les attributs du fichier et le premier cluster. Il examine ensuite la table d'allocation du fichier pour obtenir le reste des clusters et reconstitue finalement le fichier. Si la chaîne FAT est corrompue / incomplète pour une raison quelconque, seule une partie du fichier peut être reconstituée. Ce type de corruption n'est pas rare dans les systèmes de fichiers basés sur FAT (FAT, FAT32 et dans une certaine mesure exFAT). La récupération est souvent encore possible en utilisant un soi-disant carver, mais ceux-ci apportent leur propre ensemble de problèmes.
-
L'autre catégorie d'outils de récupération de fichiers sont les dits 'carvers'. Plutôt que de se fier au système de fichiers, ils analysent le disque pour trouver des 'bytes magiques' qui peuvent indiquer la présence d'un certain type de fichier. En supposant un JPEG, on pourrait balayer le disque à la recherche de FF D8 FF aux limites de cluster ou de secteur, car les JPEG commencent toujours avec cette combinaison de bytes spécifique. Maintenant nous savons où commence le fichier.
Problèmes avec cette méthode : De nombreux outils sont assez simplistes et supposeront avoir atteint la fin du JPEG s'ils rencontrent FF D9 qui est le 'marqueur de fin d'image JPEG' ou s'ils rencontrent des bytes magiques qui pourraient indiquer le début du fichier suivant. Beaucoup de ces prétendus scanners recherchent plusieurs types de fichiers et par pure coïncidence peuvent rencontrer une combinaison de bytes qui correspond à un autre type de fichier. Par exemple, 49 44 33 est des données JPEG parfaitement valides mais correspondent également aux bytes magiques d'un fichier MP3. L'approche simpliste est alors de conclure que nous avons atteint la fin du fichier et de commencer à récupérer le fichier MP3. Le deuxième problème est la fragmentation des fichiers, où avant la fin du fichier est atteinte, une combinaison de bytes valide est trouvée pour le fichier JPEG suivant. Beaucoup de carvers vont fermer le JPEG qu'ils étaient en train de récupérer et commencer avec le suivant. Il n'y a pas de solutions faciles à cela, bien que des outils existent qui vous permettent soit de tenter manuellement de reconstituer de tels fichiers, soit même d'essayer de le faire eux-mêmes.
![réassemblage manuel d'un JPEG fragmenté]()