cracking MS Office Password

For real? yes.

Some Background

In case one forgets the password to an important encrypted excel file! No, not protected. ENCRYPTED. There’s is a distinction between “protected” and “encrypted” MS Office files. I am not sure why on earth or what on earth is the precise difference but AFAICT encrypted one just AES and protected is just like write protection.

If you google how to crack excel password you would most likely end up with people trying to show how to unprotect which doesn’t crack any passwords. If you’re lucky enough you’d get to an article by null-byte which is a great resource. Good starting point but you may want to use your GPU to boost up hash rate.

What did I do? BRUTEFORCE but smarter

Wait wait, brute force? isn’t that something that can possibly take a few hundred years to crack passwords? Yep, that’s the one I am talking about. In theory, it can take years to crack a strong password. Something like aTt%wkrMo*k7]W would take almost a millennia for supercomputers. However, something like hithere would take a few minutes on your desktop computer. My assumption here was that the password I was looking for falls into hithere category so I can do a hybrid dictionary brute force.

How?

Use Tools and GPU! (and MPI if nothing works out)

JtR (John The Ripper) https://github.com/openwall/john/

Given that I was on windows (yes, I do have a windows machine for games, don’t judge me, okay?) grab the prebuilt binaries from https://www.openwall.com/john/. Fire up a Git bash . I am assuming you have python installed on your machine and it is in your PATH. DO NOT USE PowerShell or CMD! For reasons not known to men, PowerShell appends some weird bytes when one pipes the output to a file!

Extract password hash from the office file,

cd john-1.9.0-jumbo-1-win64/run

python office2john.py myfile.xlsx > hash.txt

GPU and OpenCL

JtR can use OpenCL to generate hashes, however, its configs don’t run out of the box,

$ ls john-1.9.0-jumbo-1-win64/etc/OpenCL/vendors/
amd.icd  nvidia.icd

$ cat john-1.9.0-jumbo-1-win64/etc/OpenCL/vendors/nvidia.icd
c:\Windows\System32\nvopencl.dll

Typically on new systems the nvopencl.dll is named nvopencl64.dll and it is somewhere in c:\Windows\System32\DriverStore\FileRepository so just copy it c:\Windows\System32\nvopencl.dll or anywhere you fancy and update the nvidia.icd file.

Run the JtR

just make sure you’re in run/kernel/ dir otherwise the OpenCL kernel fails to find header files.

$ cd john-1.9.0-jumbo-1-win64/run/kernel/
$ ../john.exe --format=office-opencl ../hash.txt

One may want to change run/john.conf. I didn’t do it because I got the password by the time I finish researching how to write optimized config.

MPI?

If a single GPU wouldn’t have worked, My next step was to use all of my compute resources to run JtR. This is somewhat described here https://countuponsecurity.com/2015/05/07/step-by-step-clustering-john-the-ripper-on-kali/. However, one wouldn’t need NFS for a non-wordlist attack. OpenMPI does have windows support and it doesn’t seem difficult to build JtR with MPI on Windows.

Conclusion?

For realistic and quick solutions, break things fast and fix one problem at a time.

Categories:

Updated: