點樣恢復 MetaMask 錢包?密碼遺失、保險箱儲存、加密同埋資料取證

點樣恢復 MetaMask 錢包?密碼遺失、保險箱儲存、加密同埋資料取證

如果你睇緊呢篇文章,你可能已經失去咗對 MetaMask 錢包嘅存取權,而且你冇晒選擇。我花咗好多年時間為人哋恢復錢包 —— 由重新格式化手提電腦嘅 DeFi 交易員到「清理」瀏覽器擴充程式嘅祖父母。呢個指南涵蓋咗我所知道嘅所有嘢,包括 MetaMask 點樣儲存你嘅密鑰、呢啲資料實際喺磁碟上面嘅邊度,同埋喺出現問題嗰陣點樣攞返佢哋。呢啲都唔係理論性嘅。呢度嘅每一種技巧都係嚟自真正嘅恢復。

MetaMask 實際上點樣儲存你嘅密鑰

喺你恢復任何嘢之前,你需要明白你恢復緊啲咩。 MetaMask 唔會將你嘅私人密鑰儲存喺一個叫做 private_keys.txt。佢將佢哋儲存喺一個叫做 the 嘅加密 blob 入面 保險箱,喺你嘅瀏覽器嘅擴充儲存空間入面。

當你建立一個 MetaMask 錢包同埋設定密碼嗰陣,呢度就係喺引擎蓋下面發生嘅事。 MetaMask 會產生一個 BIP-39助記符(你嘅12個字 秘密復原短語) 同埋將佢 – 同任何匯入嘅私鑰 – 包裝成一個由「密鑰環」對象組成嘅 JSON 陣列。嗰個陣列會序列化成字串,然後用嚟加密 AES-256-GCM 用你個密碼派生嘅密鑰 PBKDF2-HMAC-SHA256。結果係一個有三至四個欄位嘅 JSON blob ,可以寫入去 chrome.storage.local (喺 Chromium 瀏覽器上面)或者 IndexedDB (喺 Firefox 上面)。

舊版本嘅加密保管庫係噉樣嘅:

{"data":"SGFuZGxlIHRoaXMgZW5jcnlwdGVkIGRhdGE=","iv":"MTIzNDU2Nzg5MDEyMzQ1Ng==","salt":"cmFuZG9tMzJieXRlc2FsdHZhbHVlaGVyZQ=="}

而喺較新嘅版本( v11.16. x 之後),仲有第四個欄位:

{"data":"...","iv":"...","keyMetadata":{"algorithm":"PBKDF2","params":{"iterations":600000}},"salt":"..."}

嗰個 keyMetadata field 係一個需要幾分鐘嘅恢復同幾個星期嘅恢復之間嘅分別。遲啲會再講多啲。

加密管道好直接,但係要準確理解係好重要。你嘅 UTF-8密碼會透過網絡加密 API 以原始 PBKDF2密鑰匯入。一 32 字节隨機鹽 (由 crypto.getRandomValues())同密碼一齊用嚟派生一個256位元嘅 AES-GCM 密鑰。然後一個 16 字节隨機 IV 加密序列化嘅密鑰環數據。個 data 欄位包含密文同埋 GCM 認證標籤,用 base64編碼。有一個奇怪嘅地方值得留意: MetaMask 用咗一個 16 字节 IV 用於 AES-GCM,即係非標準嘅 – NIST SP 800-38D 建議用12字節。呢個會令到部分加密庫嘅互操作性頭痛(例如 Ruby 嘅 OpenSSL 會拒絕同佢合作)。

當你用密碼解鎖 MetaMask 嗰陣,個過程就會反轉。個 KeyringController 從持久儲存中拉出加密嘅保管庫字串,將佢傳遞畀 browser-passworderdecrypt 函數,佢會解析 JSON ,提取鹽,用相同參數嘅 PBKDF2導出密鑰,用 AES-GCM 解密,然後將結果反序列化返去密鑰環對象。解密咗嘅鎖匙扣直播 只係喺記憶入面 – 佢哋儲存喺 memStore (一個 ObservableStore 實例),而且從來都唔會以純文字形式寫入磁碟。

解密嘅保管庫包含一個陣列,通常係噉樣:

[
  {
    "type": "HD Key Tree",
    "data": {
      "mnemonic": "abandon ability able about above absent ...",
      "numberOfAccounts": 3,
      "hdPath": "m/44'/60'/0'/0"
    }
  },
  {
    "type": "Simple Key Pair",
    "data": ["0xabc123..."]
  }
]

HD Key Tree 鎖匙扣會保留你嘅助記符同埋派生帳戶嘅數量。 Simple Key Pair 條目係個別匯入嘅私鑰。如果你連接咗硬件錢包,你亦都會睇到 Trezor HardwareLedger Hardware 密鑰類型 – 雖然呢啲只係儲存派生路徑同公開地址,而唔係私鑰(嗰啲留喺硬件裝置上面)。

透過 Manifest V3( Chrome 喺2023年開始推出嘅服務工作者架構), MetaMask 加入咗將加密密鑰緩存為匯出嘅 JWK 嘅功能,噉樣喺服務工作者重新啟動嗰陣就可以重新解密保管庫,而唔使再次提示輸入密碼。個 encryptionKeyencryptionSalt 欄位出現喺 memStore 幾時 cacheEncryptionKey 係啟用咗。

MetaMask 會喺每個平台上面隱藏你嘅數據

搵到個保險箱係成功嘅一半。 MetaMask 會根據瀏覽器同操作系統,將資料儲存喺唔同嘅位置,而呢啲差異對恢復好重要。

Chromium 瀏覽器( Chrome 、 Brave 、 Edge )

喺基於 Chromium 嘅瀏覽器上面, chrome.storage.local 持續到 a LevelDB 資料庫 喺磁碟上面。擴充程式 ID 決定資料夾名稱。

Chrome 嘅擴充程式 IDnkbihfbeogaeaoehlefnkodbefgpgknn – 燒入每個康復專科醫生嘅記憶。 由於佢係喺 Chrome 網上商店安裝,所以用咗相同嘅 ID 。 邊緣 如果喺 Edge 外掛程式商店安裝,就會得到自己嘅 ID: ejbalbakoplchlghecdalmeeeajnimhm。但係如果用戶透過 Chrome 網上商店( Edge 支援)喺 Edge 上面安裝 MetaMask ,佢就會保留 Chrome ID 。呢個分別會不斷令人踩踏。

以下係完整嘅路徑:

Windows 上嘅 Chrome :
C:\Users\<USER>\AppData\Local\Google\Chrome\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn\

macOS 上嘅 Chrome :
~/Library/Application Support/Google/Chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/

Linux 上嘅 Chrome :
~/.config/google-chrome/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/

Windows 上嘅勇敢:
C:\Users\<USER>\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\Local Extension Settings\nkbihfbeogaeaoehlefnkodbefgpgknn\

喺 macOS 上面勇敢啲:
~/Library/Application Support/BraveSoftware/Brave-Browser/Default/Local Extension Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/

Windows 上嘅邊緣(邊緣商店安裝):
C:\Users\<USER>\AppData\Local\Microsoft\Edge\User Data\Default\Local Extension Settings\ejbalbakoplchlghecdalmeeeajnimhm\

一個重要嘅細節:如果用戶有多個 Chrome 個人檔案,請更換 DefaultProfile 1, Profile 2,等等。我見過人哋搜尋錯個人檔案成個鐘。

火狐 – 一隻完全唔同嘅野獸

火狐唔用 LevelDB 。佢將擴充資料儲存喺 索引 DB,火狐喺 SQLite 上面實現。個分機 ID 係 webextension@metamask.io,但係 Firefox 每次安裝都會分配一個獨特嘅內部 UUID – 類似嘅嘢 196319ec-3a5e-4efe-9413-c327a770d874。你可以喺 about:debugging 喺「呢個火狐」下面。

啲數據喺:

窗戶: %APPDATA%\Mozilla\Firefox\Profiles\<PROFILE>\storage\default\moz-extension+++<UUID>^userContextId=4294967295\idb\

macOS : ~/Library/Application Support/Firefox/Profiles/<PROFILE>/storage/default/moz-extension+++<UUID>^userContextId=4294967295/idb/

Linux : ~/.mozilla/firefox/<PROFILE>/storage/default/moz-extension+++<UUID>^userContextId=4294967295/idb/

喺入面 idb/ 資料夾,你會搵到有數字名嘅二進制檔案。呢啲係 快速壓縮 – 你唔可以好似 LevelDB 檔案噉淨係睇佢哋。你需要先用一個工具去解壓佢哋,例如 snappy-fox 喺保管庫資料變得可提取之前。呢個係我見到嘅最常見嘅 Firefox 恢復錯誤:人哋打開二進制檔案,見到混亂嘅數據同可識別嘅文字片段混合,然後假設保管庫已經損壞。唔係。佢係壓縮咗嘅。

喺 Firefox 63之前,擴充程式儲存用咗一個簡單嘅 JSON 檔案,叫做 storage.js 喺個人檔案目錄入面。如果你恢復緊一個好舊嘅安裝,搵吓 storage.js 或者 storage.js.migrated.

LevelDB 同埋每個人都會問嘅0001. ldb 檔案

LevelDB 係 Google 嘅鍵值儲存引擎,了解佢嘅檔案結構對於任何 Chromium 瀏覽器上嘅 MetaMask 恢復係至關重要。

MetaMask LevelDB 目錄包含多種檔案類型。個 .ldb 檔案 (排序字串表,或者 SSTables )係永久嘅排序鍵值儲存空間。 .log 檔案 係預先寫入日誌 – 喺刷新之前最近寫入嘅臨時緩衝區 .ldb 檔案。有個 MANIFEST-###### 檔案追蹤資料庫元數據, a CURRENT 檔案指向有效清單,同埋 a LOCK 防止並發存取嘅檔案。

保管庫資料通常會落喺 a 低數字 .ldb 檔案000003.ldb, 000005.ldb,或者類似嘅。 MetaMask 自己嘅文件話「佢應該係一個低嘅數值。如果係一個大嘅數字,佢就唔係個保管庫。」個 0001.ldb 檔案(或者 000001.ldb)係 MetaMask 首次初始化嗰陣最早創建嘅 SSTable 之一。佢通常包含喺創建錢包嗰陣寫嘅原始保管庫。

從中提取保管庫資料 .ldb 檔案 通常喺 Chromium 上面係直接嘅。喺文字編輯器( Sublime Text 、 VS Code ,甚至係 Notepad ++ )打開個檔案,然後搜尋字串 vault。你會發現嵌入咗喺 LevelDB 記錄結構入面嘅加密 JSON blob 。複製所有嘢嚟自 {"data":" 透過結束 "} – 嗰個係你嘅保險箱。

喺 Mac 或者 Linux 上面,呢個一行字可以幫到你:

LC_ALL="C" egrep -roa 'vault":"(.*?\\"})' ~/Library/Application\ Support/Google/Chrome/Default/Local\ Extension\ Settings/nkbihfbeogaeaoehlefnkodbefgpgknn/ | sed -E 's/.*({.*}).*/\1/g' | head -1

有一樣嘢要睇: .ldb 檔案可以用 快速壓縮 喺數據塊上面。如果字串搜尋失敗,而你見到有二進制垃圾嘅塊,你需要嘅資料塊可能係 Snappy 壓縮嘅。個 .log 相反,檔案永遠都係未壓縮嘅 – 32KB 塊嘅原始鍵值數據。如果個 .ldb 方法失敗, 成日檢查下 .log 檔案。 MetaMask 嘅官方文件提到:「如果你用唔到 . ldb 檔案去恢復你嘅保管庫,請檢查係咪有 .log 檔案。」

LevelDB 嘅一個對恢復非常有用嘅屬性:佢係 只可以附加。更新同刪除唔會修改現有記錄 – 佢哋會加入序列號較高嘅新項目。舊記錄會存在,直到壓實將佢哋合併為止。即係話,如果有人喺舊嘅 SRP 上面匯入咗新嘅 SRP ,舊嘅保管庫資料可能仍然存在喺舊嘅保管庫入面 .ldb 仲未壓縮嘅檔案。我用呢個方法恢復過「覆寫」嘅銀包唔止一次。

對於程式化提取, btcrecover 項目包括 extract-metamask-vaults.py,呢個功能會正確讀取 LevelDB 資料庫,同埋拉取所有保管庫條目 – 包括隱藏喺未壓縮檔案入面嘅潛在舊條目。個 cyclone-github/metamask_extractor tool 做同樣嘅嘢,可以直接輸出到同 hashcat 兼容嘅格式。

當保管庫檔案損壞嗰陣

保管庫損壞通常源於幾個原因之一:寫入操作期間瀏覽器崩潰(斷電、內核恐慌、強制退出)、 MetaMask 更新中斷而喺過程中重寫儲存空間、實際磁碟錯誤(壞扇區、 SSD 磨損),或者 – 越嚟越常見 –防病毒軟件隔離 MetaMask 嘅 JavaScript 檔案,即使資料庫入面嘅資料庫本身係狀態唔一致,但係呢個狀態可能會令到資料庫本身嘅狀態唔一致。

當 JSON 唔解析嗰陣,你就知道你有個損壞嘅保管庫。缺少大括號,截斷咗嘅 base64字串,空字节注入咗數據欄位嘅中間。 MetaMask 保管庫解密器會拋出「問題解碼保管庫」,或者會無聲無息噉失敗。

復原取決於貪污嘅類型同程度。如果 JSON 結構受損,但係加密嘅數據大部分都完好無損,你通常都可以 手動重建個保管庫。格式係僵硬嘅 – 你需要正確嘅 data, iv, 同 salt 欄位(加 keyMetadata 用嚟做新啲嘅金庫)。去掉空字节同控制字元。驗證嗰個 data, iv, 同 salt 值係有效嘅 base64。如果個 data 欄位被截斷,但係,你有問題 – AES-GCM 需要完整嘅密文 加上佢嘅認證標籤(最後16個字节嘅 data 欄位)去解密。缺少一個字节就代表成件事失敗。

對於部分損壞嘅 LevelDB 資料庫,其中 .ldb 檔案本身已經損壞,試下睇吓 .log 而係檔案 – 佢係一個較簡單嘅格式(連續嘅32KB 塊,有7個字节嘅標頭),亦可能包含喺損壞事件中幸存嘅保管庫嘅較新副本。如果兩種方法都冇用,你有時可以用 Python LevelDB 解析庫( CCL 解決方案集團發佈咗 LevelDB 解析、 Snappy 解壓縮同 V8反序列化嘅純 Python 實現),喺損壞嘅資料庫檔案中以手術方式提取記錄,跳過損壞嘅塊。

多個 SRP 可以喺一個 LevelDB 目錄入面共存。如果用戶匯入咗一個新嘅種子詞組,舊嘅保管庫條目可能會喺一個獨立嘅項目入面保留 .ldb 檔案,甚至係同一個檔案入面,但係偏移量唔同。成日搵 所有例子 嘅保險箱模式,唔係淨係第一個。

被覆寫嘅檔案問題同埋點樣解決呢個問題

呢個係最令人心碎嘅情況。有人卸載 MetaMask – 可能佢哋喺度排除緊疑難,可能佢哋「清理」緊佢哋嘅瀏覽器,可能佢哋唔覺意自己做緊乜。喺 Chromium 瀏覽器上面,解除安裝擴充程式 刪除整個擴充程式資料資料夾,包括所有 .ldb, .log,同埋清單檔案。喺火狐上面, moz-extension+++<UUID> 資料夾會被移除,而由於每次重新安裝都會產生一個新嘅 UUID ,所以新嘅安裝唔會觸及舊位置(但係舊位置已經冇咗)。

MetaMask 自己嘅文件對呢個問題好直接:「當擴充程式卸載嗰陣,瀏覽器擴充程式資料就會被刪除。一般嚟講,呢個意思係你嘅保管庫資料冇咗。」

「一般」呢個字做緊好多嘢。數據會喺邏輯上被刪除– 檔案系統會將嗰啲扇區標記為空閒 – 但係實際嘅字节唔會即刻被清零。喺傳統嘅HDD上面,數據會持續到嗰啲扇區偶然被新檔案重用為止。喺SSD上面, TRIM 指令可以令到刪除咗嘅資料喺幾分鐘內,有時幾秒鐘內就無法恢復。

覆寫保管庫恢復嘅第一條規則:立即停止使用電腦。每個寫入驅動器嘅新檔案都可能會覆寫你嘅保管庫以前所在嘅扇區。如果可以嘅話,拉開個驅動器,然後將佢只讀安裝喺另一部機器上面。

呢個情況嘅復原工具,按照我首先要搵到嘅嘢嘅順序:

  • 我哋嘅自訂軟件(跨平台),用嚟恢復邏輯刪除嘅檔案
  • Linux ext3/ ext4檔案系統嘅extundelete或者ext4magic
  • 原始磁碟搜尋 作為最後嘅手段: grep -rboa "vault" /dev/sdX 掃描原始磁碟裝置搵保管庫字串
  • 我哋嘅定制工具 當檔案系統元數據冇咗嗰陣,用嚟雕刻檔案 – 設定佢去搜尋 {"data":" 模式

我喺幾個星期前卸載嘅驅動器入面恢復咗保管庫 —— 喺 HDD 上面。喺 SSD 上面,就算持續使用幾個鐘,成功率都會大幅下降。重新安裝 MetaMask 係你可以做嘅最差嘅事,因為佢會喺完全相同嘅目錄入面建立一個新嘅 LevelDB 資料庫,可能會寫入舊嘅扇區。

Firefox 喺呢度有一個優點。由於每次安裝都會得到一個新嘅 UUID ,所以重新安裝會喺新嘅目錄路徑入面建立檔案。老嘅 moz-extension+++<OLD-UUID> 數據,就算個資料夾被刪除,都唔會被新安裝嘅檔案覆寫。仲有兩個隱藏嘅 Firefox 偏好設定 – extensions.webextensions.keepUuidOnUninstallextensions.webextensions.keepStorageOnUninstall – 嗰個,如果設定為 trueabout:config 喺解除安裝之前,阻止瀏覽器清除擴充程式儲存空間。但係冇人主動設定呢啲。

手機上嘅 MetaMask 係完全唔同嘅動物

MetaMask 手機係建立喺 React Native 上面,而且儲存資料嘅方式同瀏覽器擴充程式完全唔同。加密嘅保管庫會通過 @react-native-async-storage/async-storage,呢個係用平台專用嘅後端。

喺 Android 上面,異步儲存通常會寫入一個 SQLite 資料庫/data/data/io.metamask/databases/RKStorage。呢條路徑需要 root 權限先可以直接讀取。保管庫加密使用相同嘅 PBKDF2衍生密鑰方法,但係同桌面擴充程式有重要嘅分別:流動應用程式喺歷史上只會使用 5,000次 PBKDF2迭代 同埋用嚟加密 AES-CBC 而唔係 AES-GCM 。即係話,就算密碼相同,流動保險箱都唔可以同桌面保險箱互換。

喺 iOS 上面,數據會喺應用程式沙盒下面 <AppSandbox>/Documents/。對於 iCloud 備份恢復,相關路徑係 Apps → MetaMask → Documents → persistStore → persist-root – 你需要一個好似 iMazing 噉嘅工具先可以喺 Mac 上面瀏覽 iOS 備份。呢個方法係咪有效取決於用戶係咪喺 MetaMask 活躍嗰陣啟用咗 iCloud 備份,而蘋果方面嘅變更據報間歇性咁破壞咗呢個方法。

MetaMask 手機亦都實現咗一個 安全鎖匙扣 模組(內置喺 react-native-keychain),將用戶嘅錢包密碼儲存喺 iOS 鑰匙扣或者 Android 密鑰庫,以便進行生物識別解鎖。安全審計顯示, SecureKeychain 用咗「 foxCode 」鹽加入咗額外嘅加密層 —— 原來係硬編碼嘅字串 "encrypt"。 MetaMask 嘅團隊承認呢個係深入防禦,而唔係安全關鍵嘅秘密。

手機恢復嘅根本挑戰係 冇手動保管庫提取 等同於搵 .ldb 桌面上面嘅檔案。你唔可以 SSH 去你部 iPhone 同埋 grep 搵保管庫字串。由 MetaMask 手機版 v6.3.0,個應用程式包括自動保管庫恢復,當偵測到損壞嗰陣就會觸發 – 但係如果個應用程式被刪除,除非你有裝置備份,否則本機保管庫資料就會消失。 Android 備份機制對於捕捉所有應用程式內部資料嚟講特別唔可靠。 MetaMask 嘅官方立場 係建議將資產移至新嘅 SRP ,而唔係依賴 Android 保管庫恢復。

破壞咗每個恢復工具嘅 PBKDF2迭代變更

多年來, MetaMask 都係用緊 10,000次 PBKDF2迭代 – 硬編碼預設喺 browser-passworder 圖書館。每個恢復工具、每個 hashcat 模組、每個暴力脚本都經過 10,000 次迭代校正。然後喺2023年尾/2024年頭,一切都變咗。

@metamask/browser-passworder 庫 v4.2.0(喺2023年11月13號發佈)引入咗對可配置密鑰派生選項嘅支援。庫嘅新預設跳到 90 萬次迭代,但係 MetaMask 嘅擴充程式將佢設定為使用 60 萬次迭代 – 符合 OWASP 2023年對 PBKDF2-HMAC-SHA256嘅建議。由 MetaMask 擴充程式 v11.16.11 (喺2024年6月嘅 hashcat 期確認咗),新嘅保管庫正喺60萬次迭代同埋新嘅保管庫入面建立緊 keyMetadata 場地。

呢個係每次嘗試密碼嘅計算成本增加60倍。一個用咗一日時間去1萬次迭代嘅殘忍力量,而家喺同一個硬件上面用咗兩個月時間去60萬次迭代。 hashcat 社群必須開發自訂核心 —— 模式26620,由 cyclone 貢獻 —— 嚟處理新格式。標準模式26600有10,000次迭代硬編碼。

重要嘅係,舊嘅保管庫唔會自動重新加密。 如果你喺2021年建立咗你嘅錢包,除非 MetaMask 明確觸發重新加密(即係 updateVault 函數係為咗呢個目的而存在,但係唔清楚 MetaMask 喺解鎖嗰陣有幾積極噉調用佢)。你可以根據有冇呢個版本嚟知道你處理緊邊個版本 keyMetadata 場地。唔得 keyMetadata?係10,000次迭代。有 keyMetadata"iterations": 600000?呢個係新格式。

以下係對恢復重要嘅加密庫版本嘅完整時間表:

  • 瀏覽器密碼器 v1. x – v2. x (2022年前):1萬次迭代,硬編碼。出版時冇咗 @metamask 範圍。
  • v3.0.0 (2022年8月):改名做 @metamask/browser-passworder。冇迭代變化。
  • v4.2.0 (2023年11月):新增 keyMetadata 支持。預設加密改為90萬次迭代。 keyFromPassword 向後兼容,係 10,000 。
  • v4.3.0 (2023年11月):新增 isVaultUpdated 檢查保管庫係咪符合目標參數。
  • v5.0.0 (2024年4月):節點 . js v16最低限度。冇加密貨幣變動。
  • v6.0.0 (2024年12月):節點 . js v18.18最低限度。冇加密貨幣變動。

對於復原專家嚟講:一定要先檢查保管庫格式。佢決定咗你嘅整個方法。

MetaMask 嘅密碼政策同埋佢對暴力嘅意義

MetaMask 強制密碼長度最少為8個字元。就係咁。冇大寫要求,冇數字,冇特殊字元。擴充程式會顯示視覺強度指示燈(「弱」/「好」),但係唔會封鎖符合最低長度嘅弱密碼。亦都冇最大長度 – 支援 Unicode 字元。呢個政策至少喺2018年初開始實施(喺 GitHub 第3515期入面有參考)。

有幾個第三方網站錯誤地聲稱 MetaMask 需要大寫、小寫、數字同特殊字元。呢個係錯嘅。唯一硬要求係8個字元。

對於殘忍嘅恢復,呢個係非常重要嘅。一個只有8個字元嘅小楷密碼嘅密鑰空間大約有2080億個組合(26 ^ 8)。對住一個有10,000次迭代嘅舊保管庫,現代 GPU 上面嘅 hashcat 每秒可以測試幾千個哈希,令到呢個可以喺幾日內破解。對住一個60萬次迭代嘅保管庫,將時間乘以60倍。一個強大嘅12多個字元密碼,有混合大小楷同符號?用現時嘅硬件,對任何一種格式都有效唔會破壞。

實際嘅復原工具之選係 btcrecover – MetaMask 本身都推薦畀對自己密碼有大致概念嘅用戶。佢支援基於令牌同模式嘅猜測,畀你定義一個好似 "my" + [dog|cat|bird] + [2019|2020|2021] + ["!"|"@"|"#"] 同埋有效噉測試所有排列。對於 GPU 加速攻擊, hashcat 模式26600處理舊嘅保管庫,模式26610處理移動保管庫,而模式26620(或者重新編譯嘅26600同更新咗嘅迭代)處理新嘅60萬次迭代格式。

衍生路徑同「資金缺失」嘅疫情

衍生路徑係大部分「我嘅資金消失」問題嘅起源。 元面具 用以太坊嘅 BIP-44標準路徑: m/44'/60'/0'/0。戶口係透過增加最終指數而得出: m/44'/60'/0'/0/0 (第一個戶口), m/44'/60'/0'/0/1 (第二), m/44'/60'/0'/0/2 (第三),等等。呢條路徑適用於所有 EVM 兼容嘅鏈 – 以太坊、多邊形、仲裁、 BSC 上嘅地址相同。

問題係唔係個個都用同一條路。 分帳直播 用途 m/44'/60'/x'/0/0,增加緊 account 欄位而唔係 address_index. 分帳遺產 (舊嘅 MEW / MyCrypto 路徑)用 m/44'/60'/0'/x – 只有四個級別而唔係五個。第一個地址(m/44'/60'/0'/0/0)喺 MetaMask 、 Ledger Live 同 Trezor 都係一樣。但係個 第二個戶口同其他戶口完全分歧,因為每個錢包都會增加路徑嘅唔同組成部分。

噉樣會造成一個非常特定嘅失敗模式:有人喺 MetaMask 度還原佢哋嘅 Ledger 種子,睇到佢哋第一個帳戶同佢嘅餘額,然後加入第二個帳戶,然後見到⋯零。啲資金仲未冇。佢哋坐喺源自嘅地址 m/44'/60'/1'/0/0 (分帳直播風格),但係 MetaMask 睇緊 m/44'/60'/0'/0/1。完全唔同嘅密鑰,完全唔同嘅地址。

Trezor 嘅預設以太坊派生路徑 同 MetaMask 嘅相符: m/44'/60'/0'/0/x。所以 Trezor 至 MetaMask 嘅恢復一般適用於所有帳戶。跨錢包問題主要係分帳 ↔ MetaMask 同分帳 ↔ Trezor 。

要喺「錯誤」嘅衍生路徑上面搵資金,你嘅選項係:

  • 透過電郵聯絡我哋: contact @ cryptorecovery . io ,我哋會盡力幫到你。
  • 我嘅以太錢包( MEW ):透過「新增路徑」支援自訂派生路徑。手動輸入 m/44'/60'/1'/0/0, m/44'/60'/2'/0/0等等,嚟檢查分帳直播式地址。
  • MyCrypto :類似嘅自訂衍生路徑支援。
  • Ian Coleman 嘅 BIP-39工具(離線運行):輸入助記符,選擇 ETH ,喺 BIP-44標籤之間切換,然後手動調整路徑組件。
  • btcrecover :可以自動測試唔同嘅導出路徑方案。

有一個令人沮喪嘅限制: MetaMask 嘅 Trezor 整合支援自訂衍生路徑。合併咗 Ledger ( PR # 9367)嘅自訂衍生路徑選項,但係根據最新資料, Trezor 嘅等效衍生路徑選項( GitHub 問題 #11197)仍然開放。如果你想透過 MetaMask + Trezor 存取分帳衍生嘅帳戶,你需要改用 MEW 或者 MyCrypto 。

MetaMask 同特雷佐:一段麻煩嘅婚姻

MetaMask-Trezor 整合可以透過 特雷佐橋 – 本地安裝嘅背景進程(trezord)聽緊 http://127.0.0.1:21325/ 同埋填補瀏覽器沙盒同 USB 硬件存取之間嘅差距。你可以撳嚟檢查佢係咪跑緊 http://127.0.0.1:21325/status/.

最常見嘅故障模式好簡單: Trezor 套房開咗。 Trezor Suite 會鎖定裝置嘅 USB 連接,阻止 MetaMask 通訊。你要完全退出 Suite – 唔係淨係將佢減到最低,仲要喺系統托盤閂佢。我估計呢個佔我見過嘅「 MetaMask 搵唔到我嘅 Trezor 」飛嘅40 % 。

其他常見問題同埋佢哋嘅解決方法:

「搵緊你部特雷佐爾 … … 」無限期噉旋轉 – 驗證橋接器已經安裝好同埋 trezord 跑緊。試下用唔同嘅 USB 連接線同連接埠。停用 VPN 、防火牆同瀏覽器擴充程式(廣告封鎖程式同私隱擴充程式經常會干擾)。無痕模式可以消除擴充程式衝突。

「裝置通話進行中」 – 另一個應用程式或者瀏覽器標籤已經同 Trezor 通訊。閂所有其他可能存取裝置嘅分頁同應用程式。

WebUSB 嘅限制– 火狐根本唔支援 WebUSB ,即係話火狐嘅 Trezor 連線完全依賴 Bridge 。 Chrome 、 Brave 同 Edge 都係透過 Chromium WebUSB/WebHID 實現方式運作。

Trezor Safe 5 衍生路徑警告– 用戶報告喺交易驗證期間喺 Trezor 畫面上面見到「所選帳戶嘅衍生路徑錯誤。 m/44’/60’/0’/0」。呢個警告一般可以安全咁忽略– 儘管有訊息,但係錢包仍然可以正常運作。呢個係一個同 Trezor 固件點樣驗證非標準路徑有關嘅外觀問題。

喺2025年, Trezor 開始將 Bridge 功能整合到 Trezor 套件本身。呢個轉換引起咗一波連線問題,因為有啲用戶需要喺後台執行 Suite 嚟進行 MetaMask 連線,而有啲用戶就需要佢完全閂埋。檢查 Trezor 套件 → 設定 → 應用程式 → Trezor 連接,睇下有冇相關嘅配置。

當 MetaMask 連接到 Trezor 嗰陣,所產生嘅帳戶同 MetaMask 嘅軟件錢包帳戶有根本嘅分別。 Trezor 衍生帳戶只會喺保管庫入面儲存公開密鑰同派生路徑,而私人密鑰會保留喺硬件裝置上面。 MetaMask 可以喺冇連接 Trezor 嘅情況下顯示餘額(透過公開密鑰只讀),但係喺冇實體裝置嘅情況下就唔可以簽署交易。如果喺建立 Trezor 帳戶嗰陣用咗密碼短語,就要輸入完全相同嘅密碼短語先可以重新生成相同嘅地址。

實際上有效嘅恢復技巧

經過幾百次復原,呢啲係我最常遇到嘅情況,同埋我點樣處理佢哋。

情況1:有密碼,失去咗種子短語,擴充程式仍然安裝緊

呢個係最簡單嘅。打開 MetaMask 嘅背景頁面, chrome://extensions → 開發人員模式 → 撳一下「服務工作者」( MV3)或者「背景頁面」( MV2)。喺控制台入面:

chrome.storage.local.get('data', result => {
    console.log(result.data.KeyringController.vault);
});

複製保管庫 JSON ,將佢貼入 元掩碼保管庫解密器 (metamask.github.io/vault-decryptor),輸入你嘅密碼,佢就會輸出你嘅助記符同埋任何匯入嘅私鑰。 「保險箱解密器」係由 MetaMask 嘅聯合創辦人 Dan Finlay 建立嘅 —— 佢亦都可以接受 .ldb 直接透過檔案上載。

情況2:有密碼,擴充程式已經解除安裝,但係資料可能仲喺磁碟上面

去擴充程式資料目錄。如果個資料夾仲存在(有時卸載都未能完全清理,或者用戶只係停用咗而唔係移除咗個擴充程式),就攞個 .ldb.log 檔案。用 grep 、文字編輯器或者 btcrecoverextract-metamask-vaults.py。用保管庫解密器解密。

如果個資料夾冇咗,請透過 contact@cryptorecovery.io 聯絡我哋,我哋會幫手處理磁碟取證。

你亦可以將個驅動器安裝為唯讀,同埋進行原始磁碟搜尋嚟搵保管庫字串模式。喺 Linux 上面: grep -rboa '{"data":"' /dev/sdX。成功好大程度上取決於刪除之後發生咗幾多磁碟活動,同埋個驅動器係 SSD 定係 HDD 。

情況 3 :唔記得密碼,有保險箱檔案

呢個係一個殘忍嘅情況。解壓縮保管庫,用嚟將佢轉換成 hashcat 格式 metamask2hashcat.py 或者 cyclone-github/metamask_extractor。然後執行 hashcat (舊保管庫嘅模式係26600,新嘅保管庫係26620)或者 btcrecover ,用一個令牌檔案描述你記得密碼嘅嘢。如果你知道你嘅密碼係「 myDog 」之類嘅加一年加一個符號, btcrecover 可以有效噉測試呢啲組合。

情況4:火狐恢復

喺呢度搵元掩碼 UUID about:debugging。去儲存目錄。用嚟解壓縮 IndexedDB 二進制檔案 snappy-fox:

./snappy-fox input_file.snappy output.txt

喺解壓縮嘅輸出入面搜尋保管庫 JSON 。然後繼續使用保管庫解密器。個 JesseBusman/FirefoxMetamaskWalletSeedRecovery Python 脚本會自動化呢個整個過程 – 佢會掃描 Firefox 個人檔案,搵保管庫資料,同埋輸出格式化嘅 JSON , 準備好解密。

情況5:種子匯入後出現資金缺失

檢查派生路徑。如果將分帳種子匯入 MetaMask ,第二個帳戶之後會顯示唔同嘅地址同零餘額。用 MEW 或者 MyCrypto 同自訂派生路徑去喺 Ledger Live (m/44'/60'/x'/0/0)或者分帳遺產(m/44'/60'/0'/x) 路徑。如果涉及 Trezor 密碼短語,請確保你輸入嘅密碼短語完全相同 – 唔同嘅密碼短語會喺同一個種子中產生一組完全唔同嘅地址。

值得喺你嘅工具包入面加入嘅法醫工具

  • 元掩碼保管庫解密器 – 官方,可以離線運行,直接處理 .ldb 檔案上載
  • btcrecover – 密碼恢復同模式匹配,推薦 MetaMask
  • hashcat – GPU 加速蠻力(模式26600、26610、26620)
  • 快速狐狸– 火狐快速解壓縮
  • CCL 解決方案組 Python 工具– 純 Python LevelDB 解析、 Snappy 解壓縮、 V8反序列化

結論:成功恢復同失敗嘅分別係咩

攞返個銀包同永遠唔見咗佢之間嘅分別幾乎永遠都係喺問題被發現之後嘅頭幾分鐘發生嘅事。最破壞性嘅行動係喺同一個瀏覽器設定檔上面重新安裝 MetaMask —— 佢會用新嘅檔案覆寫 LevelDB 目錄。第二個最具破壞性嘅係喺刪除保管庫之後繼續喺 SSD 上面正常使用電腦,呢個會觸發 TRIM ,令到扇區級別恢復係唔可能嘅。

如果你喺呢個指南入面攞咗三樣嘢:將你嘅種子短語備份喺紙上,明白你嘅保管庫喺一個你可以複製同保存嘅特定資料夾入面,同埋如果有啲嘢出錯,喺你嘗試任何恢復之前,即刻停止使用嗰部電腦。加密係堅實嘅 —— 除非密碼弱,否則有60萬次 PBKDF2迭代嘅 AES-256-GCM 唔會受到殘忍強制 —— 但係資料本身出奇地脆弱。喺 LevelDB 資料庫入面只係幾千字節,只要點擊一下瀏覽器清理就可以消失。

我恢復失敗嘅每個錢包都有相同嘅根本原因:用戶喺數據丟失之後繼續使用部機。我成功恢復嘅每個錢包都係一個資料仲喺磁碟上面嘅錢包 —— 有時會喺令人驚訝嘅地方,有時會因為 LevelDB 嘅只附加架構而有多個副本,但始終係因為有人停低咗,諗咗先再行動。

如果你需要幫手恢復你嘅 metamask 錢包,可以透過電郵聯絡我哋: contact @ cryptorecovery . io ,以獲得專業、免費嘅諮詢或者瀏覽我哋嘅聯絡頁面

[contact-form-7 id=”f245613″ title=”Newsletter”]