Introducción
Un volcado hexadecimal es una vista hexadecimal de datos. Es posible que desee utilizar hexadecimal al depurar un programa o realizar ingeniería inversa de un programa.
Por ejemplo, muchos formatos de archivo tienen caracteres hexadecimales específicos para indicar su tipo. Si está intentando leer un archivo utilizando un programa y por alguna razón no se carga correctamente, es posible que el archivo no esté en el formato que espera.
Si desea ver cómo funciona un programa y no tiene el código fuente o el software que realiza la ingeniería inversa del código, puede mirar el volcado hexadecimal para intentar averiguar qué está sucediendo.
¿Qué es el hexadecimal?
Las computadoras piensan en binario. Cada carácter, número y símbolo es referenciado por un binario o múltiples valores binarios.
Los seres humanos, sin embargo, tienden a pensar en decimales.
Miles | Cientos | Decenas | Unidades |
1 | 0 | 1 | 1 |
Como seres humanos, nuestros números más bajos se denominan unidades y representan los números del 0 al 9. Cuando llegamos a 10, restablecemos la columna de unidades a 0 y agregamos 1 a la columna de las decenas (10).
128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 1 |
En binario, el número más bajo solo representa 0 y 1. Cuando pasamos de 1, ponemos un 1 en la columna de los 2 y un 0 en la columna 1. Cuando quieres representar 4, pones un 1 en la columna 4 y restableces las columnas 2 y 1.
Por lo tanto, para representar 15 tendrías 1111 que representa 1 ocho, 1 cuatro, 1 dos y 1 uno. (8 + 4 + 2 + 1 = 15).
Si viéramos un archivo de datos en formato binario, sería absolutamente enorme y prácticamente imposible de entender.
El siguiente paso desde el binario es octal, que utiliza 8 como número base.
24 | 16 | 8 | 1 |
0 | 1 | 1 | 0 |
En un sistema octal, la primera columna va de 0 a 7, la segunda columna es de 8 a 15, la tercera columna de 16 a 23 y la cuarta columna de 24 a 31, y así sucesivamente. Aunque en general es más fácil de leer que el binario, la mayoría de las personas prefiere usar hexadecimal.
Hexadecimal usa 16 como el número base. Ahora aquí es donde se vuelve confuso porque los humanos pensamos que los números van del 0 al 9.
Entonces, ¿qué se usa para 10, 11, 12, 13, 14, 15? La respuesta es letras.
- 0 = 0
- 1 = 1
- 2 = 2
- 3 = 3
- 4 = 4
- 5 = 5
- 6 = 6
- 7 = 7
- 8 = 8
- 9 = 9
- 10 = A
- 11 = B
- 12 = C
- 13 = D
- 14 = E
- 15 = F
Por lo tanto, el valor 100 está representado por 64. Necesitará 6 de la columna 16s, lo que indica 96 y luego 4 en la columna de unidades que hacen 100.
Todos los caracteres de un archivo se denotarán con un valor hexadecimal. Lo que significan estos valores depende del formato del archivo en sí. El formato del archivo se denota mediante valores hexadecimales que generalmente se almacenan al principio del archivo.
Al conocer la secuencia de los valores hexadecimales que aparecen al principio de los archivos, puede determinar manualmente en qué formato está el archivo. Ver un archivo en un volcado hexadecimal puede ayudarlo a encontrar caracteres ocultos que no se muestran cuando el archivo está cargado en un editor de texto normal.
Cómo crear un volcado hexadecimal usando Linux
Para crear un volcado hexadecimal usando Linux use el comando hexdump.
Para mostrar un archivo como hex al terminal (salida estándar), ejecute el siguiente comando:
hexdump nombre de archivo
Por ejemplo
hexdump image.png
La salida predeterminada mostrará el número de línea (en formato hexadecimal) y luego 8 conjuntos de 4 valores hexadecimales por línea.
Por ejemplo:
00000000 5089 474e 0a0d 0a1a 0000 0d00 4849 5244
Puede suministrar diferentes interruptores para cambiar la salida predeterminada. Por ejemplo, la especificación del conmutador menos b producirá un desplazamiento de 8 dígitos seguido de 16 bytes de tres columnas, con cero rellenos, de entrada en formato octal.
hexdump -b image.png
Por lo tanto, el ejemplo anterior ahora se representará de la siguiente manera:
00000000 211 120 116 107 015 012 032 012 000 000 000 015 111 110 104 122
El formato anterior se conoce como visualización octal de un byte.
Otra forma de ver el archivo es en la pantalla de caracteres de un byte usando el interruptor menos c.
hexdump -c image.png
Esto nuevamente muestra el desplazamiento, pero esta vez seguido por dieciséis espacios separados, tres columnas, espacios llenos de datos de entrada por línea.
Otras opciones incluyen la visualización canónica hex + ascii que se puede mostrar con el interruptor menos C y la pantalla decimal de dos bytes que se puede mostrar con el interruptor menos d. El interruptor menos o se puede usar para mostrar la pantalla octal de dos bytes. Finalmente, el interruptor minux x se puede usar para mostrar la visualización hexadecimal de dos bytes.
hexdump -C image.png
hexdump -d image.png
hexdump -o imagen.png
hexdump -x image.png
Si ninguno de los formatos anteriores satisface sus necesidades, use el interruptor menos e para especificar el formato.
Si sabe que un archivo de datos es muy largo y solo desea ver los primeros caracteres para determinar su tipo, puede usar el interruptor -n para especificar qué cantidad de archivo se mostrará en hexadecimal.
hexdump -n100 image.png
El comando anterior muestra los primeros cien bytes.
Si desea omitir una parte del archivo, puede usar el interruptor de menos para establecer un desplazamiento desde donde comenzar.
hexdump -s10 image.png
Si no proporciona un nombre de archivo, el texto se lee de la entrada estándar.
Simplemente ingrese el siguiente comando:
hexdump
Luego ingrese el texto en la entrada estándar y finalice escribiendo quit. El hex se mostrará a la salida estándar.
Resumen
La utilidad hexdump es obviamente una herramienta bastante poderosa y definitivamente deberías leer la página del manual para entender completamente todas las características.
También necesitaría una buena comprensión de lo que está buscando al leer la salida.
Para ver la página del manual ejecute el siguiente comando:
hombre hexdump