Regarder à l'intérieur d'un fichier binaire/exécutable pour saisir des chaînes lisibles par l'homme n'est pas le genre de travail que tout le monde fait, mais que se passe-t-il si on vous demande de le faire ? Ouvrir le fichier dans un éditeur et rechercher manuellement des éléments n'est pas une solution élégante. Alors que faire? Oui, vous avez bien deviné - il existe un utilitaire de ligne de commande qui le fait pour vous.
L'outil en question s'appelle Strings , et dans ce didacticiel, nous aborderons les bases de cette commande à l'aide d'exemples faciles à comprendre. Mais avant cela, il convient de mentionner que tous les exemples de cet article ont été testés sur la machine Ubuntu 16.04 LTS.
Commande Linux Strings
La commande Strings imprime essentiellement les chaînes de caractères imprimables dans les fichiers. Voici sa syntaxe :
strings [OPTIONS] FILENAME
Et voici comment la page de manuel de l'outil le décrit :
For each file given, GNU strings prints the printable character
sequences that are at least 4 characters long (or the number given with
the options below) and are followed by an unprintable character.
Depending upon how the strings program was configured it will default
to either displaying all the printable sequences that it can find in
each file, or only those sequences that are in loadable, initialized
data sections. If the file type in unrecognizable, or if strings is
reading from stdin then it will always display all of the printable
sequences that it can find.
For backwards compatibility any file that occurs after a command line
option of just - will also be scanned in full, regardless of the
presence of any -d option.
strings is mainly useful for determining the contents of non-text
files.
Voici quelques exemples de style Q&A qui devraient vous donner une bonne idée du fonctionnement de la commande Strings.
Q1. Comment utiliser la commande strings ?
L'utilisation de base est assez simple - il suffit de passer le nom du fichier en entrée et d'exécuter la commande.
Veuillez noter que puisque Strings est principalement utilisé pour extraire des informations à partir de fichiers binaires/exécutables, nous utiliserons un tel fichier dans tous nos exemples.
Par exemple :
strings test
Voici le résultat produit par cette commande sur mon système :
Q2. Comment forcer une limite de caractères personnalisée ?
Comme expliqué au début, le comportement par défaut de l'outil Chaînes consiste à n'imprimer que des séquences de caractères d'au moins 4 caractères. Cependant, si vous le souhaitez, vous pouvez modifier cette limite à l'aide de l'option de ligne de commande -n (qui vous oblige à transmettre un nombre indiquant la nouvelle limite).
Par exemple, si vous souhaitez définir la limite sur 2, procédez comme suit :
strings -n 2 test
Désormais, vous pouvez également voir deux et trois chaînes de caractères dans la sortie.
Q3. Comment faire en sorte que les chaînes impriment le décalage des séquences de caractères ?
Si vous souhaitez que Strings affiche également les décalages des séquences de caractères qu'il affiche dans la sortie, cela peut être fait à l'aide de l'option de ligne de commande -t, qui vous oblige à fournir une seule entrée de caractère qui spécifie la base du décalage - 'o' pour octal, 'x' pour hexadécimal ou 'd' pour décimal.
Par exemple :
strings -t d test
Et voici la sortie qu'il a produite sur mon système :
Ainsi, vous pouvez voir que les chaînes en sortie sont désormais précédées de leurs décalages respectifs.
Q4. Comment faire en sorte que Strings analyse tout le fichier ?
Selon la façon dont Strings a été configuré, il peut analyser ou non l'intégralité du fichier d'entrée. Cependant, si vous voulez être absolument sûr que l'outil lit le fichier complet (et pas seulement les sections de données chargeables et initialisées), utilisez l'option de ligne de commande -a.
Par exemple :
strings -a test
Inversement, si vous souhaitez que Strings n'affiche que les chaînes des sections de données initialisées et chargées dans le fichier, utilisez l'option de ligne de commande -d.
strings -d test
Q5. Comment changer le séparateur ?
Comme vous l'avez observé, par défaut, le séparateur utilisé par Strings est une nouvelle ligne. Cependant, si vous le souhaitez, vous pouvez avoir un séparateur personnalisé à l'aide de l'option de ligne de commande -s.
Par exemple :
strings -s [[[]]] test
Conclusion
La commande Strings est un outil extrêmement utile si vous souhaitez rechercher des fichiers binaires/exécutables pour obtenir des informations utiles. Nous avons discuté ici de quelques options de ligne de commande importantes. Alors entraînez-vous, et une fois que vous avez terminé, rendez-vous sur la page de manuel de l'outil pour plus d'informations.