Sitemap

PicoCTF: Bitlocker-2

4 min readNov 22, 2025

--

This short write-up outlines two approaches used to solve the PicoCTF challenge Bitlocker-2. The objective is to bypass the password protection on a BitLocker-encrypted drive and access its contents.

You can read more about BitLocker here.

Task description

Jacky has learnt about the importance of strong passwords and made sure to encrypt the BitLocker drive with a very long and complex password. We managed to capture the RAM while this drive was opened however. See if you can break through the encryption!

Press enter or click to view image in full size

Approach 1: The flag in cleartext

The first approach is based on the fact that we have a RAM dump, and therefore the flag will probably be available in plaintext. This approach is most likely not the intended approach, but something to try to potentially reap some low-hanging fruit.

First we need to extract the RAM dump with gunzip memdump.mem.gz. Then we can use the strings command to print all plaintext strings in the file, combined with grep to only see strings that follow the format of the flag: strings memdump.mem | grep “picoCTF”.

Press enter or click to view image in full size

That was easy! The flag is picoCTF{B1tl0ck3r_dr1v3_d3crypt3d_9029ae5b}.

Approach 2: Using Volatility

In the second approach, we use Volatility. Before getting started, I recommend using Volatility 2 with the this plugin for BitLocker.

Identifying the profile

First, we need to identify the profile for the operating system. This can be done with the command python2 vol.py -f </path/to/memdump.mem> imageinfo. This identified the profile as “Win10x64_19041”.

Press enter or click to view image in full size

Extracting the FVEKs

Since the memory capture was done while the machine was running, the FVEK (Full Volume Encryption Key) should be stored in plaintext in the memory dump. To extract the FVEK, we need to use the aforementioned plugin.

Get ColdByte’s stories in your inbox

Join Medium for free to get updates from this writer.

Run the following command to extract the FVEK: python2 vol.py --plugins </path/to/installed/plugin> -f </path/to/memdump.mem> --profile=Win10x64_19041 bitlocker </path/to/putput/folder>.

Press enter or click to view image in full size

This will result in many .fvek files being saved in the specified output folder. As I understand it, it is impossible to know which one is correct. Therefore, we have to test them until we get one without an error message.

Finding the correct FVEK

To find which key is correct, we can use the following command: sudo dislocker -V </path/to/bitlocker-2.dd> -k </path/to/.fvek-file> -- /mnt/dislocker. Then we use hexdump to check if it contains a NTFS signature: sudo hexdump -C /mnt/dislocker/dislocker-file | head. If not, sudo umount /mnt/dislocker 2>/dev/null and repeat. If it contains the NTFS signature, this is the correct key!

Eventually I got to 0x8087865bead0-Dislocker.fvek. When I checked the hexdump for this FVEK file, I saw the NTFS signature:

Press enter or click to view image in full size

This means that 0x8087865bead0-Dislocker.fvek is the correct key.

Mounting and finding the flag

First, we create the folder in which the decrypted content will be stored with sudo mkdir -p /mnt/decrypted. The next step now is just to mount and retrieve the flag: sudo mount -t ntfs-3g /mnt/dislocker/dislocker-file /mnt/decrypted.

Press enter or click to view image in full size

After mounting, we can simply run cd /mnt/decrypted and we will be able to retrieve the flag:

The flag is: picoCTF{B1tl0ck3r_dr1v3_d3crypt3d_9029ae5b}

Clean-up

It’s always smart to clean-up after working with potentially malicious files. First, move out of the /mnt/ directory, then run the following commands:

  1. sudo umount /mnt/decrypted
  2. sudo umount /mnt/dislocker
  3. sudo rmdir /mnt/decrypted
  4. sudo rmdir /mnt/dislocker

That’s it! Thanks for reading!

--

--

ColdByte
ColdByte

Written by ColdByte

Student of cyber security. Writing to learn.