MacOS版本的微信的聊天记录保存在如下路径中的数据库文件中:
~/Library/Containers/com.tencent.xinWeChat/Data/Library/Application\ Support/com.tencent.xinWeChat/*/*/Message/*.db
这些数据库文件都是 sqlcipher
数据库的文件,是加密过的,要解密并读取加密的数据库,可以按照本文的方法进行操作。
-
打开Mac版微信,但是不要登陆。
-
在命令行下输入命令
lldb -p $(pgrep WeChat)
后回车,会进入lldb
的子shell界面。 -
在
lldb
子shell中输入命令br set -n sqlite3_key
,回车。 -
再输入
c
,回车。 -
然后登陆Mac版微信。(此时,Mac版微信可能会暂时无响应,这不影响后续的操作)
-
在
lldb
子shell中输入命令memory read --size 1 --format x --count 32 $rsi
,回车。之后,会输出类似如下的数据: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
-
用Python对上一步得到的数据进行处理,具体代码如下:
source = """ 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 """ key = '0x' + ''.join(i.partition(':')[2].replace('0x', '').replace(' ', '') for i in source.split('\n')[1:5]) print(key) # 输出为:0xabcdefabcdefabcdabcdefabcdefabcdabcdefabcdefabcdabcdefabcdefabcd
上面代码的主要作用是将先
source
中每一行中冒号:
左边的字符去掉,再把剩余的字符中每段表示16进制数的字符的前导标识符0x
去掉,再把得到的所有字符拼接在一起,得到一个64位的字符串,最后,在这个字符串之前添加十六进制的标识符0x
,得到一个表示16进制数的66位的字符串,这个字符串就是下一步要用到的保存微信聊天记录的数据库的raw_key
。 -
从
https://sqlitebrowser.org/
下载Mac版本的DB Browser for SQLite
并安装。 -
打开
DB Browser for SQLite
,在菜单栏选择打开数据库
,在弹出的对话框中选择一个保存Mac版微信聊天记录的数据库文件*.db
,然后在SQLCipher加密
的界面中,将密码方式设为Raw key
,将Encryption settings
选为SQLCipher 3 defaults
,在密码输入框中输入上上一步中得到的66位字符串,点击OK
按钮。
如果以上操作都无错误,那么将会成功打开数据库。
至此,数据库成功打开了,接下来就可以查看或者导出数据库中的数据了。
感谢原作者分享的思路,原文链接如下: