Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #62, ЯНВАРЬ 2006 г.

Ломаем текстовые хранилища

Крис Касперски

Спецвыпуск: Хакер, номер #062, стр. 062-096-6


* 0 — алгоритм недокументирован и более не поддерживается;

* 1 — открытый алгоритм шифрования с длиной ключа 40 бит, базовый для всех PDF;

* 2 — тот же самый алгоритм, но с длиной ключа свыше 40 бит, используется в PDF1.4+;

* 3 — усиленный недокументированный алгоритм с длинной ключа от 40 до 128-ми бит, используется в PDF 1.4+ (не документирован по требованию американского департамента коммерции).

Поле «/R» указывает ревизию (подверсию) алгоритма шифрования. В частности, версия 1 (/V 1) поддерживала только ревизию номер 2 и 3.

Поле «/Length» задет размер ключа шифрования в битах (обязательно представляющий собой степень 8), в данном случае он равен 40, то есть используется 40-битное шифрование по базовому алгоритму. Естественно, что все эти поля носят сугубо информативный характер и менять их не следует. От того, что мы сократим длину ключа с 40 бит до, скажем, 1 бита, расшифрование документа не облегчится.

Поле «/O» представляет собой 32-байтовую строку, генерируемую на основе O- и U-паролей. Это не сам пароль, а только его хэш, который используется для проверки правильности пароля владельца.

Поле «/U» — другая 32-байтовая строка. Генерируется на основе U-пароля и используется для проверки правильности пароля пользователя

Поле «/P» — это 32-битный флаг. Отвечает за политику доступа к документу, то есть за раздачу разрешений и запретов. То, что нам нужно! Каждый бит, последовательно пронумерованный от 1 до 32-х (наименее значимый бит лежит по меньшему адресу, то есть все как в x86), будучи сброшенным в ноль, запрещает то или иное деяние (подробности в табл. 2). А что если попробовать установить все биты в единицу, получив максимум полномочий и сняв все запреты? Увы :(, ничего не получится. В Adobe сидят далеко не идиоты, и поле /P попадает под пяту хэш-суммы, алгоритм генерации которой через несколько абзацев будет рассмотрен с высоты птичьего полета. А пока посмотрим, какие ограничения наложены на наш документ.

P-флаг содержит значение -60 (минус 60), которое в HEX-представлении равно FFC4h. Если перевести это число в двоичную форму, мы получим 1111111111000100 или около того. И что же значит эта сакральная руна? Попробуем расшифровать. Два правых бита равны нулю, как им и положено. Третий бит разрешает печать, печать действительно разрешена, но все остальные операции (в том числе копирование текста в буфер обмена) строго-настрого запрещены…

Генерация ключа шифрования

Генерация ключа шифрования осуществляется во много стадий, как именно — рассмотрим прямо сейчас, что называется, «на пальцах». Подробное изложение алгоритма шифрования можно найти в спецификации на PDF, ссылку на которую мы уже давали, так что не будем повторяться и описывать то, что уже описано задолго до нас. Делаем свой первый шаг:

1. берем U-пароль (обычно пустой) и дополняем его до 32 байт, используя следующую строку, жестко прописанную (hardcoded) в теле Acrobat'а: 28h BFh 4Eh 5Eh 4Eh 75h 8Ah 41h 64h 00h 4Eh 56h FFh FAh 01h 08h 2Eh 2Eh 00h B6h D0h 68h 3Eh 80h 2Fh 0Ch A9h FEh 64h 53h 69h 7Ah, соединяя пароль со строкой операцией конкатенации (объединения).

Назад на стр. 062-096-5  Содержание  Вперед на стр. 062-096-7