Modificar valores Hex en múltiples archivos

Iniciado por Misomeister, 27 Mayo 2017, 01:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Misomeister

Hola amigos, tiene años que no he escrito nada por acá, os solicito su ayuda con el siguiente caso:

Tengo una colección de libros en pdf que contienen unas marcas de agua que consisten en ciertas líneas de texto que contienen el copyright, marca de la empresa donde fueron descargados, usuario y la hora en que fueron descargados. Al hacer cambios en el acrobat pro, desaparecen esas "marcas de agua" sin embargo cuando se revisa el código a nivel hexadecimal el texto ahí permanece. Por otro lado, al descomprimir el pdf, cambiarle la extensión a .txt reescribir el texto (aunque sea el mismo numero de carecteres), corrompe el pdf.

Experimentando un poco, noté que simplemente al reescribir la cadena hexadecimal con espacios (hex=20) de las marcas de agua es suficiente para que desaparezca del documento sin ningún rastro de lo que había escrito y sin corromper el pdf. Pero tengo las siguientes dudas:

Dado que tengo que repetir el proceso con +20.000 documentos y como es tedioso a mano,

¿Existe la manera de hacer un script ya sea bash, powershell o algun programa que reemplace una o unas cadenas en formato hexadecimal?

¿Sería posible que dado un valor inicial de caracteres se reemplace ese texto + 10 caracteres más para adelante (para borrar las marcas de agua que son variables como fecha/hora de descarga)?

Os comento que en los ficheros en cuestión, las marcas de agua se encuentran en direcciones diferentes (depende del pdf). Os adjunto este ejemplo de muestra de como se ven las marcas de agua y donde podrían ubicarse.

Los direcciones de los offsets de este pdf se encuentran (revisenlo con cualquier editor hex):


https://mega.nz/#!b0lQCZqa!BRa3GPTA8yX9t_0f_Ln1rNH8SdXFCo4t92lV4DRNTQI



1270
1460
1650
19F0
0F10


Ayuda chicos por favor!
Saludos



xor.pt

Hola.

Un pequeño programa en delphi ejemplo puedes hacer lo que deseas.
Jugar todos .PDF en una carpeta y primer paso del programa es jugar el nombre de todos los documentos en un ListBox, luego abrir uno por uno, abrir, editar en los offsets y guardar.

animanegra

#2
¿¿por que no utilizas sed??


hexdump back2.jpg | head
0000000 d8ff e0ff 1000 464a 4649 0100 0001 0100
0000010 0100 0000 feff 3b00 5243 4145 4f54 3a52



cat back2.jpg | sed s/"\xff\xd8"/"\x00\x00"/ | hexdump | head
0000000 0000 e0ff 1000 464a 4649 0100 0001 0100
0000010 0100 0000 feff 3b00 5243 4145 4f54 3a52


Fijate que los caracteres en hexadecimal tienes que invertilros. Aqui estoy cambiando el d8ff por los valores 0000.

Si eso lo metes en un bucle bash que recorra tus archivos, ya lo tienes. Eso si, cuidado con las colisiones. :)

42
No contesto mensajes por privado, si tienes alguna pregunta, consulta o petición plantéala en el foro para que se aproveche toda la comunidad.