Introducción
En el mundo de la administración de sistemas y el análisis de malware, a menudo nos encontramos con archivos binarios que no legimos directamente. El comando strings de Linux nos permite extraer secuencias de caracteres legibles que están embebidos dentro de esos binarios, revelando información útil como mensajes de error, rutas de acceso, versiones de bibliotecas y más.
¿Qué es strings?
El comando strings forma parte del paquete binutils y está disponible en casi todas las distribuciones de Linux. Su función principal es escanear un archivo de entrada, buscar secuencias de caracteres imprimibles (generalmente ASCII) de una longitud mínima y mostrarlas en la salida estándar. Esto lo convierte en una herramienta rápida para obtener pistas sobre el contenido de ejecutables, bibliotecas compartidas, objetos de kernel o incluso archivos de firmware.
Sintaxis básica
La forma más simple de usar strings es:
strings archivo.bin
Esto imprimirá todas las cadenas que el programa encuentre, una por línea. Sin embargo, el comportamiento por defecto puede generar mucha salida, por lo que es habitual combinarlo con opciones que afinan la búsqueda.
Opciones más útiles
-no--bytes=: establece la longitud mínima de las cadenas a considerar. Por defecto es 4; aumentarlo a 6 o 8 reduce el ruido.-ao--all: escanea todo el archivo, no solo las secciones inicializadas (útil para binarios con datos en secciones .rodata).-t: muestra el offset de cada cadena en el formato especificado (d = decimal, o = octal, x = hexadecimal).-e: ajusta la codificación de caracteres (s = simple 7‑bit ASCII, S = 7‑bit big‑endian, l = 32‑bit little‑endian, L = 32‑bit big‑endian). Útil para binarios que contienen texto Unicode.-f: precede cada cadena con el nombre del archivo de entrada (útil cuando se procesan varios archivos).
Ejemplos prácticos
Supongamos que queremos examinar un binario llamado /usr/bin/miprograma y nos interesan solo las cadenas de al menos 6 caracteres:
strings -n 6 /usr/bin/miprograma
Para ver además la posición hexadecimal de cada hallazgo:
strings -t x -n 6 /usr/bin/miprograma
Si el binario podría contener texto UTF‑16 little‑endian, usamos:
strings -e l -n 6 /usr/bin/miprograma
En el contexto del análisis de malware, a menudo se combina con grep para buscar indicadores específicos:
strings -n 8 sospechoso.exe | grep -i 'http://'
Esto extrae todas las cadenas largas y filtra aquellas que parecen URLs.
Limitaciones y consideraciones
Aunque strings es poderoso, tiene algunas limitaciones:
- Solo encuentra secuencias de bytes que coincidan con los criterios de imprimibilidad; cualquier texto cifrado o comprimido pasará desapercibido.
- En binarios muy grandes, la salida puede ser abrumadora; filtrar con
grepo redirigir a un archivo ayuda. - El comando no interpreta la estructura del archivo; por lo tanto, algunas cadenas pueden aparecer fuera de contexto (por ejemplo, dentro de datos de imágenes embebido).
- En sistemas con locales distintos a C, el comportamiento de qué se considera imprimible puede variar; es recomendable ejecutar
LC_ALL=C strings ...para obtener resultados consistentes.
Conclusión
El comando strings es una herramienta esencial en el arsenal de cualquier administrador de sistemas, desarrollador o analista de seguridad. Su simplicidad y rapidez permiten obtener información valiosa de archivos binarios sin necesidad de herramientas de desensamblaje complejas. Conocer sus opciones y saber combinarlas con otros utilities como grep, sort o uniq maximiza su utilidad en tareas de depuración, forensic y reversado de malware.


