在MAC上导出微信聊天记录。

文件位置

这个方法是直接导出MAC端微信的聊天记录,微信保存数据使用的是sqlite,因此要获得.db文件。

1.获得聊天记录数据库文件

路径:/Users/li/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/xxx/Message

2.获得联系人的数据库文件

路径:/Users/li/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/xxx/Contact/wccontact_new2.db

3.群的数据库文件

路径:/Users/li/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9/xxx/Group/group_new.db

数据库密码

微信对db文件都加密过了,所以我们要先取得数据库的密码。

  1. Mac上打开微信,但是不要登录
  2. lldb -p $(pgrep WeChat),这一步需要关闭mac的sip
  3. br set -n sqlite3_key,回车
  4. c,回车
  5. 登录微信
  6. memory read --size 1 --format x --count 32 $rsi,回得到类似下图的输出
1
2
3
4
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
  1. 通过python脚本解密
1
2
3
4
5
6
7
8
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)
  1. 得到的key就是数据库的密码
  2. 下载db工具,https://sqlitebrowser.org/dl/,使用密码打开。 image.png|500

数据格式

表名

Chat_{ID},这个ID使用联系人的wxid或者群聊id,计算md5之后得到的。

聊天数据

每一个Table代表你与一个人/群的聊天记录。

  • mesLocalID:primary key,
  • mesMesSvrID:服务端消息ID,
  • msgCreateTime:消息创建时间(Unix time)
  • msgContent:消息内容(格式为普通文本或XML)
  • msgStatus:消息状态(3表示发送出去的消息,4表示收到的消息)。
  • msgImgStatus:图片状态
  • messgaeType:消息类型(1表示普通文本,3表示图片,34表示语音,43表示视频,47表示表情包,48表示位置,49是分享消息)
  • msgSource:消息来源(仅针对收到的消息)

msgContent:

3表示发送出去的消息,4表示收到的消息。 目前还有个2,但是测试下来,也是自己发送出去的消息。

messgaeType

1, 3, 43, 47, 48, 49, 10000。 10000:修改群聊名称,撤回消息这些。

参考资料