Header содержит информацию о версии %PDF-1.3.% — в нашем случае, это также можно увидеть во время анализа http потока в дампе через Wireshark (как и остальные элементы документа).
Body документа содержит objects (streams), картинки и другие элементы.
Cross-reference table позволяет взаимодействовать с каждым из объектов, которые содержатся
в теле.
Trailer определяет как приложения будут читать документ, т.к. чтение документа начинается с конца (именно отсюда), где приложение находит
Cross-reference table и обращается к объектам по ссылкам из таблицы.
Нам ничего не мешает добавлять наши новые
body, Cross-reference table, Trailer в конец существующего документа, неизменным останется лишь
Header.Итак, после разбора архитектуры погрузимся в
Body, здесь хранятся потоки объектов — последовательность байтов, которая может иметь неограниченный размер. Все объекты имеют идентификатор, по которому можно ссылаться, к примеру в нашем кейсе присутствует ссылка на объект «/JS 5 0 R», R — от reference. Кроме того, в pdf документе присутствует возможность работать
с содержимым потока использовав схемы фильтрации (/Filter), например /Filter [/FlateDecode ] — говорит о том, что данные были закодированы с использованием сжатия zlib/deflate….
Подробнее о структуре PDF можно почитать
здесь.
Теперь, когда мы представляем себе структуру pdf файлов, давайте продолжим решение наших задач. Для ответа на 5 вопрос задания
(How many object(s) are contained inside the PDF file?) воспользуемся pdfid и посмотрим на количество содержащихся объектов в pdf файле. (обратите внимание, что количество obj != endobj – документ деформирован (malformed)).