wallet.dat Recovery & Carving Suite -- Scan, analyze, and recover encrypted Bitcoin Core wallet files.
╦ ╦╔═╗╦ ╦ ╔═╗╔╦╗╔═╗╔═╗╦═╗╔═╗╔═╗
║║║╠═╣║ ║ ║╣ ║ ╠╣ ║ ║╠╦╝║ ╦║╣
╚╩╝╩ ╩╩═╝╩═╝╚═╝ ╩ ╚ ╚═╝╩╚═╚═╝╚═╝
- Wallet Scanner -- BDB page parsing, DER pattern scan, master key & encrypted key extraction, HD seed detection, deep forensic carving
- Password Cracker -- Smart composite attack, dictionary, wildcard patterns, typo simulation, token combiner, multi-dictionary, l33t mutations, number sequences
- Multiprocessing -- Parallel cracking across all CPU cores (4-8x speedup via
multiprocessing.Pool) - OpenSSL Acceleration -- EVP_BytesToKey with SHA-512 via ctypes (~200 pwd/sec single-core)
- VanityAll Key Viewer -- Full key/address format display: private key hex, WIF, compressed/uncompressed public keys, P2PKH, P2SH-P2WPKH, Bech32 addresses
- pywallet Integration -- Native BDB parsing via bsddb3, EC key validation, cross-validation decryption
- Hashcat Export -- Export wallet hash in mode 11300 for GPU cracking
- Hex Viewer -- Raw wallet.dat hex dump with navigation
pip install -r requirements.txt
python3 run.pyOpens automatically at http://127.0.0.1:8742
Backend: FastAPI (Python) serving REST API + static frontend on port 8742. Frontend: Vanilla JS single-page app, no build step. State: In-memory session storage keyed by scan_id (UUID).
- BDB page parsing
- Key extraction from BDB pairs
- DER pattern scan
- Master key + encrypted key raw scan
- HD seeds / xprv detection
- Public key scan (deep/forensic)
- Deep forensic carving (forensic mode)
- Address generation
| Mode | Description |
|---|---|
smart |
All-in-one composite attack (common passwords, mutations, typos, numbers) |
dictionary |
Wordlist-based with optional rule mutations |
wildcard |
Pattern expansion (%d, %a, %A, %s, %[chars], ranges) |
typos |
Capslock, keyboard slip, l33t, swap, delete, repeat |
tokens |
Positional token combiner |
multidict |
Multi-dictionary cross-product |
numbers |
Sequential number patterns (0 to 999999) |
Uses EVP_BytesToKey with SHA-512 (not PBKDF2):
d = SHA512(password || salt)
for i in range(iterations - 1): d = SHA512(d)
key = d[:32], iv = d[32:48]
derivation_method=0 in mkey record. Confirmed against BTCRecover, pywallet, bitcoin/src/wallet/crypter.cpp.
# macOS
brew install berkeley-db@5
BERKELEYDB_DIR=$(brew --prefix berkeley-db@5) pip install bsddb3MIT