viernes, 17 de octubre de 2025

Cómo Identificar un Archivo Sin Extensión


Contenido e Identificación de Archivos 

1. ¿Qué es un archivo?

Un archivo es simplemente una secuencia de bytes. Su nombre o extensión (como .pdf.exe.jpg) no garantiza su contenido real.

Por ejemplo, un archivo llamado documento.pdf podría no ser un PDF válido si sus bytes no cumplen con la estructura esperada.

Para inspeccionar los bytes de un archivo en Linux, se puede usar el comando hexdump -C, que muestra el offset, los bytes en hexadecimal y su equivalente en ASCII.

Ejemplo: un archivo PDF comienza con %PDF, lo que ayuda a identificarlo visualmente.


2. ¿Cómo identificar un archivo desconocido?

Cuando se descarga un archivo sin extensión (ej. http://mystery.com/x), es necesario determinar su tipo real.

Métodos recomendados:

  • Comando file: analiza los primeros bytes y busca firmas conocidas.
  • hexdump: inspección manual de los bytes.
  • strings: busca texto legible dentro del archivo.
  • Análisis dinámico en sandbox (máquina virtual).


3. Uso del comando file

Este comando compara los bytes del archivo con una base de datos de firmas conocidas.

Ejemplo con 6 archivos sin extensión:

  • A y F: ejecutables Windows (PE32)
  • B: ejecutable Linux (ELF)
  • C y D: imágenes PNG y SVG
  • E: archivo PDF

Incluso si el archivo no tiene extensión, file puede identificarlo si está bien formado.



4. Magic Bytes

Los magic bytes son secuencias específicas al inicio de un archivo que indican su tipo.

Tipo de archivoBytes (Hex)ASCII
EXE4D 5AMZ
ZIP/DOCX/XLSX50 4B 03 04PK
PDF25 50 44 46%PDF
PNG89 50 4E 47.PNG
RTF7B 5C 72 74{\rtf

Curiosidad: los archivos .docx.xlsx.pptx son en realidad archivos ZIP con contenido XML.

5. Codificación y Unicode

Los caracteres se representan mediante code points en Unicode. Ejemplo: la letra “A” es U+0041.

Ejemplo de codificación del texto “学ACME”:

  • UTF-8e5 ada6 41 43 4d 45
  • UTF-165b66 0041 0043 004d 0045
  • UTF-3200005b66 00000041 00000043 0000004d 00000045

6. ¿Qué son los strings?

Los strings son secuencias de caracteres imprimibles dentro de un archivo.

Ejemplo: “ACME” = 41 43 4D 45 en ASCII.

El comando strings extrae texto útil como URLs, nombres de DLL, etc.

Ejemplo: strings -n 10 test_dump.pcap





7. Strings con diferentes codificaciones

No todos los strings están en ASCII. Algunos usan UTF-16 o UTF-32.

Opciones del comando strings:

  • -e s: ASCII
  • -e l: UTF-16 LE
  • -e b: UTF-16 BE
  • -e L: UTF-32 LE
  • -e B: UTF-32 BE
A veces es necesario probar con cada una de las opciones para encontrar la codificación adecuada.

8. Strings en análisis dinámico

En análisis dinámico (sandbox), se pueden extraer strings de la memoria del programa en ejecución.

Esto permite ver strings ocultos en malware “empaquetado” o cifrado.

Ejemplo: Hybrid Analysis muestra strings que no aparecen en análisis estático.

9. Resumen

  • Los archivos son solo bytes; la extensión no define su tipo.
  • Los archivos binarios se identifican por magic bytes.
  • El comando file ayuda si el archivo está bien delimitado.
  • Los strings revelan pistas importantes.
  • Es esencial considerar múltiples codificaciones.

No hay comentarios:

Publicar un comentario

Cómo Identificar un Archivo Sin Extensión

Contenido e Identificación de Archivos  1. ¿Qué es un archivo? Un archivo es simplemente una  secuencia de bytes . Su nombre o extensión (co...