Tutorial de comandos de cadenas de Linux para principiantes (5 ejemplos)
Mirar dentro de un archivo binario/ejecutable para obtener cadenas legibles por humanos no es el tipo de trabajo que hace todo el mundo, pero ¿qué pasa si te piden que lo hagas? Abrir el archivo en un editor y buscar manualmente las cosas no es una solución elegante. Entonces, ¿qué hacer? Sí, lo has adivinado bien: existe una utilidad de línea de comandos que hace esto por ti.
La herramienta en cuestión se llama Strings, y en este tutorial, hablaremos de los fundamentos de este comando utilizando algunos ejemplos fáciles de entender. Pero antes de hacerlo, vale la pena mencionar que todos los ejemplos de este artículo han sido probados en una máquina Ubuntu 16.04 LTS.
Comando Linux Strings
El comando Strings básicamente imprime las cadenas de caracteres imprimibles en los archivos. A continuación se muestra su sintaxis:
strings [OPTIONS] FILENAME
Y así es como lo describe la página man de la herramienta:
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.
A continuación se presentan algunos ejemplos al estilo de las preguntas y respuestas que deberían darte una buena idea de cómo funciona el comando Strings.
Q1. ¿Cómo se utiliza el comando Cadenas?
El uso básico es bastante sencillo: basta con pasar el nombre del archivo como entrada y ejecutar el comando.
Ten en cuenta que, como Strings se utiliza principalmente para extraer información de archivos binarios/ejecutables, utilizaremos un archivo de este tipo en todos nuestros ejemplos.
Por ejemplo:
strings test
Esta es la salida que produjo este comando en mi sistema:
Q2. ¿Cómo forzar un límite de caracteres personalizado?
Como se ha explicado al principio, el comportamiento por defecto de la herramienta Cadenas es imprimir sólo las secuencias de caracteres que tengan al menos 4 caracteres. Sin embargo, si quieres, puedes cambiar este límite utilizando la opción de línea de comandos -n (que requiere que pases un número que signifique el nuevo límite).
Por ejemplo, si quieres establecer el límite en 2, puedes hacerlo de la siguiente manera
strings -n 2 test
Así, ahora también podrás ver cadenas de dos y tres caracteres en la salida.
Q3. ¿Cómo hacer que las cadenas impriman el desplazamiento de las secuencias de caracteres?
Si quieres que Strings muestre también los desplazamientos de las secuencias de caracteres que muestra en la salida, puedes hacerlo utilizando la opción de línea de comandos -t, que requiere que proporciones una entrada de un solo carácter que especifique el radix del desplazamiento: «o» para octal, «x» para hexadecimal o «d» para decimal.
Por ejemplo:
strings -t d test
Y aquí está la salida que produjo en mi sistema:
Así que puedes ver que las cadenas de la salida van ahora precedidas de sus respectivos desplazamientos.
Q4. ¿Cómo hacer que Strings escanee todo el archivo?
Dependiendo de cómo se haya configurado Strings, puede o no escanear todo el archivo de entrada. Sin embargo, si quieres estar absolutamente seguro de que la herramienta lee el archivo completo (y no sólo las secciones de datos cargables e inicializadas), utiliza la opción de línea de comandos -a.
Por ejemplo:
strings -a test
Por el contrario, si quieres que Strings sólo muestre las cadenas de las secciones de datos inicializadas y cargadas del archivo, utiliza la opción de línea de comandos -d.
strings -d test
Q5. ¿Cómo cambiar el separador?
Como habrás observado, por defecto, el separador que utiliza Strings es una nueva línea. Sin embargo, si quieres, puedes tener un separador personalizado utilizando la opción de línea de comandos -s.
Por ejemplo:
strings -s [[[]]] test
Conclusión
El comando Strings es una herramienta extremadamente útil si te dedicas a indagar en los binarios/ejecutables en busca de información útil. Hemos hablado aquí de algunas opciones importantes de la línea de comandos. Así que practícalas, y una vez que hayas terminado, dirígete a lapágina man de la herramientapara obtener más información.