Análisis forenseEnumeración y escaneoProgramaciónRecolección de información

Python Scripting (II) – Metadatos EXIF y XMP en imágenes

Buenos días hackers!! Hacía tiempo que quería ampliar el script que os expliqué en la entrada anterior. Si recordáis, conseguimos programar un script en Python que nos permitía extraer y mostrar los metadatos contenidos en ficheros DOCX y PDF. Como prueba de concepto de extracción de información estuvo bastante bien! Sin embargo, es hora de ampliar el scope. 🙂

Hace un par de semanas me puse a ello y conseguí incorporar nuevas funcionalidades: extracción de metadatos EXIF y XMP en imágenes. De esta forma, ampliamos el número de formatos que la herramienta puede analizar. En concreto, ahora puede analizar metadatos en imágenes JPEG, PNG, GIF, BMP y TIFF.

Primero, un poquito de teoría. Leer no está de mas, hombre.

EXIF

EXIF (EXchangeable Image file Format) es una especificación que agrega metadatos a ciertos tipos de formatos de imagen. Normalmente, las imágenes JPEG y TIFF contienen este tipo de metadatos. Los tags que incluye EXIF están sobre todo relacionados con los datos de la cámara con la que la imagen fue capturada, copyright y otros como la geolocalización.

XMP

XMP (Extensible Metadata Platform) es otra especificación de metadatos, normalmente aplicada a ficheros tipo PDF, pero también a JPEG, GIF, PNG y otros. Incluye datos más genéricos como título, creador o descripción.

Hasta aquí el poquito de teoría. ¿Veis como no era tanto?

El nuevo script

Podéis descargar la versión actualizada en mi repositorio de GitHub. Los cambios podrían resumirse en esta lista:

  • Añadida una función print_jpg() que recoge y muestra los metadatos de un fichero JPG/JPEG, tanto XMP como EXIF.

    Obtención de metadatos en JPG
    Obtención de metadatos en JPG
  • Añadida una función print_png_gif_bmp() que recoge y muestra los metadatos de un fichero PNG, GIF o BMP, que contienen tags XMP.
Obtención de metadatos en PNG, GIF y BMP
Obtención de metadatos en PNG, GIF y BMP
  • Añadida una función print_tiff() que recoge y muestra los metadatos de un fichero TIFF, que contiene tanto XMP como EXIF.
Obtención de metadatos en TIFF
Obtención de metadatos en TIFF
  • Agregadas estas funciones a printMeta(), de forma que reconozca estos formatos.

Aparte de esto, he agregado un script de bash modules_install.sh que intenta instalar todas las dependencias necesarias. Aparte de las que ya había, ahora se utilizan los módulos pillow, exifread  y python-xmp-toolkit.

En el repositorio incluyo algunas imágenes de ejemplo para que podáis probar (algunas no tienen metadatos), pero no debería dar problema al agregar cualquier otra. La sintaxis de ejecución es la misma de siempre:

python metadatos.py (directorio)

Se puede ver cómo evoluciona un script de forma fácil agregando simplemente funciones que implementan nuevas características, aprovechando que el programa está bien estructurado. Si, por ejemplo, el código no estuviese dividido en funciones sino que fuese un «chorro» de spaguetti code, el implementar nuevas características sería más complejo, teniendo que localizar en cada momento dónde se inserta el nuevo código y cuidando de no interferir con lo hecho hasta ahora. Un infierno. Evitadlo. Dividid el código.

El repositorio está actualizado a día de hoy (escribiendo esto mismo he subido un par de hotfixes :P), así que probad con libertad lo que queráis y sin problema comentadme cualquier duda o feedback que se os ocurra.

Un saludo hackers, y espero que os guste!

–DISCLAIMER–

El script se encuentra en renovación constante (también llamado «cuando tengo tiempo lo actualizo»). El código podría variar con el tiempo. Sin embargo, la estructura debería ser básicamente la misma.

Si os encontráis en un futuro en esta entrada y los cambios son mayores, probablemente hay una entrada nueva explicando las ampliaciones y cambios. ¡Busca la más actual! 😉

2 comentarios en “Python Scripting (II) – Metadatos EXIF y XMP en imágenes

Los comentarios están cerrados.