wechat dbcracker
1.0.0
破解某宿主環境的微信資料庫,從而取得其聊天歷史記錄
如果使用wechaty
之類的微信機器人,只可以hook 每個即時訊息,無法完整取得歷史聊天記錄。
不過如果在wechaty
的框架內,再加上取得聊天記錄的api,也許是可行的。
而由於微信聊天記錄都是存在資料庫的,因此可以從資料庫角度進行取得。
因為微信聊天記錄是儲存在sqlcipher
的,它是支援加密的sqlite
資料庫,需要秘鑰才能打開,因此我們要先拿到資料庫的秘鑰。
以MacOS 為例,我們可以使用一些逆向手段( dtrace
)hook 程式的資料庫活動,由於程式開啟資料庫涉及到金鑰的讀取,我們可以解析這個讀取動作,從而獲得明文秘鑰。
理論上任何平台都可以實現,尤其是Android、Windows 等平台,逆向工程師更多、破解起來難度可能更小,但我個人的主力機是Mac/iOS,因此暫時沒有考慮相容Windows/Android 生態。
其次,PC端的工程能力比行動端豐富,因此,優先考慮在PC端突破,是性價比較高的選擇。
目前我們的dtrace 腳本以及整個hook 的邏輯,需要確保MacOS 微信客戶端的版本在3.6以下。
微信往期版本的下載位址:Older versions of WeChat (Mac) | Uptodown
MacOS 上要設定好能讀寫sqlcipher 的環境。
# 1. check where is your `libcrypto.a`
brew list openssl | grep libcrypto.a
# 或者 find /usr/local/Cellar -name libcrypto.a
# 2. use the libcrypto.a with openssl version >= 3
LIBCRYPTO={YOUR-libcrypto.a}
# 3. install sqlcipher
git submodule add https://github.com/sqlcipher/sqlcipher
cd sqlcipher
./configure --enable-tempstore=yes CFLAGS= " -DSQLITE_HAS_CODEC "
LDFLAGS= $LIBCRYPTO --with-crypto-lib=none
make
# need password
sudo make install
需按住cmd + shift + R 進入安全模式(Mac Studio 上長按電源鍵即可)
# check SIP
csrutil status
# disable SIP, need in recovery mode (hold on shift+R when rebooting)
csrutil disable
tip: 需要確保運行正確的、版本對應的微信程序
# comparing to `wechat-decipher-macos`, I make the script more robust.
# 由于key是固定的,也可以把输出内容持久化,只需要在命令后面加上 `> data/dbcracker.log`
pgrep -f /Applications/WeChat-3.6.0.app/Contents/MacOS/WeChat | xargs sudo core/dbcracker.d -p > .keys
tip: 對鍵的讀取動作,會在登入時產生,因此需要先執行程序,再登入。
由於我們已經得到了各個資料庫的儲存位址、秘鑰、版本等,我們便可以程式化的讀取所有資料。
pysqlcipher
node-sqlcipher