Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
bkcrack — Взлом устаревшего шифрования zip с помощью атаки по известному открытому тексту Бихама и Кохера. | Kitploit
Инструменты/GitHubGitHub/kimci86/bkcrack
Взлом паролейИнструменты шифрования/дешифрованияАнализ уязвимостейКриптография
GitHubkimci86/bkcrack

bkcrack

Взлом устаревшего шифрования zip с помощью атаки по известному открытому тексту Бихама и Кохера.

Репозиторий
2.2k18852 месяцев назадПроверено Kitploit

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

bkcrack

CI badge coverage badge release badge license badge GitHub Sponsors badge

Взлом устаревшего шифрования zip с помощью атаки с известным открытым текстом Бихама и Кохера.

Обзор

ZIP-архив может содержать множество записей, содержимое которых может быть сжато и/или зашифровано. В частности, записи могут быть зашифрованы с помощью симметричного алгоритма шифрования на основе пароля, называемого традиционным шифрованием PKWARE, устаревшим шифрованием или ZipCrypto. Этот алгоритм генерирует псевдослучайный поток байтов (ключевой поток), который XOR-ится с содержимым записи (открытым текстом) для получения зашифрованных данных (шифротекста). Состояние генератора, состоящее из трех 32-битных целых чисел, инициализируется с помощью пароля и затем непрерывно обновляется открытым текстом по мере шифрования. Этот алгоритм шифрования уязвим для атак с известным открытым текстом, как показали Эли Бихам и Пол К. Кохер в исследовательской статье A known plaintext attack on the PKZIP stream cipher. При наличии шифротекста и 12 или более байтов соответствующего открытого текста можно восстановить внутреннее состояние генератора ключевого потока. Этого внутреннего состояния достаточно, чтобы полностью расшифровать шифротекст, а также другие записи, зашифрованные тем же паролем. Его также можно использовать для перебора пароля со сложностью nl-6, где n — размер набора символов, а l — длина пароля.

bkcrack — это инструмент командной строки, реализующий эту атаку с известным открытым текстом. Основные возможности:

  • Восстановление внутреннего состояния из шифротекста и открытого текста.
  • Удаление или изменение пароля ZIP-архива с помощью внутреннего состояния.
  • Восстановление исходного пароля из внутреннего состояния.

Установка

Предварительно скомпилированные пакеты

Вы можете получить последний официальный релиз на GitHub.

Предварительно скомпилированные пакеты для Ubuntu, MacOS и Windows доступны для загрузки. Распакуйте загруженный архив туда, куда вам удобно.

В Windows для работы bkcrack необходимы библиотеки времени выполнения Microsoft. Если они еще не установлены в вашей системе, загрузите и установите последний пакет Microsoft Visual C++ Redistributable.

Скомпилировать из исходников

Кроме того, вы можете скомпилировать проект с помощью CMake.

Сначала загрузите исходные файлы или клонируйте git-репозиторий. Затем выполните следующие команды в дереве исходных файлов, чтобы создать установку в папке install.

root@kitploit:~
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install
cmake --build build --config Release
cmake --build build --config Release --target install

Пакеты от сторонних разработчиков

bkcrack доступен в репозиториях пакетов, перечисленных ниже. Эти пакеты предоставляются внешними сопровождающими.

Packaging status

Использование

Список записей

Вы можете просмотреть список имен записей и метаданных в архиве с именем archive.zip следующим образом:

root@kitploit:~
bkcrack -L archive.zip

Записи, использующие шифрование ZipCrypto, уязвимы для атаки с известным открытым текстом.

Восстановление внутренних ключей

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

Загрузка данных из ZIP-архивов

Имея ZIP-архив encrypted.zip с записью cipher в качестве шифротекста и plain.zip с записью plain в качестве известного открытого текста, bkcrack можно запустить следующим образом:

root@kitploit:~
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain

Загрузка данных из файлов

Имея файл cipherfile с шифротекстом (начинающимся с 12 байт, соответствующих заголовку шифрования) и файл plainfile с известным открытым текстом, bkcrack можно запустить следующим образом:

root@kitploit:~
bkcrack -c cipherfile -p plainfile

Смещение

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

root@kitploit:~
bkcrack -c cipherfile -p plainfile -o offset

Разреженный открытый текст

Если вы знаете небольшой непрерывный открытый текст (от 8 до 11 байт), но знаете некоторые байты в некоторых других известных смещениях, вы можете предоставить эту информацию, чтобы достичь требования в 12 известных байт в общей сложности. Для этого используйте флаг -x, за которым следует смещение и байты в шестнадцатеричном формате.

root@kitploit:~
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21

Расшифровка

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

root@kitploit:~
bkcrack -c cipherfile -p plainfile -d decipheredfile

Если ключи известны из предыдущей атаки, можно использовать bkcrack для расшифровки данных:

root@kitploit:~
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile

Декомпрессия

Расшифрованные данные могут быть сжаты в зависимости от того, использовалось ли сжатие при создании zip-файла. Если использовалось сжатие deflate, можно использовать скрипт Python 3, предоставленный в папке tools, для декомпрессии данных.

root@kitploit:~
python3 tools/inflate.py < decipheredfile > decompressedfile

Удаление пароля

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

root@kitploit:~
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -D decrypted.zip

Изменение пароля

Также можно создать новый зашифрованный архив с паролем по вашему выбору:

root@kitploit:~
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip new_password

Вы также можете задать новый пароль через его внутреннее представление.

root@kitploit:~
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 --change-keys unlocked.zip 581da44e 8e40167f 50c009a0

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

Восстановление пароля

Зная внутренние ключи, bkcrack может попытаться найти исходный пароль.

Восстановление пароля перебором

Вы можете искать пароль, используя символы в заданном наборе символов:

root@kitploit:~
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p

Вы можете ограничить поиск паролями заданной длины или диапазона длин:

root@kitploit:~
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 9
bkcrack -k 1ded830c 24454157 7213b8c5 -b ?p -l 8..10

Опция -r <длина> <набор_символов> является сокращением для -l 0..<length> -b <charset>:

root@kitploit:~
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p

Восстановление пароля по маске

Если вы имеете некоторое представление о том, как формируется пароль, вы можете указать маску, чтобы ограничить пространство поиска и сделать восстановление намного быстрее. Это актуально для длинных паролей (например, из 12 и более символов), для которых перебор становится очень затратным по времени.

Например, предположим, вы смутно помните, что ваш пароль состоит из 8 строчных букв, дефиса и 6 десятичных цифр. Вы можете использовать эту команду:

root@kitploit:~
bkcrack -k 1940e266 d3fd3d89 71ce9871 -m ?l?l?l?l?l?l?l?l-?d?d?d?d?d?d

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

Наборы символов

Пространство поиска как для перебора, так и для восстановления пароля по маске определяется наборами символов. Набор символов — это последовательность символов или сокращений для существующих наборов. Предопределенные наборы перечислены ниже.

В дополнение к предопределенным наборам символов вы можете задать пользовательские наборы с помощью опции -s. Пользовательские наборы могут ссылаться на предопределенные наборы или на другие пользовательские наборы. Пользовательские наборы особенно полезны для точного указания пространства поиска при восстановлении по маске.

Например, если вы знаете, что ваш пароль состоит из 10 букв (прописных или строчных) и 5 двоичных цифр, вы можете использовать эту команду:

root@kitploit:~
bkcrack -k b8c377a6 f603160f 1832a78b -m ?x?x?x?x?x?x?x?x?x?x?y?y?y?y?y -s x ?u?l -s y 01

Изучение

Учебное пособие находится в папке example.

Для получения дополнительной информации ознакомьтесь с документацией и исходным кодом.

Вклад

Не стесняйтесь предлагать улучшения или отправлять запросы на слияние на GitHub.

Если вы хотите выразить поддержку проекту, вы можете сделать пожертвование или стать спонсором проекта через GitHub Sponsors.

Лицензия

Этот проект предоставляется на условиях лицензии zlib/png.

Скачать инструмент
СокращениеОписаниеЗначение
?lстрочные буквыabcdefghijklmnopqrstuvwxyz
?uпрописные буквыABCDEFGHIJKLMNOPQRSTUVWXYZ
?dдесятичные цифры0123456789
?sспециальные символы !"#$%&'()*+,-./:;<=>?@[\]^_`{|}~
?aбуквенно-цифровые символыто же, что ?l?u?d
?pпечатные символы ASCIIто же, что ?l?u?d?s
?bвсе байты0x00 .. 0xff