web-dev-qa-db-fra.com

Comment décoder un flux PDF?

Je souhaite analyser un objet de flux dans un fichier PDF codé à l'aide de /FlateDecode.

Existe-t-il des outils permettant de décoder un tel encodage (ASCII85decode, LZWDecode, RunlenghtDecode etc.) utilisé dans les PDF?

Le contenu du flux est très probablement une structure de fichier PE, que le PDF utilisera probablement plus tard dans l'exploit.

De plus, il y a deux tableaux xref dans le PDF, c'est bien mais aussi deux %% EOF qui suivent le xref.

Est-ce que la présence de ces derniers va bien? (Remarque: le deuxième xref pointe vers le 1er xref à l'aide du /prev Nom.

ce xref fait référence au deuxième xref:

 xréf 
 5 6 
 0000000618 00000 n 
 0000000658 00000 n 
 0000000701 00000 n 
 0000000798 00000 n 
 0000045112 00000 n 
 0000045219 00000 n 
 1 1 
 0000045753 00000 n 
 3 1 
 0000045838 00000 n 
 Remorque 
 .]> 
 startxref 
 46090 
 %% EOF 

le deuxième xref:

 Xréf 
 0 5 
 0000000000 65535 f 
 0000000010 00000 n 
 0000000067 00000 n 
 0000000136 00000 n 
 0000000373 00000 n 
 Remorque 
> 
 Startxref 
 429 
 %% EOF 
23
rebel87
  1. "Deux tables xref et deux %%EOF "?

    Ce n'est pas à lui seul une indication d'un fichier PDF PDF malveillant. Il peut y avoir deux ou plusieurs instances de chacun, si le fichier a été généré via la "mise à jour incrémentielle"] (Chaque fichier signé numériquement PDF est comme ça, et chaque fichier qui a été modifié dans Acrobat et enregistré en utilisant le bouton/menu 'Enregistrer' au lieu de 'Enregistrer sous ...' bouton/menu est comme ça aussi.)

  2. "Comment décoder un flux PDF flux PDF à partir d'un objet spécifique"?

    Jetez un œil à Didier Stevens ' Python pdf-parser.py. Avec cet outil de ligne de commande, vous pouvez vider le flux décodé de tout objet PDF dans un fichier. Exemple de commande pour vider le flux de PDF objet numéro 13:

    pdf-parser.py -o 13 -f -d obj13.dump my.pdf
    
15
Kurt Pfeifle

[~ # ~] a [~ # ~] %%EOF le commentaire doit être présent à la fin du fichier, tout autre commentaire (toute ligne commençant par %) peut être présent à tout moment dans le fichier. Alors oui, 2 %%EOF les commentaires sont parfaitement valides. Ceci est documenté dans le Référence PDF . Consultez l'exemple 3.11 du 1.7 PDF Manuel de référence à la page 112 pour un exemple documenté dans la spécification qui a la structure que vous décrivez. Il s'agit d'un fichier PDF PDF a été mis à jour progressivement.

Notez que les versions plus récentes de PDF peuvent avoir des flux de références croisées, qui sont eux-mêmes compressés.

Le moyen le plus simple de décoder un fichier PDF est d'utiliser un outil destiné à le faire, par exemple MuPDF peut le faire avec "mutool clean -d <input pdf file> <output PDF file> "décompressera (-d) tous les flux compressés dans un fichier PDF et écrire la sortie dans un nouveau fichier PDF.

Sinon, vous devrez utiliser quelque chose comme zlib pour la décompression Flate et LZW, vous devrez écrire votre propre décompression RunLength ainsi que ASCIIHex85 je pense. Sans parler de JBIG, JPEG et JPEG2000 si vous voulez aussi que les images soient décodées.

11
KenS

En ce qui concerne les outils, comme indiqué dans d'autres réponses, il existe un certain nombre d'outils qui peuvent être utilisés pour décompresser les flux (sur la ligne de commande ou autrement). Cependant, il existe également un certain nombre d'outils qui facilitent l'inspection d'un fichier PDF en vous permettant de parcourir l'arborescence d'objets et de voir facilement ce qui se trouve à l'intérieur des flux compressés. Les deux que j'ai utilisés sont :

1) callas pdfToolbox Desktop (attention, je suis associé à cette société). pdfToolbox a une option "Explore PDF" qui vous permet de voir les objets associés à une page, jusqu'à et y compris les opérateurs de page réels.

2) Navigateur Enfocus. Cet outil vous permettra d'ouvrir la racine de l'arborescence d'objets d'un fichier PDF, puis de présenter la hiérarchie des objets d'une manière très similaire à celle du Finder sur Mac avec les systèmes de fichiers. Le navigateur vous permet d'éditer PDF (vous devez vraiment savoir ce que vous faites dans ce cas) en éditant les objets de bas niveau, créer de nouveaux objets ou changer le contenu des flux. Vraiment cool.

On m'a fait remarquer que le navigateur Enfocus n'est plus disponible comme je l'ai dit dans la version précédente de ma réponse, mais en fait c'est le cas. Il vous suffit de créer un compte Enfocus pour le télécharger à partir d'ici: https://www.enfocus.com/en/support/downloads/old-product-installers

4
David van Driessche

Vous pouvez utiliser RUPS pour analyser le PDF et exporter ou simplement regarder le flux déjà décodé. À propos du %% EOF vous pouvez avoir autant que le nombre d'ajouts apportés au PDF.

4
Paulo Soares