Bitcoin-Core

使用 sqlite 瀏覽器查看備份的 wallet.dat

  • March 8, 2021

我使用 api ref 中提到的命令備份了 wallet.dat:

bitcoin-cli -rpcport=18332 -rpcuser=user -rpcpassword=password backupwallet "/bitcoin/backup.dat"

我想使用“用於 sqlite 的 DB 瀏覽器”(或任何其他 sqlite 瀏覽器)查看備份的 db 文件。但是,當打開 db 文件時,它會提示輸入密碼/密鑰來解密錢封包件。

它指的是哪個密碼/密鑰?創建備份時,我沒有指定任何密碼或密鑰..

在此處輸入圖像描述

db_dump

您可以db_dump從 Berkeleydb-utils包中使用。

我已經通過 WSL (Ubuntu) 在 Windows-10 下使用它——它絕對可以轉儲未加密的比特幣wallet.dat文件。

比特幣核心使用的 Berkeley DB 庫wallet.dat是一個鍵值儲存——使用的鍵似乎是“key”和“keymeta”之類的詞。

據我所知,數據庫庫不知道鍵和值的結構(如果不是簡單的數據類型)。我相信像比特幣核心這樣的應用程序通常會儲存 blob,其內容無法被缺乏應用程序架構知識的通用工具剖析。同樣的觀察可能適用於 sqlite 瀏覽器

然而db_dump,輸出是從十六進制轉儲的一個值得提升的一步!-por-da選項可能有用。


SQLite

<https://github.com/bitcoin/bitcoin/pull/19077>說

此 PR 添加了一個新類 SQLiteDatabase,它是 WalletDatabase 的子類。這提供了對用於儲存錢包記錄的 SQLite 數據庫的訪問。為了保持與 BDB 的兼容性並降低更改的複雜性,我們沒有使用 SQLite 的許多特性。我們嚴格將其用作鍵值儲存。我們創建了一個主表,它有兩列,鍵和值,都是 blob 類型。

我們為 SQLite 錢包保留名稱 wallet.dat。我們可以通過在 wallet.dat 文件中搜尋特定的魔術字節來確定要使用的數據庫類型。SQLite 以空字元結尾的字元串開始它的文件SQLite format 3。BDB0x00053162在字節 12 處有(注意這個整數的字節順序取決於系統字節序)。因此,當我們看到有一個想要打開的 wallet.dat 文件時,我們會檢查魔術字節以確定要使用的數據庫系統。

我正在使用目前的比特幣核心 0.21.0,但我檢查的錢包是 2018 年首次生成的,並且具有 Berkeley DB (BDB) 簽名。比特幣核心沒有以更新/不同的格式重寫文件。

<https://github.com/bitcoin/bitcoin/issues/20160>提供了逐步淘汰 Berkely DB 的時間表(這顯然會影響這個答案的內容)


錢包.dat

我使用十六進制轉儲對 wallet.dat 備份的簡要檢查表明,錢包主要包含私鑰、生成的地址和一些關於每個的稀疏元數據。

也可以看看

wallet.dat 包含您的私鑰、地址簿、從或向您的地址發送硬幣的交易副本、帳戶、儲備密鑰、個人設置和指向目前最佳區塊的指針。

(注:比特幣核心的“賬戶”功能在幾年前就被棄用了)

引用自:https://bitcoin.stackexchange.com/questions/103389