Saltar al contenido

Usando grep para buscar cadenas hexadecimales en un archivo

Solución:

Esto parece funcionar para mí:

LANG=C grep --only-matching --byte-offset --binary --text --perl-regexp "<x-hex pattern>" <file>

forma corta:

LANG=C grep -obUaP "<x-hex pattern>" <file>

Ejemplo:

LANG=C grep -obUaP "x01x02" /bin/grep

Salida (cygwin binary):

153: <x01x02>
33210: <x01x02>
53453: <x01x02>

Por lo tanto, puede volver a hacer grep para extraer compensaciones. Pero no olvide volver a utilizar el modo binario.

Nota: LANG=C es necesario para evitar problemas de codificación utf8.

También hay una herramienta bastante útil llamada binwalk, escrita en Python, que proporciona la coincidencia de patrones binarios (y mucho más además). Así es como buscaría una cadena binaria, que genera el desplazamiento en decimal y hexadecimal (de los documentos):

$ binwalk -R "x00x01x02x03x04" firmware.bin
DECIMAL     HEX         DESCRIPTION
--------------------------------------------------------------------------
377654      0x5C336     Raw string signature

Probamos varias cosas antes de llegar a una solución aceptable:

xxd -u /usr/bin/xxd | grep 'DF'
00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003  @.........S.....


root# grep -ibH "df" /usr/bin/xxd
Binary file /usr/bin/xxd matches
xxd -u /usr/bin/xxd | grep -H 'DF'
(standard input):00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003  @.........S.....

Luego descubrió que podíamos obtener resultados utilizables con

xxd -u /usr/bin/xxd > /tmp/xxd.hex ; grep -H 'DF' /tmp/xxd

Tenga en cuenta que el uso de un objetivo de búsqueda simple como ‘DF’ coincidirá incorrectamente con los caracteres que se extienden a través de los límites de bytes, es decir

xxd -u /usr/bin/xxd | grep 'DF'
00017b0: 4010 8D05 0DFF FF0A 0300 53E3 0610 A003  @.........S.....
--------------------^^

Entonces usamos una expresión regular ORed para buscar ‘DF’ O ‘DF’ (el searchTarget precedido o seguido por un carácter de espacio).

El resultado final parece ser

xxd -u -ps -c 10000000000 DumpFile > DumpFile.hex
egrep ' DF|DF ' Dumpfile.hex

0001020: 0089 0424 8D95 D8F5 FFFF 89F0 E8DF F6FF  ...$............
-----------------------------------------^^
0001220: 0C24 E871 0B00 0083 F8FF 89C3 0F84 DF03  .$.q............
--------------------------------------------^^
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *