Metadatos: el algodón no engaña

A raíz de todo el revuelo que hay estos días en torno a los metadatos, he estado revisando las distintas herramientas de borrado de metadatos para ficheros PDF que existen. En principio, las herramientas que analicé funcionan en sistemas GNU/Linux, aunque eso no implica que algunas no puedan funcionar en otros sistemas.

Partí de un PDF que generé yo mismo, y que tal y como se puede ver en la siguiente imagen contiene metadatos:

Metadatos

La primera herramienta que probé fue exiftool:

$ exiftool -all= limpio.pdf

Como se puede observar, a priori no hay ningún tipo de metadato:

Metadatos

No obstante, en la web de exiftool se puede leer: “Note: Changes to PDF files are reversible because the original metadata is never actually deleted from these files. See the PDF Tags documentation for details.”, que en la lengua de Cervantes viene a decir que aunque se ocultan, los metadatos siguen ahí.

Interesante. La pregunta por tanto es, ¿cómo puedo recuperar los datos? Aquellos que me conocen, seguro que ya saben la respuesta: con Python. Utilizando la librería pyPdf, hice la siguiente batería de pruebas:

#!/usr/bin/env python2 
from pyPdf import PdfFileReader 
 
fnames = ['sucio.pdf', 'exiftool.pdf'] 
 
for fname in fnames: 
    pdf = PdfFileReader(open(fname, 'rb')) 
    print fname 
    print pdf.getDocumentInfo() 
    print 

Si lo ejecutamos, vemos la siguiente información:

sucio.pdf 
{'/CreationDate': u"D:20131114101846+01'00'", '/ModDate': u"D:20131114101846+01'00'", 
'/Producer': u'blablabla', '/Creator': u'blablabla', '/Author': u'blablabla'} 
 
exiftool.pdf 
{'/CreationDate': u"D:20131114101846+01'00'", '/ModDate': u"D:20131114101846+01'00'", 
'/Producer': u'blablabla', '/Creator': u'blablabla', '/Author': u'blablabla'}

Entonces, ¿qué alternativas nos quedan? Podríamos mirar más programas, o bien podríamos hacernos uno nosotros. Como también habrán adivinado los que me conocen, he hecho las dos.

En primer lugar, he implementado un mini-programa (en Python, por supuesto) que elimina los metadatos de los ficheros PDF.

#!/usr/bin/env python2 
 
from pyPdf import PdfFileReader, PdfFileWriter 
from pyPdf.generic import NameObject, createStringObject 
import argparse 
 
parser = argparse.ArgumentParser() 
parser.add_argument("input") 
parser.add_argument("output") 
args = parser.parse_args() 
 
fin = file(args.input, 'rb') 
pdfIn = PdfFileReader(fin) 
pdfOut = PdfFileWriter() 
 
for page in range(pdfIn.getNumPages()): 
    pdfOut.addPage(pdfIn.getPage(page)) 
 
info = pdfOut._info.getObject() 
del info[NameObject('/Producer')] 
 
fout = open(args.output, 'wb') 
pdfOut.write(fout) 
fin.close() 
fout.close()

Su uso es muy sencillo:

./limpia.py sucio.pdf limpio.pdf

Su ejecución nos generará un archivo PDF llamado “limpio.pdf”, creado a partir del fichero “sucio.pdf”, sin metadatos:

$ ./test.py
limpio.pdf 
{}

Por otra parte, también podríamos utilizar MAT, que soporta PDF y más tipos de ficheros:

$ mat sucio.pdf  
[+] Cleaning sucio.pdf 
sucio.pdf cleaned ! 
$ ./test.py  
sucio.pdf 
{}

Y recordad: hay que comer verduras y limpiar los metadatos. Nos vemos en la próxima.

Comments

  1. Interesante artículo Joel. A ver si me puedes decir algún sistema que funcione con Windows

    Saludos.

  2. Hay una herramienta, que está en continuo desarrollo, española y que es multiplataforma https://bitbucket.org/grampusteam/grampus

    A ver que os parece, es opensource, desarrollada en Python.

    Un saludo.

  3. Muchas gracias :)
    Le echaré un ojo. Saludos