добывание информации из pdf-файлов или взлом eBook'ов

       

Структура pdf-документа


Вопреки мутным слухам о том, что pdf-недокументированный формат, дизассемблировать неподъемно тяжелый Acrobat Reader для восстановления алгоритма шифрования совершенно необязательно, ведь pdf расшифровывается как portable document format– то есть формат переносимых документов и с самого начала он разрабатывался как открытый стандарт, чем и объясняется его популярность. Мы не привязаны к одному поставщику (Abode) и можем свободно писать свои собственные программные пакеты, открывающие pdf хоть на PC, хоть на Mac'е, хоть на рабочей станции типа SUN.

Все алгоритмы шифрования документированы и детально описаны в спецификации формата, которую можно бесплатно скачать с сайта Adobe (http://partners.adobe.com/public/developer/pdf/index_reference.html) или заглянуть в исходные тексты любого OpenSource pdf-viewr'а. Никаких проблем на этом этапе возникнуть не должно.

Если говорить кратко, то pdf-файл представляет собой довольно сложное инженерное сооружение следующего вида: <PDF file> ::= <header> <body> <cross-reference table> <trailer>.

Заголовок (header) описывает различную служебную информацию и нам свершено не интересен, а вот тело файла (body) не мешает рассмотреть поподробнее. Оно состоит из последовательности объектов (object), идентифицируемых двумя числами — номером объекта (object number) и номером поколения (generation number). Внутренне объекты состоят из потока данных (stream data) и словаря потока (stream dictionary). Словарь описывает атрибуты данных, объясняя вьюверу что это вообще такое: графическое изображение, текст, шрифты, зашифрованы они или нет и если зашифрованы то по какому алгоритму и т.д. Таблица перекрестных ссылок (cross reference table) связывает номера объектов с их позицией в файле и всегда хранится в незашифрованном состоянии.

<PDF file> ::= <header> <body> <cross-reference table> <trailer>

<body> ::= <object> {<object>}

<object> :: <objectID> (<data> | <  > <stream>)



Содержание раздела