Case File №214 — Hacker Holidays, Day 14 Management Wants a Word
A laptop left behind after an early checkout. A guest named Vera. A KAPE triage image, a browser that remembers more than it should, and a 100 MB file called backup that isn't a backup at all. This is the full trail — including the dead ends.
What we were handed
Housekeeping found a laptop after an early checkout, registered to a guest named Vera. IT ran a full KAPE triage before wiping the machine for the next guest. The brief: hunt down the artifacts scattered across the disk, follow them to a password Vera never meant to leave behind, and use it to open something she was keeping very quiet.
An in-thread hint from @0xMia flagged two things worth chasing: that "a browser will remember things you never told anyone else," and that a hidden file doesn't always need a password cracker — sometimes it just needs a good memory. A stray detail — the number 1.26.29 — was dropped with no explanation.
The trail, wrong turns included
The clean version of this solve is four steps long. The real version has a couple of hours of me arguing with AES-XTS in the middle. Both are below.
Lead
The autofill entry
Web Data → autofill held exactly one row: field name username, value VeraSecretVault. Looked exactly like the "browser remembers what it shouldn't" clue — a password typed into a field the site hadn't marked as sensitive.
Lead
A site to pin it to
Preferences and DIPS both placed Vera on http://bytelotus.thm:8080, with a form on that page marked as filled. Now there was a candidate password and a place it plausibly belonged.
Lead
Documents/backup is a VeraCrypt volume
100 MB, byte-value entropy of 7.9999/8 — indistinguishable from random. No legible header. Every sign of a VeraCrypt (or TrueCrypt) container rather than an actual backup file.
Dead end
Hand-rolled PBKDF2 + AES-XTS header decryption
Implemented the VeraCrypt header spec myself — PBKDF2-HMAC over the 64-byte salt, AES-XTS decrypt of the 448-byte encrypted header, checked for the VERA magic. Tried VeraSecretVault and variants against SHA-512 / SHA-256 / RIPEMD-160 / BLAKE2s at their default iteration counts. Nothing.
for pw in candidates:
for hashname, iters in [("sha512",500000), ("sha256",500000),
("ripemd160",655331), ("blake2s",500000)]:
dk = pbkdf2(pw, salt, iters, 64, hashname)
dec = xts_decrypt(dk, sector=0, enc_header)
# dec[:4] != b'VERA' — every single timeDead end
Reading 1.26.29 as a PIM value
Guessed the stray "version number" was really a Personal Iterations Multiplier in disguise — stripped the dots (12629), ran VeraCrypt's PIM formula (15000 + PIM×1000 ≈ 12.6M iterations), retried the password list. Still nothing — and each attempt now took ~15 seconds instead of milliseconds.
Turning point
The math was fine. My code wasn't.
Installed hashcat to sanity-check the approach, and fed my own decryptor hashcat's published example hash with its known-correct password (hashcat). It failed. That proved the bug was in my hand-rolled XTS implementation, not in the password guesses — the whole manual-crypto branch of the investigation had been unreliable from the start.
hashcat -m 13721 -a 0 example_header.bin wordlist.txt example_header.bin:hashcat Status: Cracked # my own decrypt(salt, header, "hashcat") → garbage. Verdict: trust the tool, not the script.
Lead
SAM + SYSTEM → minivera
The bootkey from SYSTEM unlocks the password hashes in SAM. Cracking Vera's hash surfaced her actual Windows account password: minivera.
Lead
minivera → DPAPI → Chrome's real vault
That password unlocks the DPAPI master key tied to Vera's profile SID in AppData/Roaming/Microsoft/Protect/. That master key decrypts Chrome's actual saved-credential store — not the autofill red herring — for bytelotus.thm:8080. The real vault password was there all along: Wh4t1sV3raD0inG0nTh1sH0st.
Lead
1.26.29 was never a code
It's just the VeraCrypt release version — confirmed against VeraCrypt's own downloads page, which lists veracrypt-console-1.26.29-* builds verbatim. Flavor text, not a cipher. It only pointed at which tool to use.
Lead
Mount, browse, find the invoice
Documents/backup mounts cleanly with Wh4t1sV3raD0inG0nTh1sH0st. Inside: a FAT32 filesystem containing secret_financial_documents/important_invoice_byte_lotus.pdf. The flag was embedded in the invoice image itself.
What each clue actually meant
username = VeraSecretVault autofill entryThe flag
Extracted from important_invoice_byte_lotus.pdf inside the mounted volume.
Solve path, condensed
- Crack Vera's SAM hash (with the SYSTEM bootkey) → local password
minivera. - Decrypt the DPAPI master key for her profile using that password.
- Open Chrome's real saved-credential store → vault password for
bytelotus.thm:8080:Wh4t1sV3raD0inG0nTh1sH0st. - Mount
Documents/backupas a VeraCrypt volume with that password. - Read
secret_financial_documents/important_invoice_byte_lotus.pdffor the flag.