Как декодировать поток PDF?

Я хочу проанализировать объект потока в PDF-файле, который кодируется с помощью /FlateDecode.

есть ли какие-либо инструменты, которые позволяют декодировать такую кодировку (ASCII85decode, LZWDecode, RunlenghtDecode и т. д.) используется в PDF-файлах?

содержимое потока, скорее всего, является файловой структурой PE, которую PDF, вероятно, будет использовать позже в эксплойте.

кроме того, есть два xref таблицы в PDF, это нормально, но и два %%EOF, которые следуют за xref.

при наличии этих хорошо? (Примечание: второй xref указывает на 1-й xref С помощью /prev имя.

этой xref относится ко второй xref:

xref 
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
trailer
>
startxref
46090
%%EOF

второй xref:

xref
0 5
0000000000 65535 f
0000000010 00000 n
0000000067 00000 n
0000000136 00000 n
0000000373 00000 n
trailer
>
startxref
429
%%EOF

4 ответов


  1. "два xref таблицы и два %%EOF"?

    это само по себе не является признаком вредоносного PDF-файла. Там может быть два или даже больше экземпляров каждого, если файл был сгенерирован через "дополнительные обновления" характеристика. (Каждый файл PDF с цифровой подписью похож на этот, и каждый файл, который был изменен в Acrobat и сохранен с помощью 'Save' кнопка/меню вместо Сохранить как...'/ - это и это тоже.)

  2. "как декодировать сжатый поток PDF из определенного объекта"?

    посмотреть Дидье Стивенс' Python скрипт pdf-parser.py. С помощью этого инструмента командной строки, вы можете вывести декодированный поток любого объекта PDF в файл. Пример команды для сброса потока PDF объекта номер 13:

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

A %%EOF комментарий должен быть в конце файла, любые другие комментарии (любая строка, начинающаяся %) может присутствовать в любой точке файла. Так что да, 2 %%EOF комментарии вполне допустимо. Это задокументировано в PDF Reference. Проверьте пример 3.11 в справочном руководстве 1.7 PDF на стр. 112 для документированного примера в спецификации, которая имеет структуру, которую вы описываете. Это файл PDF, который был постепенно усовершенствованный.

обратите внимание, что более поздние версии PDF могут иметь перекрестные потоки ссылок, которые сами сжимаются.

самый простой способ декодировать PDF-файл-использовать инструмент, предназначенный для этого, например, MuPDF может сделать это с помощью"mutool clean -d <input pdf file> <output PDF file>" будет распаковать (-d) все сжатые потоки в PDF-файле и записать выходные данные в новый PDF-файл.

в противном случае вам нужно будет использовать что-то вроде zlib для декомпрессии Flate и LZW, вам нужно будет напишите свою собственную декомпрессию RunLength, а также ASCIIHex85, я думаю. Не говоря уже о JBIG, JPEG и JPEG2000, если вы хотите декодировать изображения.


можно использовать RUPS для анализа PDF и экспорта или просто посмотреть на поток уже декодирован. О %%EOF вы можете иметь столько, сколько количество добавлений, сделанных в PDF.


Что касается инструментов, как указано в других ответах, существует ряд инструментов, которые можно использовать для распаковки потоков (в командной строке или иным образом). Однако существует также ряд инструментов, которые позволяют легко проверять PDF-файл, позволяя вам ходить по дереву объектов и легко видеть, что внутри сжатых потоков. Два, которые я использовал:

1) Callas pdfToolbox Desktop (внимание, я связан с этой компанией). pdfToolbox имеет опцию "исследовать PDF", которая позволяет вы увидите объекты, связанные со страницей, вплоть до фактических операторов страницы и включая их.

2) Браузер Enfocus. Я не уверен, что это все еще нужно найти, но этот инструмент позволит вам открыть корень дерева объектов PDF-файла, а затем представить иерархию объектов так, как это делает Finder на Mac с файловыми системами. Браузер даже позволит вам редактировать PDF-файлы (вы должны действительно знать, что вы делаете в этом случае), редактируя низкоуровневые объекты, создание новых объектов или изменение содержимого потоков. Действительно холодный.

Update: оказывается, браузер все еще доступен, вы можете скачать его здесь:http://www.enfocus.com/en/products/browser/