04 enero 2013

Jugando con los PDF, contraseñas y marcas de agua

Es común que a los informáticos nos lleguen "peticiones" de todo tipo. Una de esas peticiones es, "Oye me he bajado/encontrado este PDF y tiene contraseña y una marca de agua. Es entonces cuando te vuelves un poco loco buscando software que existen por internet para quitarle la contraseña a los PDF y las marcas de agua.
Las marcas de agua es una técnica esteganográfica que sirve entre otras cosas para  insertar un grupo de bits con información sobre el autor o propietario intelectual.

Quitar contraseña del PDF

En el caso de los password, tenemos las contraseñas de aperturas de ficheros de lo que no trata este artículo, contraseñas de protección para modificar el contenido, poder copiar texto etc...
De los múltiples programas que te puedes encontrar por Internet, muchos acaban siendo de pago o no acaban de funcionar bien. Además en la búsqueda de ciertos programas algunos pueden llevar regalito.
Dándole vueltas temas pensé que no sería tan difícil el poder quitarle la contraseña sin tener la necesidad de usar un programa específico para ello.

Primero vamos a ver las propiedades del PDF:


En este caso solo está permitido el poder imprimir, pero no podremos en ningún caso modificar este PDF. Los permisos quedan claros en la imagen.
Una manera de curiosa de poder quitar todos los permisos al PDF es imprimir el documento en una impresora en concreto. Es en este caso cuando hablamos del formato XPS.
El formato XPS, XML parser specification, es un formato creado por Microsoft y que viene de serie incluído desde Windows Vista. En teoría era un formato para competir con el formato PDF, se trata de un formato que sea fácil de compartir y de leer.
Como explicaba a partir de Windows Vista, viene incorporada una impresora XPS para generar este tipo de documentos. Es por eso que ahora con el PDF protegido por contraseña lo imprimimos en esta impresora y generamos el documento XPS.

Ahora tendremos el fichero en formato XPS, igualito que lo tendríamos en PDF. Lo que haremos ahora es volver a generar el PDF, en este caso lo haremos de la manera mas sencilla posible y es usar una impresora virtual. Existen multitud de ellas, en este caso yo he usado la propia que viene incluída con Adobe.
Lo que haremos ahora es abrir el docuemento XPS y volver a imprimirlo pero esta vez seleccionando la impresora Adobe. Miramos los permisos y....



 Et voilà! Ya tenemos el documento PDF sin seguridad, para poder editarlo.

Marcas de agua

En el caso de la marca de agua ya es algo un poco mas complicado y es que tendremos que usar algún programa y luego un sencillo script para automatizar la tarea.
Lo primero que haremos es con Total Comander y su visor abrir el PDF


Si, no se entiende ni se puede ver nada, así que tendremos que limpiarlo un poquito para que podamos trabajar con él.
La manera más rápida es usar pdftk, lo bajamos de la web y hacemos:


Ejecutamos pdftk, como parámetro el pdf a limpiar, le indicamos el nombre del fichero del output y la opción uncompress.
Ahora abrimos el PDF con el visor de total comander de nuevo. El fichero se presentará mas limpio, y lo que haremos será buscar la imagen en RAW directamente en el fichero hasta que encontramos las imágenes.


En la última parte del visor es donde tenemos la imagen, en la parte de stream. Lo que tenemos que hacer ahora es eliminar el obj del PDF. De esta manera eliminaremos la imagen.
Si el documento tiene n páginas, está claro que no tenemos porque hacer esto de manera manual. 
Con un cutre script en python podemos solucionar esto, en este caso , yo además me he encontrado marcas de agua de diferente tamaño...

El script MUY mejorable podría ser:


Con esto obtendremos el PDF sin las marcas de agua.

Este artículo sirve para poder ver que con un poco de trabajo manual, no hace falta valerse de esos programas que te dicen que te quitan el candado del documento. Además se ha podido ver como quitar las marcas de agua con un script y mirando que tiene el documento.

Artículo cortesía de Marc Rivero López

10 comments :

Juan Carlos dijo...

Muy util, gracias, yo utilizaba http://pdfpirate.org/ pero siempre me quedo la duda de si me volvian limpios los pdf... un saludo

Marco Antonio Blanco dijo...

Okular, el visor de documentos de KDE, tiene una opción para ignorar el DRM de los ficheros PDF. ¡Muy útil!

kel dijo...

Gracias .. gran articulo

Jose dijo...

También desde línea de comandos, si se puede imprimir:

gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=unencrypted.pdf -c .setpdfwrite -f ficherosinpermisos.pdf

Mi pregunta es, sin usar pdftotext u otras herramientas ¿cómo puedes ver el texto en claro? me gustaría aprender un poco más de la sintaxis de PDF. Imagino que cuando un programa te deja copiar-pegar texto de un PDF no tendrá un módulo de OCR instalado y no acabo de ver el texto en claro en ningún PDF. He encontrado muchos programas para generar PDFs pero ninguno para modificarlos "al vuelo" con un editor tipo WYSIWYG y casi nada inteligible sobre su especificación.

jose dijo...

Y me contesto en parte, lo más simple que he encontrado es esto: http://webcheatsheet.com/php/reading_clean_text_from_pdf.php pero en un documento sigo sin encontrar "a mano" los bloques BT y ET, imagino que tendrán algún tipo de compresión. Lo dejo como sugerencia para un futuro artículo :)

Alex dijo...

Muy útil e interesante, gracias.

Adrià Caubet dijo...

Felicidades por el articulo ;) Me gustaría ver la otra cara de la moneda, como proteger ante plagio un PDF o otro tipo de documento... Agradecería mucho un articulo o una respuesta a este comentario :) Saludos.

Jesús May Sánchez dijo...

Métodos muy interesantes, pero creo que con Evince todo se soluciona :) creo, aun no he probado con contraseñas pero si con restricciones de copiar. Saludos

politesnico dijo...

¿Para quitar las marcas de agua no bastaría con abrir el pdf con un editor hexadecimal y cambiar el valor de la altura a 0? Acabo de probarlo y parece funcionar.

garaf dijo...

Acabo de intentarlo siguiendo las instrucciones y no funciona si tiene un password el documento (es lógico que lo tenga si tiene marcas de agua). El pdftk me devuelve el mensaje:
¨Error: Failed to open PDF file:
manuals3.pdf
OWNER PASSWORD REQUIRED, but not given (or incorrect)
Errors encountered. No output created.
Done. Input errors, so no output created.¨