Visualización y modificación de archivos binarios mediante los comandos hexedit y xxd de Linux

Los sistemas Linux admiten muchos editores de archivos, como vi, vim, neovim, ne, GNU Emacs, etc. Pero también puedes instalar un editor que te permite ver el contenido de archivos binarios y hacer cambios en ellos - hexedit.

Con hexedit, puedes editar imágenes, ejecutables y otros archivos binarios, aunque debes saber mucho sobre el formato del archivo que estás editando para poder hacer cambios efectivos que no rompan el formato del archivo. Después de todo, estarás editando un byte cada vez. Esto no significa que no pueda utilizar este comando para ver o editar archivos de texto. Hay poca o ninguna razón para hacerlo.

Utilizar la edición hexadecimal

A pesar del comentario anterior sobre los archivos de texto, el siguiente ejemplo utiliza hexedit para ver/modificar un archivo de texto, pero sólo para ilustrar cómo el comando muestra el contenido del archivo y para sugerir una forma fácil de acostumbrarse al funcionamiento de hexedit.Pasarela Edge Computing

$ hexedit miarchivo.txt

00000000 54 68 69 73 20 69 73 20 61 20 74 65 78 74 20 66 Se trata de un texto f

00000010 69 6C 65 20 74 68 61 74 20 49 20 63 72 65 61 74 ile que creo

00000020 65 64 20 75 73 69 6E 67 20 76 69 20 6F 6E 20 6D ed mediante vi on m

00000030 79 20 4C 69 6E 75 78 20 73 79 73 74 65 6D 2E 0A y Sistema Linux..

00000040 49 74 20 63 6F 6E 74 61 69 6E 73 20 6F 6E 6C 79 Sólo contiene

00000050 20 61 20 66 65 77 20 6C 69 6E 65 73 20 6F 66 20 unas líneas de

00000060 74 65 78 74 2E 0A 54 68 65 20 45 6E 64 21 0A texto...¡The End!.

La pantalla de arriba muestra que una nueva línea ("0A" en la salida hexadecimal) aparece como un punto en el texto de la derecha. Cada segmento adicional de 2 bytes mostrado entre el número de línea (hexadecimal) de la izquierda y el texto de la derecha representa un carácter. Por ejemplo, las cuatro cadenas de doble byte (54 68 69 73) a la izquierda de la primera línea de texto corresponden a la palabra "Esto" que se muestra a la derecha. Si desea cambiar esta palabra por "Eso", puede pulsar la tecla de flecha derecha hasta llegar a 9 y escribir "1", y luego pulsar de nuevo la derecha hasta llegar a 3 y escribir "4". El texto que aparece a la derecha se ajustará en consecuencia.

Puede utilizar ^s para buscar bytes específicos. Se le pedirá que introduzca lo que desea buscar. Si desea guardar los cambios, salga con ^x y responda con "y". Mantenga pulsada la tecla de flecha abajo para desplazarse por la fila de datos.

Moverse dentro de un archivo binario funcionará de la misma manera, pero tienes que entender qué partes del archivo puedes cambiar sin romper el formato del archivo.

Los archivos ejecutables suelen empezar así:

00000000 7F 45 4C 46 02 01 01 00 00 00 00 00 00 00 00 00 00 .ELF............

00000010 03 00 3E 00 01 00 00 00 10 6B 00 00 00 00 00 00 ..>......k......

00000020 40 00 00 00 00 00 00 00 40 22 02 00 00 00 00 00 @…..@”……

00000030 00 00 00 00 40 00 38 00 0D 00 40 00 1F 00 1E 00 ....@.8...@.....

00000040 06 00 00 00 04 00 00 00 40 00 00 00 00 00 00 00 ……..@…….

00000050 40 00 00 00 00 00 00 00 40 00 00 00 00 00 00 00 @…..@…..

00000060 D8 02 00 00 00 00 00 00 D8 02 00 00 00 00 00 00 00 ............

00000070 08 00 00 00 00 00 00 00 03 00 00 00 04 00 00 00 …………

El ELF en la línea superior a la derecha de . identifica este archivo como un archivo ELF. ELF es el estándar universal para archivos ejecutables, pero el contenido no será texto legible; será código compilado. Si cambiaras algo en este archivo, hay muchas posibilidades de que ya no se ejecute correctamente y podría causar un fallo de segmentación.

El comando hexedit se utiliza a veces en investigaciones de ciberdelincuencia porque no se oculta nada al espectador, por lo que puede ayudar a encontrar malware incrustado, etc. Sin embargo, ayuda saber qué estás buscando y dónde puedes encontrar estos datos. Siempre es una buena idea hacer una copia de seguridad de cualquier archivo que planees editar para que puedas restaurarlo fácilmente si surge la necesidad.

La página man del comando hexedit describe cómo moverse dentro de los archivos, salir sin/sin guardar los cambios, realizar búsquedas y otras operaciones. Una vez que sabes qué cambios son válidos, es muy fácil moverse por el archivo y hacer cambios.

Utilizar xxd

El comando xxd le permite crear un volcado hexadecimal a partir de un fichero. En otras palabras, se obtiene básicamente la misma salida que con hexedit, pero xxd sólo muestra la salida. No proporciona ninguna manera de editar el contenido del archivo. En el siguiente ejemplo, usamos xxd para mostrar el contenido hexadecimal en la parte superior de un archivo jpg junto con las traducciones hexadecimales a caracteres disponibles. Puede notar que la imagen en cuestión parece haber sido creada usando Photoshop.

$xxd micro.jpg | cabeza

00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0048......JFIF.....H

00000010: 0048 0000 ffe1 004c 4578 6966 0000 4d4d .H....LExif..MM

00000020: 002a 0000 0008 0001 8769 0004 0000 0001 .*.......i......

00000030: 0000 001a 0000 0000 0003 a001 0003 0000 ............

00000040: 0001 0001 0000 a002 0004 0000 0001 0000 ............

00000050: 002a a003 0004 0000 0001 0000 0036 0000 .*.......6..

00000060: 0000 ffed 0038 5068 6f74 6f73 686f 7020 .....8Photoshop

00000070: 332e 3000 3842 494d 0404 0000 0000 0000 3.0.8BIM.....

00000080: 3842 494d 0425 0000 0000 0010 d41d 8cd9 8BIM.%.....

00000090: 8f00 b204 e980 0998 ecf8 427e ffc0 0011 .....B~....

También puede redirigir la salida del comando xxd a un archivo para su posterior análisis.

$xxd micro.jpg > micro.txt

$ headmicro.txt

00000000: ffd8 ffe0 0010 4a46 4946 0001 0100 0048......JFIF.....H

00000010: 0048 0000 ffe1 004c 4578 6966 0000 4d4d .H....LExif..MM

00000020: 002a 0000 0008 0001 8769 0004 0000 0001 .*.......i......

00000030: 0000 001a 0000 0000 0003 a001 0003 0000 ............

00000040: 0001 0001 0000 a002 0004 0000 0001 0000 ............

00000050: 002a a003 0004 0000 0001 0000 0036 0000 .*.......6..

00000060: 0000 ffed 0038 5068 6f74 6f73 686f 7020 .....8Photoshop

00000070: 332e 3000 3842 494d 0404 0000 0000 0000 3.0.8BIM.....

00000080: 3842 494d 0425 0000 0000 0010 d41d 8cd9 8BIM.%.....

00000090: 8f00 b204 e980 0998 ecf8 427e ffc0 0011 .....B~....

Tenga en cuenta que hexedit utiliza letras mayúsculas en sus caracteres hexadecimales, mientras que xxd utiliza letras minúsculas y muestra el valor en trozos de cuatro bytes en lugar de trozos de dos bytes.

Resuma

El comando hexedit se puede utilizar para mostrar el contenido de archivos binarios (imágenes, ejecutables, etc.) y el comando xxd se puede utilizar para mostrar y guardar el contenido de estos archivos para su posterior análisis en el formato mostrado anteriormente.

X

Por favor, activa JavaScript en tu navegador para completar este formulario.
Introduzca los detalles del producto, como la configuración de la interfaz, el entorno, etc., y otros requisitos específicos para recibir un presupuesto preciso.

es_ESSpanish
Por favor, activa JavaScript en tu navegador para completar este formulario.
Introduzca los detalles del producto, como la configuración de la interfaz, el entorno, etc., y otros requisitos específicos para recibir un presupuesto preciso.