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 archivo | Bytes (Hex) | ASCII |
---|---|---|
EXE | 4D 5A | MZ |
ZIP/DOCX/XLSX | 50 4B 03 04 | PK |
25 50 44 46 | ||
PNG | 89 50 4E 47 | .PNG |
RTF | 7B 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-8:
e5 ada6 41 43 4d 45
- UTF-16:
5b66 0041 0043 004d 0045
- UTF-32:
00005b66 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
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