ZIP-архивы могут содержать множество записей, содержимое которых может быть сжато или зашифровано с использованием алгоритма симметричного шифрования на основе пароля (так называемого традиционного шифрования PKWARE, устаревшего шифрования или ZipCrypto). Алгоритм генерирует псевдослучайный поток байтов (ключевой поток), который подвергается операции XOR с содержимым записи (открытый текст) для получения зашифрованных данных (зашифрованный текст). Состояние генератора состоит из трех 32-битных целых чисел, инициализированных паролем, а затем постоянно обновляемых открытым текстом по мере шифрования. Эли Бихам и Пол К. Кочер в исследовательской работе «Атаки с использованием известного открытого текста на поточные шифры PKZIP» показали, что этот алгоритм шифрования уязвим для атак с использованием известного открытого текста. Учитывая зашифрованный текст и соответствующий открытый текст длиной 12 или более байт, можно восстановить внутреннее состояние генератора ключевого потока. Этого внутреннего состояния достаточно для полной расшифровки зашифрованного текста, а также других записей, зашифрованных тем же паролем. Его также можно использовать для шифрования паролей сложности nl-6, где n — размер набора символов, а l — длина пароля.
bkcrack — это традиционный инструмент для взлома шифрования zip-файлов, основанный на известных атаках с использованием открытого текста. Этот инструмент реализует свои функции на основе известных атак с открытым текстом Бихама и Кохера. Этот инструмент представляет собой инструмент командной строки и реализует следующие функции:
1. Восстановить внутреннее состояние по зашифрованному и открытому тексту; 2. Используйте внутреннее состояние, чтобы изменить пароль ZIP-файла; 3. Восстановить исходный пароль из внутреннего состояния;
Мы можем напрямую посетить страницу «Релизы» проекта, чтобы загрузить последнюю официально выпущенную предварительно скомпилированную версию bkcrack.
Проект предоставляет предварительный скомпилированный пакет для операционных систем Ubuntu, macOS и Windows. Мы можем выбрать необходимую версию, чтобы загрузить и разархивировать ее.
На платформе Windows нам также необходимо установить и настроить библиотеку времени выполнения Microsoft. Если она не установлена, загрузите последнюю версию распространяемого пакета Microsoft Visual C++.
Кроме того, мы также можем использовать следующую команду для локального клонирования исходного кода проекта:
git clone https://github.com/kimci86/bkcrack.git
Затем используйте CMake для ручной сборки кода проекта.
Затем выполнение следующей команды создаст установочную версию в каталоге установки проекта:
cmake -S . -B build -DCMAKE_INSTALL_PREFIX=install
cmake --build build --config Release
cmake --build build --config Release --target install
Мы можем просмотреть все имена записей и метаданные в документе с именем archive.zip с помощью следующей команды:
bkcrack -L archive.zip
Записи, зашифрованные с помощью ZipCrypto, не защищены от известных атак с использованием открытого текста.
Для этой операции требуется не менее 12 байт известного открытого текста. Чем больше соседних известных открытых текстов, тем выше скорость взлома.
Предполагая, что ZIP-файл называется зашифрованным.zip, шифром записи является зашифрованный текст, а файл Plain.zip содержит запись в виде обычного открытого текста, вы можете запустить следующую команду:
bkcrack -C encrypted.zip -c cipher -P plain.zip -p plain
Предполагая, что файл cipherfile содержит зашифрованный текст, а обычный файл содержит известный открытый текст, вы можете запустить следующую команду:
bkcrack -c cipherfile -p plainfile
Если открытый текст соответствует части, отличной от начала зашифрованного текста,Вы можете указать компенсацию. Если открытый текст содержит часть зашифрованного заголовка,тогда значение может быть отрицательным:
bkcrack -c cipherfile -p plainfile -o offset
Если вы знаете очень мало последовательных открытых текстов (от 8 до 11 байт),Но знайте некоторые другие известные байты компенсации,Эта информация может быть предоставлена для достижения в общей сложности 12 известных байтов. с этой целью,Пожалуйста, используйте параметр -x,за которым следует компенсировать и шестнадцатеричный байт:
bkcrack -c cipherfile -p plainfile -x 25 4b4f -x 30 21
Если bkcrack собран с включенным параллельным режимом, количество используемых потоков можно установить через переменную среды OMP_NUM_threads.
Если атака успешна, вы можете использовать следующую команду, чтобы сохранить расшифрованные данные и связанный с ними зашифрованный текст:
bkcrack -c cipherfile -p plainfile -d decipheredfile
(Проведите пальцем вправо, чтобы увидеть больше)
Если вы получили ключ от предыдущей атаки, вы можете продолжить расшифровку данных, используя следующую команду:
bkcrack -c cipherfile -k 12345678 23456789 34567890 -d decipheredfile
python3 tools/inflate.py < decipheredfile > decompressedfile
bkcrack -C encrypted.zip -k 12345678 23456789 34567890 -U unlocked.zip password
Учитывая внутренний ключ, bkcrack также может попытаться выяснить исходный пароль:
bkcrack -k 1ded830c 24454157 7213b8c5 -r 10 ?p
Мы также можем указать минимальную длину пароля:
bkcrack -k 18f285c6 881f2169 b35d661d -r 11..13 ?p
Разработка и выпуск этого проекта соответствуют лицензионному соглашению с открытым исходным кодом Zlib.
bkcrack:
https://github.com/kimci86/bkcrack
https://cmake.org/