Comment comparer des fichiers binaires sous Linux

0
128
fatmawati achmad zaenuri/Shutterstock.com

Comment pouvez-vous vérifier si deux binaires Linux sont identiques ? S'il s'agit de fichiers exécutables, toute différence peut signifier un comportement indésirable ou malveillant. Voici le moyen le plus simple de vérifier s'ils diffèrent.

Comparaison de fichiers binaires

Linux est riche en moyens de comparer et d'analyser des fichiers texte. La commande diff comparera deux fichiers pour vous et mettra en évidence les différences. Il peut même fournir quelques lignes de chaque côté des modifications pour fournir un contexte autour des lignes modifiées. Et la commande colordiff ajoute de la couleur pour rendre l'analyse visuelle des différences encore plus facile.

Les développeurs et les auteurs utilisent diff pour mettre en évidence les différences entre les différentes versions des fichiers de code source du programme ou des brouillons de textes. C'est rapide et facile, et vous n'avez pas besoin de compétences techniques pour voir les différences entre les chaînes de texte.

Dans le monde des fichiers binaires, les choses ne sont pas si Facile. Les fichiers binaires ne sont pas composés de texte brut. Ils sont constitués de nombreux octets contenant des valeurs numériques. S'il s'agit d'un fichier compressé tel qu'une archive TAR ou un fichier ZIP, ces valeurs représentent les fichiers compressés stockés dans le fichier d'archive, ainsi que les tables de symboles nécessaires à la décompression et à l'extraction des fichiers.

RELATEDComment comparer deux fichiers texte dans le terminal Linux

Si le fichier binaire est un fichier exécutable, les valeurs numériques des octets du fichier sont interprétées comme des éléments tels que des instructions de code machine pour le processeur, des métadonnées, des étiquettes ou des données codées. Les modifications apportées à un fichier binaire ou à un fichier de bibliothèque sont susceptibles d'entraîner des différences de comportement lorsque le binaire s'exécute ou est utilisé par une autre application.

Il est facile d'usurper la date et l'heure de création ou de modification d'un fichier. Cela signifie qu'il peut y avoir deux versions d'un fichier qui ont le même nom, la même taille de fichier – si les modifications remplacent le contenu existant octet par octet – et les horodatages. Et pourtant, l'un des fichiers a peut-être été altéré.

Secure Hash Algorithms

Un algorithme de hachage sécurisé est un algorithme basé sur les mathématiques. Il crée une valeur 64 bits en analysant tous les octets d'un fichier et en leur appliquant une transformation mathématique pour générer la valeur de hachage. Chaque jour, le même fichier produira toujours le même hachage. Même une différence d'un octet se traduira par un hachage radicalement différent.

Vous verrez souvent le hachage d'un fichier affiché sur sa page de téléchargement. Vous devez générer un hachage pour le fichier une fois que vous l'avez téléchargé. S'il est différent du hachage affiché sur la page Web, vous savez que le fichier est compromis. Soit il a été falsifié et remplacé par le fichier authentique – pour que les gens téléchargent le fichier corrompu – soit il a été corrompu pendant le transport.

Sur notre ordinateur de test, nous avons deux copies de le même fichier, une bibliothèque partagée. Les fichiers ont été renommés afin qu'ils puissent se trouver dans le même répertoire. En théorie, ces fichiers devraient être les mêmes. Après tout, ils sont censés être la même version de la bibliothèque partagée.

ls -l *.so

Les fichiers ont la même taille, les mêmes horodatages et les mêmes horodatages. Pour l'observateur occasionnel, ils sembleront être les mêmes. Utilisons la commande sha256sum et générons un hachage pour chaque fichier.

sha256sum binary_file1.so sha256sum binary_file2.so

Les hachages sont complètement différents, ce qui indique clairement qu'il existe des différences entre les deux fichiers. Si le site Web affiche le hachage du fichier authentique, vous pouvez supprimer le fichier qui ne correspond pas.

Rechercher les différences

Si vous souhaitez examiner les changements, il existe également des moyens de le faire. Vous n'avez pas besoin d'être capable de décompiler le fichier, ni de comprendre l'assembleur ou le code machine juste pour voir les modifications. Comprendre ce que signifient ces changements et quel est leur objectif, bien sûr, nécessiterait des connaissances techniques plus approfondies. Mais le simple fait de savoir à quel point les modifications sont importantes peut indiquer ce qui est arrivé au fichier.

Si nous utilisons diff sur les deux fichiers binaires, nous obtiendrons une réponse qui est un peu décevant.

diff binary_file1.so binary_file2.so

Nous savions déjà que les fichiers étaient différents. Essayons cmp .

cmp fichier_binaire1.so fichier_binaire2.so

Cela nous en dit un tout petit peu plus. Le premier octet qui diffère entre les deux fichiers est l'octet numéro 13451. Autrement dit, compté depuis le début du fichier binaire, l'octet 13451 est différent dans les deux fichiers binaires. Donc 13451 est le décalage de la première différence, depuis le début du fichier.

Par chance, dans tout le fichier, il y aura des octets contenant la valeur hexadécimale de 0x10. C'est la valeur que Linux utilise dans les fichiers texte comme caractère de fin de ligne. La commande cmp a rencontré 131 octets avec cette valeur entre le début du fichier binaire et l'emplacement de la première différence. Il pense donc qu'il se trouve à la ligne 132. Cela ne veut vraiment rien dire dans ce contexte.

Si nous ajoutons l'option -l (verbeux), nous commencerons à obtenir des informations utiles.

cmp -l fichier_binaire1.so fichier_binaire2.so

Tous les octets différents sont répertoriés. Le nombre d'octets ou le décalage, la valeur du premier fichier et la valeur du deuxième fichier sont affichés, avec un octet par ligne de sortie.

Les valeurs d'octets sont affichées en octal, au lieu du format hexadécimal habituel utilisé avec les fichiers binaires. Néanmoins, nous avons appris autre chose. Tous les octets modifiés sont dans une séquence continue. Leurs décalages sont incrémentés de un pour chaque octet.

L'outil hexdump videra un fichier binaire dans la fenêtre du terminal. Si nous utilisons l'option -C (canonique), la sortie listera sur chaque ligne le décalage, les valeurs de 16 octets à ce décalage, et & #8212;s'il y en a un & #8212;la représentation ASCII des valeurs d'octet.

hexdump -C binary_file1.so

Nous pouvons utiliser la sortie de hexdump comme entrée pour diff, laissant diff fonctionne comme s'il lisait deux fichiers texte.

diff <(hexdump binary_file1.so) <(hexdump binary_file2.so)

diff trouve les lignes qui sont différentes et affiche les valeurs d'octets hexadécimaux du premier fichier au-dessus des valeurs du deuxième fichier. Le décalage de la première ligne est 0x3480, ou 13440 en décimal. Plus tôt, cmp nous a dit que le premier changement s'est produit à l'octet 13451, qui est 0x348B. Cela correspond en fait à ce que nous voyons ici.

La sortie de diff est en blocs de deux octets. La première paire d'octets sont les octets 0 et 1 du décalage de 0x3480, le deuxième bloc contient les octets 2 et 3 du décalage. Le bloc 6 contiendra les octets 0xA et 0xB, ou 10 et 11 en décimal. Ce sont les octets 13450 et 13451. Et on voit que ce sont les premiers octets qui diffèrent. Les cinq premières paires d'octets sont les mêmes dans les deux fichiers.

Cependant, comme diff compte à partir de la base zéro, ce que cmp appelle 13451 sera l'octet 13540 pour diff. Et pour rendre les choses encore plus confuses, l'ordre des octets dans chaque bloc de deux octets est inversé par diff. Les octets sont en fait répertoriés dans cet ordre : 1 et 0, 3 et 2, 5 et 4, 7 et 6, etc.

La commande est également coûteuse en temps de calcul – deux vidages hexadécimaux et un diff en même temps – surtout si les fichiers comparés sont volumineux.

Mais si hexdump -C peut envoyer une version ASCII du fichier binaire à la fenêtre du terminal, pourquoi ne pas rediriger la sortie vers des fichiers texte, puis comparer ces deux fichiers texte avec diff ?

hexdump -C binary_file1.so > vidage hexadécimal binaire1.txt -C fichier_binaire2.so > binary2.txt diff binary1.txt binary2.txt

La différence entre les deux fichiers est affichée dans deux courts extraits. Il y a une représentation ASCII à côté d'eux. Il y aura une paire d'extraits pour chaque différence entre les fichiers. Dans cet exemple, il n'y a qu'une seule différence.

C'est très bien, mais ne serait-ce pas formidable s'il y avait quelque chose qui faisait tout cela pour vous ?< /p>

VBinDiff

Le programme VBinDiff peut être installé à partir des dépôts habituels pour toutes les distributions majeures. Pour l'installer sur Ubuntu, utilisez cette commande :

sudo apt install vbindiff

Sur Fedora, vous devez taper :

sudo dnf install vbindiff

Les utilisateurs de Manjaro doivent utiliser pacman.

sudo pacman -Sy vbindiff

Pour utiliser le programme, transmettez le nom des deux fichiers binaires sur la ligne de commande.

vbindiff fichier_binaire1.so fichier_binaire2.so

L'application basée sur le terminal s'ouvre, affichant les deux fichiers dans une vue de défilement.

Vous pouvez utiliser la molette de la souris ou la “UpArrow”, "DownArrow", "Accueil", "Fin", "PageUp" et "PageDown" touches pour se déplacer dans les fichiers. Les deux fichiers défileront.

Appuyez sur “Entrée” touche pour passer à la première différence. La différence est mise en évidence dans les deux fichiers.

S'il y avait plus de différences, appuyez sur &#8220 ;Entrez” afficherait la différence suivante. En appuyant sur “q” ou “Esc” quittera le programme.

Quelle est la différence ?

Si vous travaillez sur un ordinateur qui appartient à quelqu'un d'autre et que vous n'êtes pas autorisé à installer des packages, vous pouvez utiliser cmp, diff et hexdump. Si vous avez besoin de capturer la sortie pour un traitement ultérieur, ce sont également les outils à utiliser.

Mais si vous êtes autorisé à installer des packages, VBinDiff rend votre flux de travail plus facile et plus rapide. Et en fait, utiliser VBinDiff avec un seul fichier binaire est un moyen simple et pratique de parcourir les fichiers binaires, ce qui est un avantage appréciable.

RELATED : Comment Aperçu des fichiers binaires à partir de la ligne de commande Linux

LIRE LA SUITE

  • › Examen du clavier mécanique Keychron Q8 : un clavier avancé pour toutes les utilisations
  • &rsaquo ; 10 fonctionnalités cachées d'Android 13 que vous auriez pu manquer
  • &rsaquo ; JBL Live Free 2 Review : excellente suppression du bruit, son correct
  • › 10 fonctionnalités iPad géniales que vous devriez utiliser
  • › Android 13 est sorti : nouveautés et date de disponibilité
  • &rsaquo ; Il est normal de lésiner sur ces 10 produits technologiques