joegen
CUDA-accelerated BIP39 candidate generation for the 9.1 BTC recovery
The generating half of the BIP39 search tooling built for the 9.1 BTC hunt. Testing the theory that a badly copied seed phrase started as valid BIP39 means producing an enormous number of plausible phrases and checking every one: joegen generates, and joerecover checks. The hunt’s full story is in the writeup linked below.
Generating candidates
joegen is a CUDA-accelerated word-permutation engine (the repo is joegen; the binary is word-permutations). Each line of the input describes one slot in the phrase, and the constraint syntax maps directly onto handwriting problems:
[len:5 first:t] # all 5-letter words starting with 't'
[last:est] # words ending in "est"
[has:at !has:e] # contains "at", no letter 'e'
[all] # the entire 2,048-word dictionary
toil town tone # or an explicit shortlist
If a cursive word looks like it starts with a looped ascender, runs about six letters, and ends in something like -est, that’s expressible directly. Constraints combine, exclusions work, and --skip N can resume or divide a job without regenerating the earlier space. It’s a deliberately Unix-shaped tool that writes candidates to standard output, because every existing recovery program wanted its own file format, and in a search like this the candidate list is where most of the intelligence lives.
A friend inherited 24 handwritten words and a dead hardware wallet. Ten of the words are not in the BIP39 dictionary, and the margin says email.
read the writeup →