最近在做一個聊天的應用 剛好用到了數(shù)據(jù)庫,看源代碼是把所有的聊天消息都存儲在一張表里的,對數(shù)據(jù)庫不是很懂想著這樣對查詢會不會很慢呢?但是又沒有師傅請教,所以就想著看一下微信的私聊消息是怎么存儲的。剛好看到一篇博客有寫怎么獲取Mac微信聊天記錄,所以就寫下來記錄一下。
感謝原文作者
MacOS版本的微信的聊天記錄保存在如下路徑中的數(shù)據(jù)庫文件中:
~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/*/*/Message/*.db
這些數(shù)據(jù)庫文件都是 sqlcipher 數(shù)據(jù)庫的文件,是加密過的,要解密并讀取加密的數(shù)據(jù)庫,可以按照本文的方法進行操作。
- 打開Mac版微信,但是不要登陸。
- 在命令行下輸入命令 lldb -p $(pgrep WeChat) 后回車,會進入 lldb 的子shell界面。
- 在 lldb 子shell中輸入命令 br set -n sqlite3_key ,回車。
- 再輸入 c ,回車。
- 然后登陸Mac版微信。(此時,Mac版微信可能會暫時無響應,這不影響后續(xù)的操作)
- 在 lldb 子shell中輸入命令 memory read --size 1 --format x --count 32 $rsi ,回車。之后,會輸出類似如下的數(shù)據(jù):
0x000000000000: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
0x000000000008: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
0x000000000010: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
0x000000000018: 0xab 0xcd 0xef 0xab 0xcd 0xef 0xab 0xcd
把0x 去掉 得到一個表示16進制數(shù)的66位的字符串,這個字符串就是下一步要用到的保存微信聊天記錄的數(shù)據(jù)庫的 raw_key。
- 從 https://sqlitebrowser.org/ 下載Mac版本的 DB Browser for SQLite 并安裝。
- 打開 DB Browser for SQLite ,在菜單欄選擇 打開數(shù)據(jù)庫 ,在彈出的對話框中選擇一個保存Mac版微信聊天記錄的數(shù)據(jù)庫文件 *.db,然后在 SQLCipher加密 的界面中,將密碼方式設為 Raw key,將 Encryption settings 選為 SQLCipher 3 defaults,在密碼輸入框中輸入上上一步中得到的66位字符串,點擊 OK 按鈕。
如果以上操作都無錯誤,那么將會成功打開數(shù)據(jù)庫。
感謝原文[作者]https://blog.csdn.net/swinfans/article/details/88712593