ZIP File Password Recovery
Encrypted ZIP Removal
Removal of a password from an encrypted zip file can be easy or hard depending on the complexity of the password. Using a tool such as John the Ripper you can break out the password by matching the computed hash at a rate of millions of attempts per second. So a strong password should be used to ensure security of the file.
Recovery of the password can be achieved by retrieving the hash from the document and matching the hash against calculated hashes of known strings. This is a similar methodology to that used in cracking other hashes such as MD5 password recovery, SHA1 password recovery or even Microsoft Office document password recovery (Word doc / Excel xls).
The standard format for an encrypted zip file uses the ZIP2.0 format. This is not very secure as shown in the chart below and can be cracked using standard tools. Another method is the AES encryption first introduced by WinZIP and available in some software such as WinZIP and 7zip. The AES encrypted zip archive is much more difficult to crack open as the complexity of the computation is simply more difficult - making the cracking time significantly longer.
Try our ZIP password recovery tool here, to attempt to crack the password of an encrypted zip file.
Benchmark ZIP File Cracking (i5 CPU vs Nvidia GTX1080)
Using Hashcat Password Tool or John the Ripper to crack the zip file is the best bet. These tools can use high speed graphics processing chips (GPU) to crack the hashes faster than your even the fastest of CPUs. Even using cutting edge GPUs these passwords are difficult to recover as the algorithm is one of the strongest used in when compared to other standard document or file encryption algorithms.
In this chart it is clear to see the simplicity of the legacy ZIP 2.0 standard when compared to the AES encrypted zip file. The slower attack time for the 7zip encrypted AES file is due to the use of multiple iterations of the AES256 calculation in the 7z format.
Cracking ZIP file with Password
John the Ripper (a password recovery program) comes with a utility called zip2john
that is used to extract the encrypted hash from the file.
1. Extract the Hash from the zip
Using zip2john
a utility packaged with John the Ripper we can extract the zip
file hash. With the hash we can use either John the Ripper or Hashcat to attack the hash to find the password.
user@host:~$ zip2john test.zip
ver 1.0 efh 5455 efh 7875 test.zip/test.txt PKZIP Encr: 2b chk, TS_chk, cmplen=17, decmplen=5, crc=3BB935C6
test.zip/test.txt:$pkzip2$1*2*2*0*11*5*3bb935c6*0*42*0*11*3bb9*7ea9*f0728c57843209fbe14dcf4f7f46661068*$/pkzip2$:test.txt:test.zip::test.zip
Depending on the zip
compression program used the strength of the cipher and format of the zip2john
output may be different to what you see in the example above.
2. John the Ripper and ZIP Files
This hash is the key to the file. When attacking the file in an effort to “crack” the password you use this hash to try and find a matching known string.
By attacking the hash it saves you having to type passwords into zip file password prompt thousands of times!
john
will detect the format of the hash and start checking for passwords using a simple command line as shown below.
user@host:~$ zip2john test.zip > test.hash
user@host:~$ john test.hash
Using default input encoding: UTF-8
Loaded 1 password hash (PKZIP [32/64])
Will run 4 OpenMP threads
Proceeding with single, rules:Single
Press 'q' or Ctrl-C to abort, almost any other key for status
Warning: Only 3 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 7 candidates buffered for the current salt, minimum 8 needed for performance.
Warning: Only 3 candidates buffered for the current salt, minimum 8 needed for performance.
Almost done: Processing the remaining buffered candidate passwords, if any.
Warning: Only 5 candidates buffered for the current salt, minimum 8 needed for performance.
Proceeding with wordlist:/snap/john-the-ripper/current/run/password.lst, rules:Wordlist
password (test.zip/test.txt)
1g 0:00:00:00 DONE 2/3 (2022-01-14 11:08) 20.00g/s 606380p/s 606380c/s 606380C/s 123456..ferrises
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Using a custom wordlist with John is a simple command line argument.
user@host:~$ john test.hash -wordlist=rockyou.txt
3. Hashcat and ZIP Files
As with the john
example above we first need to extract the hash from the file. Use zip2john
the same as above. Then redirect to a file and edit the file to remove the first characters up to to first $. The file should like the example below.
$pkzip2$1*2*2*0*14*8*db5c50fc*0*46*0*14*db5c*59b2*1d8f608cc212d947bee8bdf5eefc17d78392af66*$/pkzip2$:test-txt.txt:test-zip-weak.zip::test-zip-weak.zip
Now we will use hashcat
to try and guess the password for this hash. There are a number of formats for zip2 / pkzip etc. Depending on the program used to encrypt you may need to try different hashcat modes.
hashcat --help | grep -i zip
will show the modes for the different formats. Note that you should be using hashcat 6.1+
or a more recent version to ensure you are maximising your password cracking capability.
In the example test.john
is the file that contains the zip file hash extracted using the zip2john
utility.
(vagrant㉿kali)$ hashcat -m 17210 test.john rockyou.txt
hashcat (v6.1.1) starting...
OpenCL API (OpenCL 1.2 pocl 1.6, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform #1 [The pocl project]
==========================================================================================================================
* Device #1: pthread-Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz, 2884/2948 MB (1024 MB allocatable), 2MCU
Minimum password length supported by kernel: 0
Maximum password length supported by kernel: 256
Hashes: 1 digests; 1 unique digests, 1 unique salts
Bitmaps: 16 bits, 65536 entries, 0x0000ffff mask, 262144 bytes, 5/13 rotates
Rules: 1
Applicable optimizers applied:
* Not-Iterated
* Single-Hash
* Single-Salt
Watchdog: Hardware monitoring interface not found on your system.
Watchdog: Temperature abort trigger disabled.
Host memory required for this attack: 64 MB
[s]tatus [p]ause [b]ypass [c]heckpoint [q]uit => Dictionary cache building roDictionary cache built:
* Filename..: rockyou.txt
* Passwords.: 14344392
* Bytes.....: 139921507
* Keyspace..: 14344385
* Runtime...: 1 sec
$pkzip2$1*2*2*0*14*8*db5c50fc*0*46*0*14*db5c*59b2*1d8f608cc212d947bee8bdf5eefc17d78392af66*$/pkzip2$:password
Session..........: hashcat
Status...........: Cracked
Hash.Name........: PKZIP (Uncompressed)
Hash.Target......: $pkzip2$1*2*2*0*14*8*db5c50fc*0*46*0*14*db5c*59b2*1...kzip2$
Time.Started.....: Wed Feb 9 21:00:25 2022 (0 secs)
Time.Estimated...: Wed Feb 9 21:00:25 2022 (0 secs)
Guess.Base.......: File (rockyou.txt)
Guess.Queue......: 1/1 (100.00%)
Speed.#1.........: 33625 H/s (0.16ms) @ Accel:1024 Loops:1 Thr:1 Vec:8
Recovered........: 1/1 (100.00%) Digests
Progress.........: 2048/14344385 (0.01%)
Rejected.........: 0/2048 (0.00%)
Restore.Point....: 0/14344385 (0.00%)
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidates.#1....: 123456 -> lovers1
Started: Wed Feb 9 21:00:01 2022
Stopped: Wed Feb 9 21:00:27 2022
The password list used is the rockyou.txt
dictionary. You can see from the output we achieved about 33000 hashes per second using an i7-6700 CPU. Not great, we would definitely want to use a GPU for a serious password attack.
Password Protect Files on Windows and Linux
Password protect ZIP file in Windows
Windows comes with a builtin ability to extract and compress files using the ZIP format. These will be accessible using other third part ZIP extract programs on Linux, Windows or Mac based systems. However, there is no option to add a password to the zip file on Windows using the default functionality. You can encrypt the file using builtin encryption tools but this is not the same as the standard ZIP file password protection. To do this we will need to use a third party program such as WinZIP, 7zip or WinRAR.Password Protect ZIP File with Ubuntu using Command Line
Using the standard zip
program in Ubuntu Linux we can add a password to a newly created zip file very easily. If the command line zip is not installed use the apt install
command and then run the following. You will be prompted for the password.
user@test:~/$ sudo apt install zip
user@test:~/$ zip -e myzip.zip myfile.txt
Alternatively there is an open source version of 7zip that can be installed from the Ubuntu package manager.
user@test:~/$ sudo apt install p7zip
user@test:~/$ 7za a -tzip -p -mem=AES256 myzip.zip myfile.txt