Skip to content

Zip Plaintext Attack

Zip Plaintext Attack

ZipCrypto Attack

Setup BKCrack:

git clone https://github.com/kimci86/bkcrack/
cd bkcrack
cmake .
make

View Example Zip:

>>> 7z l example/secrets.zip

7-Zip [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.04 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs x64)

Scanning the drive for archives:
1 file, 56263 bytes (55 KiB)

Listing archive: example/secrets.zip

--
Path = example/secrets.zip
Type = zip
Physical Size = 56263

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2012-08-14 08:51:04 .....        54799        54700  advice.jpg
2018-12-20 08:33:50 .....         1265         1277  spiral.svg
------------------- ----- ------------ ------------  ------------------------
2018-12-20 08:33:50              56064        55977  2 files
>>> 7z l -slt example/secrets.zip

7-Zip [64] 17.04 : Copyright (c) 1999-2021 Igor Pavlov : 2017-08-28
p7zip Version 17.04 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,16 CPUs x64)

Scanning the drive for archives:
1 file, 56263 bytes (55 KiB)

Listing archive: example/secrets.zip

--
Path = example/secrets.zip
Type = zip
Physical Size = 56263

----------
Path = advice.jpg
Folder = -
Size = 54799
Packed Size = 54700
Modified = 2012-08-14 08:51:04
Created = 2021-05-22 11:39:56
Accessed = 2021-05-13 17:12:33
Attributes = _ -rw-rw-r--
Encrypted = +
Comment =
CRC = 7CA9F10A
Method = ZipCrypto Deflate
Characteristics = NTFS : Encrypt
Host OS = Unix
Version = 20
Volume Index = 0
Offset = 0

Path = spiral.svg
Folder = -
Size = 1265
Packed Size = 1277
Modified = 2018-12-20 08:33:50
Created = 2021-05-22 11:39:56
Accessed = 2021-05-22 11:39:57
Attributes = _ -rw-rw-r--
Encrypted = +
Comment =
CRC = A99F1D0D
Method = ZipCrypto Store
Characteristics = NTFS : Encrypt
Host OS = Unix
Version = 20
Volume Index = 0
Offset = 54740

Since the svg images start with <?xml version="1.0" this is known plaintext

Get the Encryption Key:

>>> echo -n '<?xml version="1.0" ' > plain.txt
>>> ./src/bkcrack -C example/secrets.zip -c spiral.svg -p plain.txt
bkcrack 1.5.0 - 2023-11-03
[12:42:47] Z reduction using 13 bytes of known plaintext
100.0 % (13 / 13)
[12:42:48] Attack on 542303 Z values at index 6
Keys: c4490e28 b414a23d 91404b31
33.9 % (183770 / 542303)
[12:47:43] Keys
c4490e28 b414a23d 91404b31

Decrypt the rest of the Zip:

>>> ./src/bkcrack -C example/secrets.zip -c spiral.svg -k c4490e28 b414a23d 91404b31 -d spiral_deciphered.svg
>>> ./src/bkcrack -C example/secrets.zip -c advice.jpg -k c4490e28 b414a23d 91404b31 -d advice_deciphered
bkcrack 1.5.0 - 2023-11-03
[12:48:37] Writing deciphered data advice_deciphered (maybe compressed)
Wrote deciphered data.
generalzero@dev:bkcrack [master] 16A
>>> file advice_deciphered
advice_deciphered: data
generalzero@dev:bkcrack [master] 16A
>>> python3 tools/inflate.py < advice_deciphered > advice.out
generalzero@dev:bkcrack [master] 17A
>>> file advice.out
advice.out: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 250x250, components 3

Get the Password from the Key:

>>> ./src/bkcrack -k c4490e28 b414a23d 91404b31 --bruteforce "?p" --length 0..12
bkcrack 1.5.0 - 2023-11-03
[12:50:14] Recovering password
length 0-6...
length 7...
length 8...
length 9...
length 10...
length 11...
length 12...
Password: W4sF0rgotten
58.1 % (5246 / 9025)
[12:51:59] Password
as bytes: 57 34 73 46 30 72 67 6f 74 74 65 6e
as text: W4sF0rgotten