pdfcrack

pdfcrack помогает восстановить забытый пользовательский или владельческий пароль защищённого PDF: программа перебирает кандидаты из словаря либо заданного набора символов, ограничивает диапазон длины, проверяет вариант с заглавной первой буквой, показывает скорость поиска и сохраняет состояние по Ctrl+C для последующего продолжения. Пользователь передаёт файл параметром -f, выбирает тип пароля, при необходимости указывает известный пароль открытия для ускоренного поиска владельческого пароля и получает найденную строку в терминале.

Рабочее окно здесь заменяет последовательный вывод в терминале. Сразу после запуска видны сведения о защите документа: версия формата PDF, обработчик Security Handler, значения V, R и P, длина ключа, признак шифрования метаданных, идентификатор файла, а также служебные записи U и O. Затем через равные интервалы появляются средняя скорость проверки и текущий кандидат; при успехе выводится строка found user-password или found owner-password. Поэтому ход задачи контролируется без скрытых фоновых этапов: параметры запуска, диагностический заголовок, прогресс и результат находятся в одном журнале.

Практический результат сильнее всего зависит не от размера PDF, а от качества гипотезы о пароле. Словарь из вероятных вариантов почти всегда разумнее полного перебора, а известные длина, алфавит, шаблон даты, префикс или регистр сокращают пространство поиска на порядки. Важно учитывать границы программы: она проверяет пароль, но не создаёт расшифрованную копию документа, не предлагает графических мастеров и не распределяет вычисления по нескольким ядрам. После нахождения строки для снятия шифрования или ограничений потребуется отдельный PDF-инструмент и право владельца на такую операцию.

Скачать pdfcrack

Оценка 9.7 Рекомендуем
  • Редактирование PDF
  • Русский интерфейс
  • Просто новичкам
Скачать бесплатно на Windows
Лучшая альтернатива
pdfcrack
Оценка 8.5
  • Только командная строка
  • Один поток вычислений
  • Не расшифровывает файл
Скачать pdfcrack
Загрузка начнётся после нажатия

Как устроен рабочий процесс в pdfcrack

Типичная задача начинается с одного защищённого документа и предположения о том, каким мог быть пароль. В команде обязательно указывается входной PDF, после чего выбирается источник кандидатов. Если есть собственный перечень слов, дат, фамилий или шаблонов, подключается текстовый словарь. Если известен допустимый набор символов, включается последовательная генерация комбинаций. Эти два подхода нельзя оценивать только по удобству: словарь проверяет небольшой, но осмысленный набор, а полный перебор гарантированно охватывает заданное пространство лишь ценой резко растущего времени.

Программа не анализирует смысл документа, не извлекает подсказки из текста и не строит вероятностную модель пароля. Каждый кандидат формируется или читается, затем проверяется по параметрам стандартного обработчика безопасности, извлечённым из PDF. Поэтому размер многостраничного отчёта, количество изображений и качество сканов почти не влияют на скорость. Основная вычислительная стоимость задаётся ревизией защиты, длиной ключа и количеством кандидатов, которые нужно проверить.

Перед долгим запуском полезно разделить работу на короткие этапы. Сначала проверяют пустую строку и несколько очевидных вариантов, затем небольшой персональный словарь, после него — расширенный словарь, и только потом переходят к перебору. Такой порядок не только экономит время, но и делает результат воспроизводимым: для каждого этапа остаётся точная команда, понятный набор кандидатов и измеренная скорость.

Минимальный запуск

Базовая команда передаёт имя файла через -f. Кавычки обязательны, если в пути есть пробелы, скобки, амперсанд или другие символы, которые оболочка трактует отдельно. Удобнее начать из рабочей папки, где лежит копия документа, словари и будущий файл состояния.

pdfcrack -f "archive protected.pdf"

Без дополнительных параметров pdfcrack ищет пользовательский пароль и генерирует варианты в стандартном буквенно-цифровом наборе. Нижняя граница длины равна нулю, верхняя — 32, поэтому такой запуск служит прежде всего проверкой распознавания защиты и исходной скорости. Для реальной долгой задачи границы почти всегда следует сузить: оставлять диапазон от пустой строки до 32 символов без обоснованной гипотезы непрактично.

Подготовка документа и рабочей папки

Работать следует с копией PDF. Сам pdfcrack открывает исходник для чтения и не должен менять его содержимое, однако отдельная копия защищает от случайной перезаписи при последующем расшифровании, переименовании или пакетной обработке. Исходный файл разумно хранить отдельно и проверить его контрольную сумму до экспериментов, особенно если документ важен для архива, судебной процедуры или внутреннего расследования.

Имя рабочей папки лучше сделать коротким и без управляющих символов. Внутри удобно создать каталоги pdf, wordlists и results. Такая структура упрощает команды и снижает риск подать не тот файл. Самая частая бытовая ошибка — запуск из другой директории: относительный путь к PDF или словарю перестаёт существовать, а savedstate.sav записывается не туда, где его ожидают.

mkdir -p pdfcrack-job/pdf pdfcrack-job/wordlists pdfcrack-job/results
cp "locked report.pdf" pdfcrack-job/pdf/locked-report.pdf
cd pdfcrack-job

Перед поиском стоит открыть документ обычным просмотрщиком и зафиксировать поведение. Если пароль запрашивается до показа первой страницы, нужен пользовательский пароль. Если страницы открываются, но запрещены печать, копирование или изменение, речь обычно идёт о владельческом пароле и разрешениях. Это различие определяет ключ -u или -o и помогает не тратить часы на поиск не того секрета.

Также полезно проверить, что файл действительно является PDF, а не HTML-страницей, архивом или повреждённой загрузкой с расширением .pdf. Команда file в Unix-подобной системе должна распознать PDF document. Если просмотрщик тоже сообщает о повреждении, сначала восстановите или повторно получите документ: парольный перебор не исправляет разорванную таблицу ссылок и отсутствующие байты.

Установка и проверка запуска

В Debian, Ubuntu и производных системах пакет устанавливается штатным менеджером. В Arch Linux он находится в основном репозитории Extra, а на macOS доступна формула Homebrew. Для BSD-систем существуют порты; при сборке исходного кода нужны GNU Make и современный GCC, но дополнительные библиотеки самому ядру программы не требуются. Конкретная команда зависит от системы и прав пользователя.

sudo apt install pdfcrack
# Arch Linux
sudo pacman -S pdfcrack
# macOS с Homebrew
brew install pdfcrack

После установки следует выполнить -v и убедиться, что оболочка находит нужный исполняемый файл. Если команда не обнаружена, проблема обычно связана с PATH, неполной установкой пакета или запуском в новой оболочке до обновления её окружения. Команды type -a pdfcrack и command -v pdfcrack показывают, какой файл будет запущен; это особенно важно, если ранее вручную собиралась другая копия.

pdfcrack -v
command -v pdfcrack
type -a pdfcrack

Установка pdfcrack пакетным менеджером в терминале

На кадре установки видно, что пакетный менеджер сообщает имя пакета, объём загрузки и путь получения. Для контрольной проверки полезно убедиться, что не используется сторонний downloader или пакет с похожим названием. В системном репозитории название пакета и исполняемого файла совпадает — pdfcrack.

Сборка из исходного архива

Когда готового пакета нет, архив распаковывают в отдельную папку и запускают make. Сборочная система создаёт двоичный файл pdfcrack в каталоге исходников. Установка в системный путь не обязательна: сначала безопаснее проверить запуск как ./pdfcrack -v. Если make в BSD является собственной реализацией, документация рекомендует gmake.

tar -xzf pdfcrack-*.tar.gz
cd pdfcrack-*
make
./pdfcrack -v

Ошибка компилятора обычно указывает на отсутствие заголовков стандартной библиотеки, GNU Make или комплекта средств разработки. Не следует исправлять её загрузкой неизвестного готового бинарника. Установите штатный build-essential, base-devel либо Xcode Command Line Tools, затем повторите чистую сборку. Для воспроизводимости сохраните контрольную сумму архива и полный вывод make.

Командная справка и параметры запуска

У pdfcrack нет меню и диалогов, поэтому справка фактически заменяет карту интерфейса. Она выводит обязательную форму команды и короткие синонимы параметров. Наиболее надёжно запустить программу без аргументов или открыть системную man-страницу. Параметр -v печатает только номер сборки и завершает работу; он не показывает список опций.

Справка pdfcrack со списком параметров командной строки

Основные переключатели образуют четыре группы. Первая задаёт вход: -f для PDF и -l для сохранённого состояния. Вторая выбирает кандидаты: -w для словаря или -c для собственного набора символов. Третья ограничивает генерацию: -n задаёт минимальную длину, -m — максимальную, -s добавляет простую перестановку регистра первой буквы. Четвёртая управляет целью и выводом: -u ищет пользовательский пароль, -o — владельческий, -p сообщает известный пользовательский пароль, -q подавляет обычный диагностический вывод, -b запускает тест производительности.

ПараметрНазначениеПрактическое замечание
-f FILEОткрыть защищённый PDFНе сочетать с -l в одной команде
-w FILEЧитать кандидаты из словаряОдна строка — один вариант
-c STRINGЗадать набор символовСпецсимволы заключать в кавычки
-n NНачать с длины NИмеет смысл для генерации
-m NОстановиться после длины NДолжно быть не меньше -n
-oИскать владельческий парольПо умолчанию ищется пользовательский
-p STRINGПередать известный пароль открытияОдновременно переводит поиск на владельческий
-sПроверить заглавную первую буквуНе заменяет полноценные правила мутации
-l FILEПродолжить сохранённую задачуФайлом является savedstate.sav
-bЗапустить встроенный тестНе прогнозирует точное время для любого PDF
-qСократить выводРезультат поиска остаётся важен для журнала

Длинные формы удобны в сценариях, но короткие опции проще сверять с man-страницей и примерами. Регистр в имени --loadState имеет значение, поэтому для восстановления состояния практичнее использовать короткий -l. При неизвестной опции программа печатает справку и возвращает ошибку, а не игнорирует параметр. Это полезное поведение для автоматизации: опечатка не превращается в незаметный многодневный перебор с настройками по умолчанию.

Что означает диагностический заголовок PDF

После чтения файла pdfcrack выводит набор полей, взятых из структуры шифрования. Это не содержимое документа и не найденные пароли. Строка PDF version показывает версию синтаксиса файла, Security Handler обычно должен быть Standard, V описывает вариант алгоритма защиты, R — ревизию обработчика, P — битовую маску разрешений, Length — длину ключа в битах. Encrypted Metadata сообщает, включены ли метаданные в шифрование.

Начальный вывод pdfcrack с параметрами защиты PDF

FileID участвует в вычислении ключа конкретного документа. Записи U и O — служебные значения, по которым проверяется пользовательский и владельческий пароль. Их длинные шестнадцатеричные строки нельзя вводить как пароль и бессмысленно копировать в словарь. Они нужны программе как криптографические данные проверки. Совпадение двух документов по названию или содержанию не означает совпадение FileID и служебных записей.

Диагностический заголовок помогает быстро заметить неверный сценарий. Security Handler, отличный от Standard, указывает на неподдерживаемую схему, например сертификатную защиту. Сообщение об отсутствии шифрования означает, что файл либо не защищён паролем, либо ограничения реализованы иначе. Неподдерживаемая ревизия требует другого инструмента; увеличение словаря такую несовместимость не исправит.

Поле P не сообщает пароль, но объясняет, почему документ открывается и одновременно запрещает отдельные действия. Это набор флагов печати, копирования, изменения и других разрешений. pdfcrack не редактирует P и не снимает флаги сам: его задача — восстановить строку, необходимую для авторизованной дальнейшей обработки.

Пользовательский и владельческий пароль

Пользовательский пароль, или password to open, проверяется до доступа к страницам. В обычном запуске pdfcrack работает именно с ним. Если просмотрщик показывает диалог сразу после открытия, начните без -o. Успешный результат печатается как found user-password и заключается в одинарные кавычки. Кавычки являются оформлением вывода и не входят в пароль.

Владельческий пароль связан с разрешениями документа. PDF может открываться без запроса, если пользовательская строка пустая, но печать или копирование остаются ограниченными. Для этой цели используется -o. В некоторых схемах поиск владельческого пароля без известной пользовательской строки существенно тяжелее, потому что для каждого кандидата приходится восстанавливать и проверять связанные данные.

Если пароль открытия известен, передайте его через -p. Этот параметр автоматически означает поиск владельческого пароля и использует оптимизированную проверку. Переданный пароль сначала проверяется; если он неверен, программа завершится сообщением Wrong userpassword, а не начнёт бессмысленный поиск. Строку со спецсимволами нужно защищать кавычками оболочки.

pdfcrack -f 'restricted.pdf' -o
pdfcrack -f 'restricted.pdf' -p 'known-open-password'

Поиск владельческого пароля в pdfcrack с отображением текущего слова

При нахождении владельческой строки pdfcrack выводит found owner-password. Для старых вариантов стандартного обработчика программа также может напечатать восстановленный пользовательский пароль. Эти две строки следует сохранить раздельно: одна открывает документ, другая подтверждает полномочия владельца и позволяет затем менять разрешения в совместимом редакторе.

Успешное нахождение владельческого и пользовательского пароля

Не следует путать владельческий пароль с обходом ограничений. Официальная логика программы предполагает согласие владельца и восстановление утраченных данных доступа. Если права на документ отсутствуют, техническая возможность перебора не создаёт законного основания для чтения, копирования или изменения файла.

Поиск по словарю

Словарный режим подключается ключом -w и обычно является первым серьёзным этапом. Файл содержит кандидаты по одному на строку. В него можно включить старые корпоративные шаблоны, варианты имени проекта, даты, номера договоров, известные основы с суффиксами и типичные опечатки. Чем точнее список отражает привычки автора, тем выше шанс результата при небольшом числе проверок.

pdfcrack -f "pdf/locked-report.pdf" -w "wordlists/candidates.txt"

Разработчик рекомендует сортировать словарь по длине. Это улучшает работу внутренних подготовительных вычислений, которые зависят от длины кандидата. Сортировка не меняет множество вариантов, но делает последовательность более предсказуемой. Для простого списка можно использовать sort с сохранением уникальных строк; при этом учитывайте локаль, поскольку она влияет на порядок символов.

LC_ALL=C sort -u wordlists/raw.txt > wordlists/candidates.txt
wc -l wordlists/candidates.txt

Перед запуском проверьте невидимые символы. Файл, созданный в редакторе Windows, может содержать CRLF; современные сборки понимают разные стили перевода строки, однако пробелы в конце строки остаются частью кандидата. Маркер BOM в начале UTF-8 также способен превратить первый пароль в другую последовательность байтов. Команды sed -n l, od или hexdump помогают увидеть табуляции, возврат каретки и BOM.

Словарь не должен быть случайной свалкой миллионов утечек, если известен контекст. Сначала полезно собрать узкий слой: точные варианты, затем изменения регистра, годы, разделители и короткие суффиксы. Второй слой может содержать общеупотребительные пароли, третий — широкую базу. Такая очередность даёт быстрый ответ в наиболее вероятных случаях и позволяет остановиться до дорогого этапа.

Успешный словарный поиск пользовательского пароля

На успешном экране после диагностических полей появляется found user-password. Если программа дошла до конца файла и напечатала Could not find password, это означает только отсутствие совпадения среди поданных строк. Оно не доказывает, что PDF повреждён или пароль слишком сложен; следующий шаг — проверить кодировку, полноту списка и выбранный тип пароля.

Как строить полезный словарь без лишнего перебора

Хороший словарь начинается с фактов, которыми пользователь вправе располагать. Для собственного архива это могут быть прежние правила именования, календарные даты, названия отделов, номера проектов, сокращения и допустимые разделители. Не добавляйте персональные данные третьих лиц без законного основания. Цель — восстановить собственный секрет, а не собирать чувствительный профиль автора документа.

Разделите основу и модификаторы. Например, если известны слова alpha и report, а пароль обычно завершался годом, сформируйте комбинации alpha2024, Alpha2024, report-2024 и Report_2024. pdfcrack сам умеет лишь сделать первую букву заглавной через -s; добавление цифр, замен, перестановок и нескольких слов нужно выполнить заранее внешним генератором.

При создании словаря скриптом важно исключить случайные пробелы и дубликаты. Один и тот же кандидат, повторённый тысячи раз, не повышает вероятность и только расходует время. Сохраняйте исходный генератор рядом с итоговым файлом: тогда понятно, какие правила применялись, и можно добавить новый шаблон без ручного редактирования гигантского списка.

python3 - <<'PY'
words = ['alpha', 'report', 'archive']
years = range(2020, 2027)
with open('wordlists/project.txt', 'w', encoding='latin-1') as out:
    for word in words:
        for year in years:
            for sep in ('', '-', '_'):
                out.write(f'{word}{sep}{year}\n')
                out.write(f'{word.capitalize()}{sep}{year}\n')
PY

Пример использует Latin-1 только потому, что выбранные символы входят в эту кодировку и старые PDF-пароли часто обрабатываются как однобайтовые строки. Для конкретного документа кодировка должна соответствовать той, в которой пароль был создан. Если в предполагаемой строке есть кириллица, эмодзи или символы за пределами Latin-1, сначала проверьте совместимость на тестовом PDF с известным паролем; побайтовый перебор не равен осмысленной работе с Unicode.

Оценить словарь можно до запуска. Количество строк показывает верхнюю границу проверок. Если файл содержит 200 тысяч кандидатов, а измеренная скорость равна 50 тысяч слов в секунду, полный проход займёт всего несколько секунд без учёта накладных расходов. Если строк 500 миллионов, хранение, чтение и повторная генерация могут стать проблемой сами по себе; в таком случае лучше выразить шаблон более компактно другим инструментом с правилами или масками.

Кодировка, регистр и специальные символы

pdfcrack сравнивает последовательности байтов, а не нормализованные символы человеческого языка. Два визуально одинаковых слова могут иметь разные байтовые представления: это особенно заметно у составных диакритических знаков, кириллицы в UTF-8 и символов, похожих на латинские. Если предполагаемый пароль был введён в старой программе с однобайтовой кодировкой, современный UTF-8-словарь может не дать совпадения.

Для диагностики создайте тестовый PDF тем же приложением, которое использовалось для исходного документа, и задайте известную строку со спорными символами. Затем проверьте её через pdfcrack. Такой тест показывает реальное преобразование текста лучше, чем догадки о кодировке. Не используйте рабочий конфиденциальный документ для эксперимента, если достаточно пустой тестовой страницы.

Оболочка добавляет второй слой правил. Символы $, *, ?, [, ], !, обратная косая черта, пробел и кавычки могут интерпретироваться до запуска программы. Одинарные кавычки в POSIX-оболочке обычно передают содержимое буквально, но включить сам апостроф внутрь такой строки сложнее. Для длинного или сложного набора символов безопаснее сформировать словарь файлом, чем строить хрупкую команду.

pdfcrack -f 'locked.pdf' -c 'abcABC0123!@#' -n 4 -m 8

Параметр -s не превращает поиск в регистронезависимый. Он проверяет исходный кандидат и дополнительный вариант, где только первый символ преобразован в верхний регистр по таблице ISO Latin 1. Он не меняет остальные буквы, не делает все возможные комбинации регистра и не добавляет цифры. Поэтому -s полезен для пары password/Password, но не охватывает pAssword, PASSWORD или password1.

Полный перебор и собственный набор символов

Генеративный режим применяется, когда пароль короткий или его структура известна достаточно точно. Ключ -c задаёт алфавит, -n и -m — диапазон длины. Для шестизначного цифрового кода команда проверяет все комбинации от 000000 до 999999. Начальные нули не теряются, потому что кандидат рассматривается как строка, а не число.

pdfcrack -f 'locked.pdf' -c 0123456789 -n 6 -m 6

Если известно, что длина могла быть от четырёх до шести цифр, пространство равно 10⁴ + 10⁵ + 10⁶, то есть 1 110 000 вариантов. Это всё ещё небольшая задача. Но восемь символов из 62 латинских букв и цифр дают 62⁸, или 218 340 105 584 896 вариантов. При 50 тысячах проверок в секунду полный проход занял бы около 138 лет. Такой расчёт нужно сделать до запуска, а не после суток ожидания.

Каждый добавленный символ в алфавит умножает число комбинаций на себя для каждой позиции. Поэтому набор все печатные символы почти всегда плохая отправная точка. Если пароль, вероятно, состоял из цифр и дефиса, задайте только эти знаки. Если известен префикс, pdfcrack не имеет маски фиксированных позиций; эффективнее заранее сгенерировать словарь или выбрать hashcat, John the Ripper либо другой инструмент с масками и правилами.

Ограниченный перебор с собственным набором символов и диапазоном длины

Текущий кандидат на экране помогает проверить направление счёта и кавычки. Если вместо ожидаемых знаков появляются символы оболочки или набор заметно отличается, остановите задачу Ctrl+C, исправьте команду и начните заново либо загрузите состояние после проверки. Не стоит оставлять многодневный процесс только потому, что он уже работал несколько часов: неверный алфавит гарантирует нулевой результат.

Формула оценки

Для алфавита размером k и длин от a до b число кандидатов равно сумме kⁿ для всех n от a до b. При включённом -s часть слов получает дополнительную проверку, поэтому фактическое количество может приблизительно удвоиться, но не для кандидатов, у которых первый байт уже не меняется в верхний регистр. Время оценивается делением числа проверок на скорость конкретного документа.

кандидаты = k^a + k^(a+1) + ... + k^b
время ≈ кандидаты / слов_в_секунду

Скорость из одной задачи нельзя механически переносить на другую. Разные ревизии обработчика требуют разного количества хеширований и операций RC4 или SHA-256. Кроме того, частота процессора, энергосберегающий режим, виртуализация и конкурирующая нагрузка меняют результат. Используйте встроенный тест и короткий реальный запуск как ориентир, затем рассчитывайте диапазон, а не точную дату окончания.

Минимальная и максимальная длина

Параметры -n и -m особенно важны, потому что генератор идёт по длинам последовательно. Значения по умолчанию — от 0 до 32. Если пароль точно имел восемь символов, задайте -n 8 -m 8 и не расходуйте время на все более короткие комбинации. Если известно лишь примерно шесть-восемь, используйте этот диапазон и заранее посчитайте его размер.

Нулевая минимальная длина позволяет проверить пустой пользовательский пароль. Это уместно для документа, который открывается без запроса, но имеет ограничения владельца. Для обычного пароля открытия пустая строка проверяется быстро и не мешает, однако огромный диапазон до 32 создаёт ложное ощущение полноты. Фактически процесс почти никогда не достигнет больших длин при широком алфавите.

Если минимальная длина больше максимальной, программа печатает предупреждение Warning: minimum pw-length bigger than max. Это не удобный способ задать пустой диапазон, а ошибка параметров. Исправьте команду и перезапустите. В сценариях проверяйте числа до вызова, чтобы опечатка не осталась незамеченной в журнале.

Длина понимается в байтах используемого представления. Для ASCII один символ равен одному байту, а UTF-8-кодированный нелатинский знак может занимать несколько байтов. Поэтому визуальная длина и параметр -n не всегда совпадают. Это ещё одна причина предпочесть словарь для национальных алфавитов и сложных символов.

Сохранение задачи и продолжение после Ctrl+C

При получении SIGINT, обычно после Ctrl+C, pdfcrack пытается записать текущее состояние в файл savedstate.sav в текущей рабочей директории. В журнале появляются сообщения Caught signal, Trying to save state и Successfully saved state. Пока последняя строка не показана, не закрывайте терминал принудительно: файл может не успеть завершиться.

Для продолжения используется -l с путём к сохранению. Не добавляйте одновременно -f: входом для режима восстановления является сам файл состояния, и сочетание двух источников приводит к Inputfile already set. Состояние содержит параметры шифрования, выбранный тип пароля, текущую позицию, настройки перестановки и сведения о словаре, необходимые для продолжения.

pdfcrack -l savedstate.sav

Сразу после остановки сделайте резервную копию состояния с осмысленным именем. Следующее прерывание по умолчанию снова пишет savedstate.sav и может заменить предыдущую точку. Для нескольких задач используйте отдельные рабочие каталоги, иначе их сохранения конфликтуют. К имени можно добавить документ и дату, но для загрузки указывайте фактический файл.

cp savedstate.sav results/locked-report-01.sav
pdfcrack -l results/locked-report-01.sav

Если задача использовала словарь, не изменяйте его содержимое и расположение до продолжения. Сохранённая позиция относится к конкретной последовательности строк; сортировка, удаление дублей или замена кодировки после остановки делает продолжение ненадёжным. Для обновлённого словаря начните отдельный запуск и сохраните старый журнал как доказательство уже проверенного набора.

Сообщение Error: Not a savefile or savefile is damaged означает, что структура состояния не распознана. Частые причины — нулевой файл после аварийного завершения, ручное редактирование, перенос в текстовый редактор с изменением переводов строк или попытка передать обычный PDF через -l. Вернитесь к резервной копии; восстановление повреждённого состояния вручную рискованно, потому что часть двоичных значений записана как числовые последовательности и должна оставаться согласованной.

Прогресс, скорость и тихий режим

Обычный вывод обновляется примерно каждые двадцать секунд. Строка Average Speed показывает среднее число проверенных слов в секунду за последний интервал, а Current Word — текущий кандидат. После каждого сообщения счётчик интервала сбрасывается, поэтому скорость может колебаться. Небольшие отклонения нормальны; резкое падение часто связано с энергосбережением, перегревом, конкурирующим процессом или переходом на другую длину кандидата.

Периодический вывод средней скорости и текущего кандидата

Current Word полезен для контроля, но это чувствительные данные. На экране, в журнале терминала и системе мониторинга могут появляться предположения о пароле. Не транслируйте такую сессию публично, не отправляйте полный лог в тикет и не сохраняйте его в общую папку. После завершения проверьте историю команд: если пароль передавался через -p, он мог попасть в shell history и список процессов.

Ключ -q подавляет диагностический заголовок и периодические сообщения. Он удобен в автоматизированной проверке, когда важен только итог, но затрудняет наблюдение за зависшей или неверно настроенной задачей. Для длительной работы лучше сохранить обычный вывод через tee, ограничив права файла. Тихий режим не ускоряет криптографическую проверку заметно; он лишь уменьшает печать.

umask 077
pdfcrack -f 'locked.pdf' -w 'wordlists/candidates.txt' 2>&1 | tee results/session.log

Встроенный тест запускается ключом -b и завершается без чтения PDF. Он сравнивает несколько внутренних операций и помогает увидеть относительную производительность процессора. Однако окончательная скорость зависит от параметров конкретного документа, поэтому benchmark следует дополнять коротким реальным этапом. Не используйте лучший показатель из теста для обещания срока сложного перебора.

Как ускорить поиск без выдуманной производительности

Главный способ ускорения — сократить число кандидатов. Переход от алфавита из 62 символов к десяти цифрам для восьми позиций уменьшает пространство примерно в 218 миллионов раз. Уточнение длины с диапазона 1–10 до ровно 8 удаляет все лишние уровни. Даже небольшой факт о шаблоне даёт больший эффект, чем несколько процентов оптимизации компилятора.

Второй способ — поставить вероятные варианты раньше. Словарь с реальными шаблонами проверяется до полного перебора; короткие и часто используемые основы располагаются в начале. В отличие от вероятностных инструментов pdfcrack следует порядку строк и не переоценивает их автоматически. Если самый вероятный пароль находится в конце файла, программа доберётся до него только после всех предыдущих кандидатов.

Третий способ — использовать известный пользовательский пароль для владельческого поиска через -p. Это предусмотренная оптимизация, а не обход проверки. Сначала программа убеждается, что строка действительно подходит документу, затем применяет более прямой алгоритм поиска владельческого пароля. Неверное значение немедленно отклоняется.

Сборка с оптимизацией под процессор может дать прирост, но требует аккуратности. Документация упоминает настройку -march в CFLAGS. Такой двоичный файл может перестать запускаться на другом процессоре, поэтому не распространяйте его как универсальный. Сравнивайте результаты на одном документе, одинаковом диапазоне и без фоновой нагрузки; иначе разница не относится к компилятору.

pdfcrack выполняет поиск одним вычислительным потоком и не использует GPU. Запуск нескольких экземпляров с одинаковым диапазоном лишь дублирует работу. Программа не предоставляет параметров start/end для штатного разделения пространства, поэтому ручное распараллеливание через повреждённые состояния сложно проверять. Для многоядерных и GPU-систем разумнее выбрать инструмент, который изначально поддерживает маски, разделение задач и контроль устройств.

Сценарии автоматизации

Командная форма удобна для воспроизводимых процедур. Можно заранее перечислить несколько словарей и запускать их по очереди, останавливая цепочку после найденного результата. При этом нельзя полагаться только на код возврата: после исчерпания кандидатов runCrack завершает обычную работу и печатает Could not find password. Надёжнее анализировать строго ограниченный журнал либо оборачивать запуск в скрипт, который ищет строку found user-password или found owner-password.

for wl in wordlists/personal.txt wordlists/project.txt wordlists/common.txt; do
  log="results/$(basename "$wl").log"
  pdfcrack -f 'pdf/locked-report.pdf' -w "$wl" | tee "$log"
  grep -q '^found .*password:' "$log" && break
done

Такой пример рассчитан на собственный документ и закрытую рабочую папку. Пароль попадает в лог открытым текстом, поэтому перед запуском задайте umask 077 и ограничьте доступ к каталогу. После успешного восстановления перенесите секрет в защищённое хранилище, а временные журналы удалите по принятой политике. Обычное удаление не всегда гарантирует стирание на SSD и в резервных копиях; важнее не создавать лишних копий.

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

Не помещайте пароль напрямую в имя файла или аргументы процесса без необходимости. -p нужен для оптимизированного владельческого поиска, но строка может быть видна через ps пользователям той же системы. На изолированной машине риск ниже; в многопользовательской среде предпочтительнее временно ограничить доступ и очистить историю оболочки. pdfcrack не имеет интерактивного скрытого запроса для -p.

Совместимые PDF и границы обработчика безопасности

Официально заявлена работа со стандартным обработчиком безопасности ревизий 2, 3 и 4. Это охватывает распространённые старые схемы на основе RC4 и варианты, где в структуре присутствуют стандартные записи O, U, P и FileID. Программа сначала разбирает трейлер и объект Encrypt; если нужные поля извлечь не удаётся, проверка кандидатов не начинается.

Фраза PDF version в начале вывода относится к синтаксису документа, а R — к ревизии защиты. Это разные значения. Современный файл может использовать совместимую ревизию, а старое на вид расширение не гарантирует совместимость. Решение принимается по фактическому объекту шифрования, а не по имени, дате создания или версии просмотрщика.

Сертификатная защита, нестандартный Security Handler и новые схемы, которые программа не поддерживает, требуют другого решения. Сообщение The specific version is not supported содержит имя обработчика и ревизию. Не имеет смысла менять алфавит или словарь: отказ происходит до перебора. Для новых PDF-профилей подойдут hashcat, John the Ripper или коммерческий инструмент, если они явно поддерживают извлечённый формат.

Даже совместимый PDF может не разобрать эвристический парсер. Документация прямо предупреждает о файлах со структурой, требующей исправления парсера. Причиной могут быть необычная организация таблицы ссылок, повреждение, инкрементальные обновления или нестандартная запись объектов. Иногда помогает безопасно пересохранить документ совместимым редактором, но это возможно только при доступе к содержимому и может изменить подписи, метаданные и доказательную ценность.

Размер более двух гигабайт поддерживается в современных исходниках, но это не отменяет ограничений файловой системы и сборки. При ошибках на крупном документе проверьте, что двоичный файл собран с поддержкой больших смещений, свободное место достаточно, а копирование завершилось без усечения. Сам перебор не читает каждую страницу на каждом кандидате, поэтому гигантский PDF не должен линейно замедлять каждую проверку.

Что pdfcrack не делает

Найденный пароль выводится в терминал, но исходный PDF остаётся зашифрованным. Программа не записывает unlocked.pdf, не меняет разрешения P, не удаляет запрос пароля и не редактирует страницы. Такое разделение полезно: восстановление секрета и модификация документа остаются отдельными контролируемыми действиями.

Нет графического окна, очереди задач, мастера масок, статистики оставшегося времени, встроенного генератора сложных словарей, GPU-ускорения и распределённого сервера. Отсутствует полноценный движок правил, знакомый по hashcat или John the Ripper. Ключ -s реализует только одну простую мутацию первой буквы.

Программа не гарантирует нахождение любого пароля. Полный перебор конечного заданного пространства гарантирует результат лишь при трёх условиях: пароль входит в алфавит, его длина попадает в диапазон, а формат защиты поддерживается. На практике пространство часто настолько велико, что перебор не завершится в разумный срок. Сообщение Could not find password после словаря означает исчерпание конкретного набора, а не математическое доказательство отсутствия пароля.

Не предусмотрено распознавание пароля по подсказке, метаданным, имени автора или другим документам. Все такие гипотезы пользователь превращает в словарь самостоятельно. Это снижает риск скрытого сбора данных, но требует дисциплины: записывайте происхождение каждой группы кандидатов и не добавляйте случайные личные сведения.

Расшифрование копии после успешного поиска

После получения правильной строки создайте отдельную расшифрованную копию, сохранив оригинал без изменений. Для этого подходит qpdf или другой редактор, который принимает известный пароль. Команда должна задавать разные входной и выходной файлы; попытка писать поверх исходника увеличивает риск потери данных при ошибке или нехватке места.

qpdf --password='found-password' --decrypt 'locked.pdf' 'results/unlocked.pdf'

Кавычки вокруг пароля защищают его от оболочки, но одинарный апостроф внутри строки потребует специального экранирования. Не вставляйте пароль в публичный скриншот или общий сценарий. После выполнения откройте results/unlocked.pdf, проверьте число страниц, вложения, формы, подписи и возможность копирования. Расшифрование может повлиять на цифровые подписи или сделать их недействительными, поэтому для юридически значимого файла сохраняйте исходник и журнал действий.

Если qpdf отвечает invalid password, сначала проверьте, не скопированы ли внешние кавычки из строки found. Затем различите пользовательский и владельческий пароль. Некоторые действия разрешены только владельческой строкой, тогда как пользовательская открывает страницы. Также убедитесь, что обрабатывается тот же PDF: одинаковые имена в разных папках легко перепутать.

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

Типичные ошибки и способы исправления

Error: file ... not found

Указанный PDF, словарь или файл состояния не найден. Проверьте текущую директорию командой pwd, список файлов через ls -l и регистр букв. Относительный путь отсчитывается от папки запуска, а не от расположения исполняемого файла. Если имя содержит пробелы, заключите весь путь в кавычки. Для словаря программа использует отдельное сообщение с тем же смыслом.

Error: Not a valid PDF

Файл не распознан как PDF. Он может быть незавершённой загрузкой, HTML-страницей ошибки, архивом, нулевым файлом или сильно повреждённым документом. Проверьте первые байты, тип файла и открытие в нескольких просмотрщиках. Простое переименование расширения не помогает. Получите корректную копию до работы с паролем.

Encryption not detected

Программа не нашла ожидаемые сведения о защите. Возможно, PDF вовсе не зашифрован, имеет только внешнее ограничение доступа, был уже расшифрован или записан необычным способом. Откройте свойства безопасности в просмотрщике. Если документ открывается без пароля и разрешает всё, задача восстановления не нужна.

Could not extract encryption information

Парсер нашёл признаки шифрования, но не смог извлечь полный набор полей. Проверьте повреждение, инкрементальные обновления и необычный объект Encrypt. Если файл доступен для открытия с известным паролем, пересохраните копию стандартным редактором и повторите. Для доказательных материалов пересохранение может быть недопустимо; тогда используйте другой парсер и сохраните исходный хеш.

The specific version is not supported

Security Handler или ревизия не входит в поддерживаемый набор. Это не ошибка пароля. Запишите значения из сообщения и выберите инструмент с соответствующим режимом PDF. Не запускайте старую случайную сборку в надежде на более широкую поддержку: сначала проверьте документированный список форматов.

Wrong userpassword

Строка, переданная через -p для ускоренного владельческого поиска, не является правильным пользовательским паролем этого документа. Возможны неправильная раскладка, кодировка, пробел, скопированные кавычки или другой файл. Проверьте пароль обычным просмотрщиком и введите его заново, защищая спецсимволы от оболочки.

Could not find password

Источник кандидатов исчерпан. Для словаря проверьте число строк, кодировку и наличие ожидаемого варианта. Для генерации — алфавит и границы длины. Убедитесь, что выбран user или owner. Если все настройки верны, расширяйте гипотезу постепенно и пересчитывайте стоимость перед каждым этапом.

Состояние не сохраняется

Сообщение Could not open savedstate.sav for writing означает отсутствие прав на текущую папку, файловую систему только для чтения или конфликт с каталогом того же имени. Перед долгим запуском выполните тестовую остановку в рабочем каталоге. Свободное место требуется минимальное, но права записи обязательны.

Практические сценарии восстановления

Забытый шестизначный код

Если владелец уверен, что пароль состоял ровно из шести цифр, полный перебор ограничивается миллионом вариантов. Запустите -c 0123456789 -n 6 -m 6. Перед этим проверьте, не использовался ли четырёхзначный год или код с ведущим нулём. Если диапазон шире, посчитайте сумму для каждой длины и оцените время по реальной скорости.

Пароль похож на название проекта

Соберите словарь из официальных написаний, сокращений, регистра, лет и допустимых разделителей. Не добавляйте весь латинский алфавит в полный перебор восьми-десяти символов: такой поиск взрывается комбинаторно. Подайте узкий список через -w, затем при необходимости сгенерируйте систематические варианты.

Документ открывается, но не печатается

Вероятно, пользовательский пароль пустой или известен, а ограничение связано с владельческой строкой. Используйте -o; если просмотрщик всё же запрашивает пароль открытия, передайте подтверждённое значение через -p. После нахождения владельческого пароля измените разрешения в авторизованном редакторе и проверьте новую копию.

Долгая задача на ноутбуке

Сначала выполните короткий диапазон и посмотрите температуру, частоту и скорость. Подключите питание, отключите агрессивное засыпание, оставьте вентиляцию свободной. Проверьте Ctrl+C и восстановление через -l до ночного запуска. Не закрывайте крышку, если система при этом приостанавливает процесс. Для многомесячной оценки выберите масочный GPU-инструмент вместо постоянной нагрузки одного ядра.

Пароль содержит национальные символы

Не начинайте с генерации UTF-8 через -c. Создайте несколько словарей в вероятных кодировках и проверьте их на тестовом PDF, созданном тем же приложением. Учитывайте раскладку, нормализацию и визуально похожие символы. Если инструмент не воспроизводит известный тестовый пароль, переходите к решению с документированной поддержкой Unicode.

Несколько документов одного автора

Начните с самого простого файла с поддерживаемой защитой и небольшим предполагаемым словарём. Найденная строка может быть проверена на остальных документах обычным просмотрщиком или qpdf. Не предполагается, что одинаковый автор всегда использовал один пароль. Храните соответствие файл — найденная строка отдельно и не публикуйте его в общем отчёте.

Сравнение pdfcrack с аналогами

Инструменты восстановления PDF-паролей различаются не только скоростью, но и способом подготовки задачи. pdfcrack принимает PDF непосредственно и удобен для коротких словарей и ограниченного перебора. Hashcat и John the Ripper обычно требуют сначала извлечь представление хеша, зато предлагают развитые правила, маски, многопоточность и аппаратное ускорение. Коммерческий Elcomsoft Advanced PDF Password Recovery добавляет графическое управление и специализированные атаки, а pdfcrack-ng развивает идею узкой консольной утилиты с иным парсером.

ПрограммаЛучше подходит дляГлавное ограничение
pdfcrackПрямой словарный или короткий полный перебор старых схем PDFОдин поток и простые правила
pdfcrack-ngЭксперименты с альтернативным открытым движком PDF-паролейПарсер может не принять отдельные файлы
John the Ripper JumboСложные словари, правила и работа на разных системахНужно извлечь данные через pdf2john
hashcatМаски и высокоскоростной поиск на совместимых GPUТребует отдельного извлечения PDF-хеша
Elcomsoft Advanced PDF Password RecoveryГрафический рабочий процесс и GPU-атаки на широкий набор PDFКоммерческая лицензия
PDF CommanderРедактирование и сохранение уже доступного PDF на русском языкеНе восстанавливает забытый пароль перебором

Для короткого цифрового кода, небольшого персонального словаря или владельческого пароля при известной строке открытия проще начать с pdfcrack. Для восьми и более символов с известной структурой выбирайте hashcat с маской; для сложных правил и смешанного парка систем — John the Ripper Jumbo. Elcomsoft удобнее, когда нужен управляемый графический процесс и поддержка новых схем. PDF Commander выбирают после получения доступа, когда требуется редактировать, объединять, конвертировать или повторно защитить документ, а не угадывать секрет.

Почему qpdf не является прямым заменителем

qpdf часто упоминают рядом, потому что он расшифровывает PDF при известном пароле и меняет структуру файла. Но он не перебирает неизвестные строки. В практической цепочке pdfcrack восстанавливает пароль, а qpdf применяет его к копии. Сравнивать их только по скорости неверно: они решают последовательные, а не одинаковые этапы.

Безопасность, законность и обращение с найденным паролем

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

Сам PDF может содержать конфиденциальные данные, а словарь — персональные сведения. Рабочая папка должна иметь минимальные права, резервное копирование — соответствовать политике, а журналы — храниться ограниченное время. Передача документа в публичный облачный сервис не требуется для работы pdfcrack; это снижает риск раскрытия содержимого, но локальный администратор, резервная система и другие пользователи машины всё равно могут получить доступ к файлам.

Найденная строка появляется открытым текстом. Сразу перенесите её в менеджер секретов или защищённую запись, укажите, к какому документу она относится, и решите, нужно ли менять защиту. Не оставляйте пароль в истории команд, снимках экрана, буфере обмена и именах файлов. Если он использовался повторно в других системах, считайте его скомпрометированным и замените там, где вы имеете полномочия.

Для проверки стойкости собственного пароля фиксируйте не только факт успеха, но и условия: размер словаря, алфавит, диапазон, скорость и время. Пароль, найденный за секунду узким персональным словарём, слаб именно против осмысленной атаки, даже если полный алфавитный перебор выглядел бы долгим. После теста выберите уникальную длинную фразу и современную схему шифрования, поддерживаемую вашим редактором.

Контрольный порядок действий

  1. Сделать неизменяемую копию исходного PDF и записать его контрольную сумму.
  2. Проверить, запрашивается ли пароль открытия или действуют только ограничения владельца.
  3. Убедиться, что файл распознаётся как PDF и открывается без сообщений о повреждении.
  4. Проверить запуск pdfcrack через -v и сохранить сведения о происхождении пакета.
  5. Запустить короткую диагностику с -f и прочитать Security Handler, R и Length.
  6. Составить узкий словарь вероятных вариантов, удалить дубликаты и проверить кодировку.
  7. Выполнить словарный поиск, затем только при необходимости перейти к ограниченному перебору.
  8. До долгого этапа посчитать пространство кандидатов и измерить реальную скорость.
  9. Проверить сохранение по Ctrl+C и восстановление отдельной командой с -l.
  10. После успеха создать новую расшифрованную копию другим инструментом, не меняя оригинал.
  11. Проверить страницы, формы, вложения, подписи и разрешения выходного файла.
  12. Защитить найденный пароль и удалить лишние журналы согласно политике хранения.

Этот порядок предотвращает две наиболее дорогие ошибки: перебор неподдерживаемого файла и запуск огромного пространства без расчёта. Диагностический заголовок подтверждает техническую совместимость, а словарь и границы выражают реальную гипотезу. Сохранение состояния делает длительную задачу управляемой, но не превращает математически невозможный диапазон в практический.

Подробное чтение служебных полей

Диагностические строки полезно сохранить до начала перебора, потому что они описывают именно тот объект шифрования, против которого выполнялась проверка. Если документ затем пересохранить, FileID, значения U и O, разрешения и даже ревизия могут измениться. Журнал старой задачи уже не доказывает, что новый файл проверялся тем же набором кандидатов. Для каждого экземпляра фиксируйте контрольную сумму и отдельный заголовок pdfcrack.

ПолеЧто показываетКак использовать
PDF versionВерсию синтаксиса файлаНе путать с ревизией шифрования
Security HandlerИмя обработчика защитыДля pdfcrack ожидается Standard
VВариант алгоритма шифрованияПомогает различать схемы внутри PDF
RРевизию стандартного обработчикаОпределяет алгоритм проверки кандидата
PБитовую маску разрешенийОбъясняет ограничения печати и копирования
LengthДлину ключа в битахВлияет на вычислительную стоимость
Encrypted MetadataШифруются ли метаданныеУчаствует в расчёте ключа для части ревизий
FileIDИдентификатор документаИспользуется при проверке пароля
UЗапись проверки пользователяНе является паролем
OЗапись владельцаНе является паролем

Значения V и R нельзя интерпретировать как линейную шкалу чем больше, тем безопаснее без знания стандарта. Они выбирают конкретные алгоритмы и правила подготовки ключа. Для пользователя важнее практический признак: программа либо начинает перебор, либо сообщает о неподдерживаемой версии. Если перебор стартовал, скорость измеряется на этом документе; если не стартовал, проблема находится в совместимости, а не в словаре.

P часто имеет отрицательное десятичное значение, как на многих терминальных снимках. Это нормальное представление знакового целого, чьи биты задают разрешения. Не пытайтесь сделать число положительным, отредактировав PDF вручную: изменение словаря Encrypt без корректного владельческого ключа может повредить согласованность защиты. После восстановления владельческого пароля используйте программу, которая корректно пересоздаёт объект шифрования.

Строки U и O могут быть длиной 32 или 48 байт в зависимости от ревизии. Их вывод в шестнадцатеричном виде удобен для сравнения, но не раскрывает пароль напрямую. Один и тот же текстовый пароль в двух PDF обычно порождает разные служебные значения из-за FileID и других параметров. Поэтому нельзя взять U из одного файла и ожидать, что он проверит второй без полного контекста.

Encrypted Metadata со значением False означает, что некоторые метаданные оставлены открытыми, но страницы и потоки могут оставаться зашифрованными. Это не обход пароля и не гарантия, что заголовок, автор или ключевые слова доступны во всех просмотрщиках. Для перебора флаг важен как вход в алгоритм вычисления ключа; pdfcrack учитывает его автоматически.

Кавычки, пути и поведение командной оболочки

Большая часть ошибок в командах возникает до запуска pdfcrack. Оболочка разбивает строку на аргументы, раскрывает шаблоны * и ?, подставляет переменные после $, обрабатывает обратную косую черту и перенаправления. Программа получает уже преобразованный массив. Поэтому путь и пароль могут отличаться от того, что визуально набрано в терминале.

Для имён файлов с пробелами используйте одинарные или двойные кавычки. Одинарные передают почти всё буквально; двойные сохраняют подстановку переменных и команд. Если путь хранится в переменной, обращайтесь к ней как к "$file", иначе пробелы снова разделят значение. Перед долгим запуском напечатайте аргументы через printf или используйте set -x в тестовом сценарии без реальных паролей.

file='pdf/Quarterly report (final).pdf'
wordlist='wordlists/project candidates.txt'
pdfcrack -f "$file" -w "$wordlist"

Набор символов для -c особенно чувствителен. Знак # в начале незакавыченного слова может начать комментарий, * раскрывается в имена файлов, $ обращается к переменной, а ! в интерактивном Bash иногда запускает подстановку истории. Одинарные кавычки защищают эти знаки. Если нужен апостроф, проще перейти к словарю или собрать аргумент скриптом, чем использовать трудно читаемую последовательность экранирования.

Пароль для -p виден в списке аргументов процесса и обычно сохраняется в истории. Передавать его через переменную не скрывает от ps: после подстановки строка всё равно становится аргументом. На машине с несколькими пользователями запускайте задачу в изолированной учётной записи и ограничьте доступ к /proc, если это предусмотрено системой. После работы удалите соответствующую запись истории штатным способом и завершите сессию, чтобы история была перезаписана.

Перенаправление вывода также требует решения. Символ > перезаписывает файл, >> дописывает, 2>&1 объединяет ошибки со стандартным выводом. Для новой задачи предпочтительно создавать новый лог и включать noclobber либо уникальное имя. Иначе запуск с опечаткой может уничтожить журнал предыдущей многодневной сессии.

set -o noclobber
pdfcrack -f 'pdf/locked.pdf' -w 'wordlists/phase1.txt' > 'results/phase1.log' 2>&1

Проверка словаря перед запуском

Словарь нужно проверять как входные данные, а не считать готовым только потому, что файл открывается в редакторе. Запишите размер, число строк, кодировку, контрольную сумму и первые несколько кандидатов. Убедитесь, что файл не является сжатым архивом, таблицей CSV или экспортом с дополнительными колонками. pdfcrack ожидает последовательность строк, а не структуру с заголовками.

file wordlists/candidates.txt
wc -c -l wordlists/candidates.txt
sha256sum wordlists/candidates.txt
sed -n '1,10l' wordlists/candidates.txt

Вывод sed с суффиксом $ показывает конец каждой строки и помогает заметить пробелы. Если кандидат намеренно содержит пробел в конце, это допустимо, но он должен быть документирован. Табуляция внутри строки тоже становится частью пароля. Автоматическое trim во время подготовки может удалить значимый символ; поэтому храните сырой источник и отдельно очищенную версию.

Для удаления дубликатов сортировка меняет порядок. Если исходный список уже упорядочен по вероятности, обычный sort -u ухудшит стратегию: наиболее вероятные строки могут уйти вниз. Сохраняющее порядок удаление дублей можно сделать через awk. Затем при желании разделите результат на группы по длине, не смешивая вероятностный приоритет внутри каждой группы.

awk '!seen[$0]++' wordlists/raw.txt > wordlists/unique.txt

Контрольный кандидат с известным тестовым PDF позволяет проверить всю цепочку: редактор, кодировку, перевод строк и команду. Создайте маленький документ, защитите заранее известной строкой и поместите её в середину словаря. Если pdfcrack не находит её, не переходите к рабочему файлу, пока причина не выяснена. Такой тест особенно важен при кириллице, символах с диакритикой и словарях, полученных из электронных таблиц.

Словарь может содержать реальные секреты. Не загружайте его в публичный сервис для сортировки или проверки и не коммитьте в Git. Права 600, закрытый каталог и шифрованный носитель уменьшают риск. Если список сформирован из корпоративных данных, после завершения примените установленный срок хранения и документируйте удаление.

Планирование времени по измеренной скорости

Оценка должна состоять из числа кандидатов, реалистичной скорости и допустимого срока. Сначала запустите небольшой диапазон или словарь на том же PDF, дождитесь нескольких строк Average Speed и возьмите консервативное значение, например нижний квартиль. Затем разделите общий объём на скорость. Добавьте запас на остановки, перегрев, перезагрузки и изменение длины.

ПространствоЧисло кандидатовПри 50 000 слов/с
6 цифр1 000 000около 20 секунд
4–6 цифр1 110 000около 22 секунд
8 строчных латинских букв208 827 064 576около 48 суток
8 букв и цифр218 340 105 584 896около 138 лет
10 цифр10 000 000 000около 2,3 суток

Таблица показывает порядок величин, а не обещание скорости. Для другого R и Length показатель может отличаться в разы. Даже на одном процессоре температура и частота меняются. Если измерено 80 тысяч слов в секунду в первые минуты и 45 тысяч после прогрева, планируйте по 45 тысячам. Оптимистичная оценка создаёт ложные ожидания и провоцирует оставить бессмысленный поиск.

Среднее время нахождения при равномерном распределении примерно вдвое меньше полного прохода, но пароль пользователя распределён неравномерно. В вероятностном словаре хороший вариант может находиться в первых процентах, а в полном лексикографическом переборе реальное положение неизвестно. Для гарантированного срока используйте полный объём, для ожидаемого — явно обозначайте предположение о позиции.

При диапазоне длин основная стоимость почти всегда приходится на максимальную длину. Для алфавита из 62 символов уровень из восьми знаков в 62 раз больше уровня из семи. Поэтому добавление на всякий случай ещё одной позиции увеличивает время почти на два порядка. Лучше выполнить отдельный этап после пересмотра гипотезы, чем сразу расширять -m.

Если срок превышает допустимый, есть только несколько честных вариантов: уменьшить алфавит, уточнить длину, построить словарь, применить маску в другом инструменте, задействовать подходящее аппаратное ускорение или признать задачу практически неразрешимой. Оставление процесса без конечной оценки не является стратегией восстановления.

Наблюдение за длительной сессией

Для многочасового запуска терминал должен переживать разрыв соединения. На удалённой машине используйте tmux, screen или менеджер служб, но сначала убедитесь, что Ctrl+C доходит до процесса и создаёт savedstate.sav. Простое закрытие SSH-соединения может послать SIGHUP, для которого автоматическое сохранение не обещано. Надёжнее остановить задачу вручную, дождаться подтверждения и только затем завершить сеанс.

При запуске через systemd или другой супервизор настройте сигнал остановки SIGINT и рабочую директорию. Если процесс получает SIGTERM или SIGKILL, обработчик сохранения может не сработать. Файл состояния пишется в WorkingDirectory, а не рядом с PDF. Запуск от отдельного пользователя ограничивает доступ к документу и журналу.

Следите не только за наличием процесса, но и за изменением лога. Строка прогресса раз в двадцать секунд позволяет обнаружить зависание. Однако слишком частая проверка через тяжёлые команды мониторинга сама создаёт нагрузку. Достаточно контролировать время последней записи, загрузку одного ядра, температуру и свободное место.

После перезагрузки не запускайте одновременно старую и восстановленную задачу. Проверьте список процессов и уникальность рабочей папки. Скопируйте savedstate.sav, затем загрузите копию. Первая строка Loaded state for подтверждает чтение, а последующий Current Word должен быть близок к ранее сохранённой позиции, а не начинаться с нуля.

Если скорость постепенно падает, сравните частоту CPU и температуру. Но не пытайтесь разгонять систему без оценки устойчивости: ошибка вычислений или авария обесценит дни работы. Для архивной процедуры важнее воспроизводимость и корректное состояние, чем небольшой прирост. Сохраните аппаратную конфигурацию и версию компилятора во внутреннем журнале, не добавляя эти служебные данные в публичный материал.

Проверка результата и отсутствие ложного успеха

Строка found password формируется только после криптографической проверки кандидата, поэтому случайное совпадение крайне маловероятно. Тем не менее пользовательские ошибки остаются возможны: работа велась не с тем файлом, журнал относится к другой сессии, пароль скопирован с внешними кавычками или содержит невидимый пробел. Проверяйте результат на той же контрольной сумме входного PDF.

Скопируйте пароль в защищённый временный буфер и откройте документ просмотрщиком. Для пользовательской строки должна исчезнуть ошибка открытия. Для владельческой — редактор должен принять её при изменении разрешений. Если один просмотрщик принимает пароль, а другой нет, исследуйте кодировку и реализацию защиты; не считайте расшифрованную копию корректной, пока её не проверили несколькими способами.

После qpdf сравните базовые свойства входа и выхода: число страниц, размер, наличие вложений, форм, закладок и цифровых подписей. Размер файлов не обязан совпадать, потому что объекты могут быть переписаны и потоки повторно упакованы. Визуальное сравнение первой страницы недостаточно. Для подписанного документа ожидайте изменение статуса подписи и храните оригинал как источник.

Если найденный владельческий пароль сопровождается выводом пользовательской строки, запишите обе с чёткими метками. Пустая пользовательская строка тоже является результатом и объясняет открытие без запроса. Не заменяйте пустое значение словом нет: в структуре PDF это осмысленный пароль нулевой длины, связанный с владельческими разрешениями.

Финальный отчёт должен указывать диапазон или словарь, момент успеха, тип пароля и контрольную сумму файла, но сам секрет лучше вынести в отдельное защищённое хранилище. Так отчёт остаётся полезным для аудита и не превращается в новую точку утечки. Доступ к секрету выдаётся только тем, кому он нужен для следующего этапа.

Итоговая стратегия выбора параметров

Начинайте с цели. Для запроса при открытии оставляйте пользовательский режим; для доступного документа с запретами выбирайте -o; при известном пароле открытия используйте -p. Затем определите источник кандидатов. Факты и шаблоны оформляйте словарём, точный короткий алфавит — через -c, длину — через -n и -m. Ключ -s добавляйте только когда имеет смысл вариант с заглавной первой буквой.

После старта проверьте, что Security Handler равен Standard, выводимые символы соответствуют ожиданиям, а скорость не падает из-за системы. Если расчёт показывает месяцы или годы, остановитесь и пересмотрите модель пароля либо выберите инструмент с масками и GPU. Продолжать широкий однопоточный перебор ради уже потраченного времени — ошибка невозвратных затрат.

При успехе сохраните точную строку без внешних кавычек, различите user и owner и проверьте её на копии. Затем примените qpdf или редактор для нужного действия. При неудаче формулируйте вывод строго: кандидат не найден в таком-то словаре или диапазоне, а не пароля нет. Такой журнал позволяет следующему этапу не повторять работу и делает восстановление проверяемым.

pdfcrack наиболее полезен там, где пользователь способен превратить воспоминание о пароле в небольшой список или узкое пространство. Его прозрачный терминальный вывод показывает каждую важную стадию — чтение защиты, текущий кандидат, скорость, сохранение и результат. Ограничения столь же ясны: простой движок правил, один поток и отсутствие расшифрования. При правильной постановке задачи эта предсказуемость важнее декоративного интерфейса; при сложном современном пароле она вовремя подсказывает перейти к более мощному средству.