Bitcoin Forum
September 14, 2025, 05:31:33 PM *
News: Latest Bitcoin Core release: 29.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Question about old BIP39 seed derivation circa 2014  (Read 92 times)
desperateledgerguy (OP)
Newbie
*
Offline Offline

Activity: 1
Merit: 0


View Profile
August 14, 2025, 04:13:43 AM
 #1

This is gonna be approximately equal parts request for help and a document to get my thoughts organized, so strap in and take a ride on the struggle bus with me!

A friend of a friend contacted me a few weeks ago with a BTC recovery job he was hoping I could help with. On the phone, he described some issues accessing a ledger hardware wallet with nearly a million dollars of bitcoin on it, and offered me 10% if I could recover it for him. I asked if he by any chance still had his recovery key, and he said yeah he just found it after it was lost for several years, but that it wasn't working. Thinking I was about to make the quickest 100k of my life I of course agreed and we made plans to meet up.

I'm gonna TLDR this so I can get down to brass tacks more quickly:

The device in question is a Ledger Nano S, MCU 1.0. This is only important academically at this point because it has wiped itself after the wrong PIN was entered too many times.

The ledger was given to him with a note at the top that says 9.1 BTC - $1397 (supposedly) around 2013 or 2014 (this is weird to me for one, because IIRC the ledger nano S wasn't released until 2016, and I don't think there was any point in time post 2015 that 9.1 BTC was less than $2k) in partial payment for some construction work he did by an old german guy who passed away in 2018.

The recovery key is handwritten, in cursive, by someone who learned to write cursive in probably the 1950s. It is EXTREMELY hard to read. There are crossouts, weird cursive flourishes, possible misspellings, etc.

While many of the 24 words seem to have exact matches in the BIP39 dictionary, several of them do not. There are at least 10 that I am iffy on, and 4 that I am EXTREMELY iffy on.

He has no idea what the receiving address the BTC is on might be.

Still, I wouldn't think this would present TOO much of a problem, as long as I can narrow down the search space we should be able to brute force a word or two easily, and MANY of them as long as we can narrow down the possibilities to fewer than the 2048 possibilities.

I've been working away at this for two weeks now, have written a suite of extremely performant wallet recovery software (which I will get to in a bit and yes I do intend to open source once I'm done with this attempt), and have tried several trillion seed combinations, and I am starting to wonder if there's either some quirk of the wallet derivation process circa 2014 that I have missed, or if the coins aren't there.

Initially I tried seed recovery component of btcrecover. While it has some amazing features (such as the addressdb support for when you don't know the address you are hoping to derive) but ended up frustrated with the speed and most of all the seed selection / wordlist expansion portion.

So, I rewrote it in rust as a modular program that can be plugged together with pipes. It takes a tokenfile that is organized with one word of your seed phrase per line. If you want to check multiple words in a particular position you can put both of them separated by a space and it will test every permutation of those words. It also supports simple several rule-based blocks, like:
Code:
  [all] : All BIP39 dictionary words
  [len:4] : All 4-character words
  [!len:4] : All words NOT 4 characters
  [len:4-6] : All 4-6 character words (shortest to longest)
  [len:6-4] : All 4-6 character words (longest to shortest)
  [len:4,6] : All 4 and 6 character words
  [first:b] : All words starting with 'b'
  [!first:b] : All words NOT starting with 'b'
  [last:y] : All words ending with 'y'
  [!last:y] : All words NOT ending with 'y'
  [last:at] : All words ending with 'at'
  [!last:at] : All words NOT ending with 'at'
  [has:qt] : All words containing 'qt'
  [!has:t] : All words not containing 't'
  [len:7 first:b !last:y] : Complex combinations

You can pipe this into skipper which skips any sequence of words piped into its input that could have been generated by any of the tokenfiles int the skip folder. Then you pipe that into the recovery program which supports the same addressdb files as btcrecover.

It's actually EXTREMELY fast. I get around 700k phrases per second on my 10 core i9 desktop. It checks the first address only of the three standard BTC derivation paths:
Code:
legacy:  DerivationPath::from_str("m/44'/0'/0'/0")?,
segwit_compat:  DerivationPath::from_str("m/49'/0'/0'/0")?,
native_segwit:  DerivationPath::from_str("m/84'/0'/0'/0")?,

After running this for a few days I decided that I would need more CPU power and a way to coordinate the work.

Soooo, I wrote an orchistration server very similar to the old BTC mining pools and a small glue program called worker that you can connect to your server and it will grab a configurable block of work and then report the progress and/or success.

Currently I have around 50 spot instances on AWS doing a combined 25M phrases per second, but I'm starting to lose hope.

Anyway, this got pretty rambly. Here's what I am wondering:

The actual physical wallet has the BTC, LTC, Ethereum and Ripple apps installed on it. Is this the set that comes preinstalled or is it possible that the dude installed some of them (which might indicate that the coins are actually on a different chain).

  • Did ledger ever use a different derivation path for wallet derivation? This is from the pre-ledger live era.
  • Does anyone remember if the old chrome extension or whatever presented a user with an actual list of derived addresses or just the first one (maybe I should be checking the first 10 or 20 addresses)
  • The writing at the top (9.1BTC - $1397) has me wondering if he possibly created the wallet several years before the ledger was created and simply restored the seed onto it. If this is the case, might whatever he used have used a different derivation path? Does anyone have any info on what other wallet programs that did BIP39 phrases were out at that time?

Thanks for coming to my TED talk. I've talked the dude up to coughing up 30% of the wallet at this point, cause it's proving to be a pain in the ass. And yes, I will open source the software as soon as I'm done (or as soon as I am satisfied that I haven't accidentally checked any of my tokenfiles into git at any point in the development process. I would hate to find the wallet only to discover that someone found it before me and swept it clean!)
Pmalek
Legendary
*
Offline Offline

Activity: 3248
Merit: 8553



View Profile
August 19, 2025, 07:24:19 AM
 #2

Does your friend remember ever seeing those bitcoins on the blockchain, a blockchain explorer, or some software? Did he every check that he owned them? He couldn't have received a Nano S in 2013/2014 because they weren't around then. He must know how he initially got his coins and if it was him that moved them into the Nano S in 2016 or at a later date.

The Nano S has always had a small internal memory. There is no way now to install the BTC, LTC, ETH and XRP apps on it at the same time. Perhaps it was possible many years ago when these apps were smaller. Btw, how do you know that those apps are installed on the Ledger? You said it had reset itself due to wrong PIN entries.

▄▄███████▄▄
▄██████████████▄
▄██████████████████▄
▄████▀▀▀▀███▀▀▀▀█████▄
▄█████████████▄█▀████▄
███████████▄███████████
██████████▄█▀███████████
██████████▀████████████
▀█████▄█▀█████████████▀
▀████▄▄▄▄███▄▄▄▄████▀
▀██████████████████▀
▀███████████████▀
▀▀███████▀▀
.
 MΞTAWIN  THE FIRST WEB3 CASINO   
.
.. PLAY NOW ..
pooya87
Legendary
*
Offline Offline

Activity: 3934
Merit: 11920



View Profile
August 20, 2025, 03:01:47 AM
 #3

SegWit was introduced in 2017 so there is no reason to check for those two derivation paths for SegWit addresses when recovering coins that are supposedly received 3-4 years before that.

Additionally based on what you said I think it is best you change your address database from addresses with balance to addresses ever used (including empty ones) so that you can find the correct combination of words easier considering the address may have been emptied already by the one who sold this hardware wallet to your friend...
After finding the correct mnemonic, you can just recover all the addresses and see if any other one has any balance.

Pmalek
Legendary
*
Offline Offline

Activity: 3248
Merit: 8553



View Profile
August 20, 2025, 06:53:37 AM
 #4

SegWit was introduced in 2017 so there is no reason to check for those two derivation paths for SegWit addresses when recovering coins that are supposedly received 3-4 years before that.
I am not sure how reliable that information he received from his friend (the owner of the Ledger) really is. The timeline is already messed up with the claim that he received bitcoin and a Ledger Nano S one or two years before it was even released. It's possible they got it all wrong and he got his coins much later. Or there is something else iffy with this story. 

▄▄███████▄▄
▄██████████████▄
▄██████████████████▄
▄████▀▀▀▀███▀▀▀▀█████▄
▄█████████████▄█▀████▄
███████████▄███████████
██████████▄█▀███████████
██████████▀████████████
▀█████▄█▀█████████████▀
▀████▄▄▄▄███▄▄▄▄████▀
▀██████████████████▀
▀███████████████▀
▀▀███████▀▀
.
 MΞTAWIN  THE FIRST WEB3 CASINO   
.
.. PLAY NOW ..
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!