[Metamask] Walletを紛失したと思ったらパソコンのバックアップデータから復元できた話

[Metamask] Walletを紛失したと思ったらパソコンのバックアップデータから復元できた話

Slug
metamask-salvage-wallet
Tags
Crypto
Web3
Web Dev
Published
February 19, 2022
こんにちは。先日Metamaskで管理していたWalletを紛失したのですが、なんとか取り戻せたという話を適当に書きます。用語の使い方や説明に自信がないので色々調べてから出そうかと思っていましたが、何もせず数日経ったので潔く公開します。

当時のツイート

管理方法

Google Chrome拡張機能のMetamaskを使用していました。 Chromeは普段用と開発用でプロファイル(ユーザー)を分けており、テストネット上で適当にコントラクトをいじる為にMetamaskで作成したWalletを開発用のプロファイルで使用していました。
当初は使い捨てWalletくらいの認識だったので、パスワードだけ控えてseed phraseは控えてませんでした。

紛失した経緯

  • 上述の通り、開発用Walletのseed phraseを保存していなかった
  • Chrome+Metamaskが入ったMacBook Proを新調する際に、工場出荷状態に初期化してしまった
  • 後日Seed phraseが分からずオワタ
 
別に開発用Walletを紛失しただけなら、被害ないじゃん。と思うのが自然ですが僕はPCを新調する前に重大な過失を犯しています。緊急でMainnetで動かしたいBotがあり、急遽メインで使っているWalletから開発用Walletへ資産を移動していました。Mainnet上の資産です。
 
そんなこんなで、PCを新調したことがキッカケで暗号資産を失ってしまいます。バカバカしい話です。今回は1ETHほどの紛失だったので一度は諦めが付きましたが、資産管理用のWalletを同じように紛失してしまったら発狂モノです。

Seed Phraseのサルベージ

[追記] 公式ドキュメントがありました。全部手探りでやって大変だったのに...。悲しみ。 本当に困っている人は公式を見てください。
 
ではどうやってSeed Phraseを取り戻せたかですが、以下の条件が揃っていたため取り戻せました。
  • Google Chromeのローカルデータを保存していた
    • 工場出荷状態に戻す前にMacBookのデータを全て外部ストレージにバックアップしていました。
  • パスワードは記録してあった
 
まず、Metamaskはwalletの情報をローカルに保存しています。macOSでいうと、以下の場所です。
~/Library/Application Support/Google/Chrome/{プロファイル名}/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn
つまり、ここに入っているデータからWalletの情報を抜き取って、seed phraseをゲットできればミッションクリアということです。
この拡張機能に関するデータはlevelDBというシステム管理されており、僕は以下のライブラリを使ってターミナルに情報を表示し、出てきたJSONを整形しました。もっとエレガントなやり方があるはずですが、何も知見がなかったことと、こんな事をするのはどうせ今回だけなので、とにかく最短距離を目指しました。
 
上記で得られたJSONの一部が以下です。(引用: Metamask公式)
{"vault":"{\"data\":\"wwpXXtFCqZkYsWfeEwItZjJ0Cc7mRVjG47Dqh+ztL1PiCG6Izhg+zG0mM+H2ykyjz3X0RNhAE6IVsWFZamcZ47B4sVi4SvUxrMhARm5L3yHPxr3UsyGrOXmthyVMgEGmjwlmnFCNd2nMZ2o8/sRMra8FupurqevnBv57FiYpEEs7gPpFHv6587aL44MmKD8Snv4JLFqiqmlK82Waq5F+Iv9mw2sFVAL9mgZBSgFgbWdB3TsKVB2k\",\"iv\":\"rkUQlNcGTxBE0My7a/bCXw==\",\"salt\":\"HcKyNfGzaRALRQ0DlKgcIe5Uk30iI/M//oG6w8vX8Nk=\"}"}
この valut というキーのデータがwalletの正体です。これは、walletの情報をパスワードで暗号化したもので、以下のページを使って簡単に復号できます。ここでいうパスワードは、Metamaskのログインに使っているパスワードのことです。
https://metamask.github.io/vault-decryptor/ (Metamask公式。怪しいサイトじゃないです。)
 
復元できると、以下のようなデータが表示されます。無事救出成功です。
[{"type":"HD Key Tree","data":{"mnemonic":"fake mnemonic chain evolve insect attract people before cipher forum river apple","numberOfAccounts":2,"hdPath":""}},...etc}]
 
あとはこのSeed Phraseをお好きなWalletにImportすれば終わり。

こんなアホなことをしないために

  • Seed Phrase, Passwordは保存しておく
  • 開発用Walletには最小限の資産しか入れない
 

[追記]
公式ガイドを見てて気づいたのですが、levelDBのデータはAtomでも見れるっぽいです。