使用 sqlite 瀏覽器查看備份的 wallet.dat
我使用 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
,輸出是從十六進制轉儲的一個值得提升的一步!-p
or-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 備份的簡要檢查表明,錢包主要包含私鑰、生成的地址和一些關於每個的稀疏元數據。
也可以看看
- dumpwallet 輸出文件和解釋?(2021 年及相關)
- 不同的 .dat 文件包含什麼?(2011 年,∴ 用處有限)
- 文件格式——rev*.dat(2017,有趣但不同的文件)
- 數據庫是乾什麼用的?(2013 年,∴ 用處有限)
- UXTO DB 結構(2017,不相關但有趣的文件)
wallet.dat 包含您的私鑰、地址簿、從或向您的地址發送硬幣的交易副本、帳戶、儲備密鑰、個人設置和指向目前最佳區塊的指針。
(注:比特幣核心的“賬戶”功能在幾年前就被棄用了)