旧博文,搬到 csdn
原文:http://rebootcat.com/2018/03/05/export_mac_wechat/
前头的话
最近由于手机内存告急,打算对手机进行一下瘦身。其中手机微信占用了将近 5G,这个简直太可怕了,于是打算把微信聊天记录备份到电脑上。本来备份就备份了,也没啥好说的,不过突发奇想想知道 Mac Wechat 把聊天记录备份到哪了?或者说平常聊天的数据放在哪里了?能不能把这些聊天记录导出成 txt 文件呢?
于是就有了这篇文章。
导出微信聊天记录为txt
导出微信聊天记录最简单的一种方式应该是使用 itunes 对 iphone 进行不加密备份,然后找到备份文件里面的数据,据说聊天记录是以明文的方式存在 DB 中的。这种方法我没去试过,这里主要讲一下通过破解微信 DB,读取到聊天记录,然后导出聊天记录。
微信数据目录
# 替换其中的 smaug 为你自己的用户名
cd /Users/smaug/Library/Containers/com.tencent.xinWeChat/Data/Library/Application Support/com.tencent.xinWeChat/2.0b4.0.9find ./ -name "*.db"
以上目录就是微信数据存储的目录,可以看到有很多 db 文件:
.//37cc38007838aa28296af491b890575f/ChatSync/ChatSync.db
.//37cc38007838aa28296af491b890575f/Message/msg_1.db
.//37cc38007838aa28296af491b890575f/Message/msg_5.db
.//37cc38007838aa28296af491b890575f/Message/msg_4.db
.//37cc38007838aa28296af491b890575f/Message/msg_0.db
.//37cc38007838aa28296af491b890575f/Message/fts/ftsmessage.db
.//37cc38007838aa28296af491b890575f/Message/msg_7.db
.//37cc38007838aa28296af491b890575f/Message/msg_3.db
.//37cc38007838aa28296af491b890575f/Message/msg_2.db
.//37cc38007838aa28296af491b890575f/Message/msg_6.db
.//37cc38007838aa28296af491b890575f/Message/msg_9.db
.//37cc38007838aa28296af491b890575f/Message/msg_8.db
.//37cc38007838aa28296af491b890575f/Sync/openim_oplog.db
其中类似于 msg_0.db、 msg_1.db 的就是聊天记录的数据文件,只不过是加过密的数据库,没法直接看。不过好在有各路大神,可以参考文末的参考链接。
破解步骤
1.打开 Mac Wechat,但是不要登录
2.打开终端,输入命令
lldb -p $(pgrep WeChat)
lldb 是在 mac 上的一个调试工具,上面的意思是使用 lldb attach 到 WeChat 这个进程上,进行调试,回车之后进入 lldb 调试界面
3.在 lldb 调试界面输入命令
br set -n sqlite3_key
然后回车。
这时调试屏幕上可能会出现一些 error,可以暂时忽略,不用管。
4.输入 c 回车
5.然后正常登录 Mac Wechat,点击登录,手机上点击允许(或者是扫码登录),不用关心此时 Mac Wechat 是否被卡住
6.接着输入命令
memory read --size 1 --format x --count 32 $rsi
回车。
读取内存中 寄存器 rsi 存储的值。大致回输出如下的字样:
其中下面的这段是我们关心的:
0x604004c346a0: 0xad 0x5c 0xff 0x0a 0x85 0xce 0x4a 0x5e
0x604004c346a8: 0x9f 0x7f 0x8a 0xd3 0xa6 0xc6 0x02 0xf3
0x604004c346b0: 0x25 0x02 0xb1 0x48 0x4c 0x76 0x4c 0x84
0x604004c346b8: 0x82 0x38 0xc3 0x17 0x4d 0x27 0x14 0x33
把前面 0x604004c346b0: 去掉,同时删除后面所有的 0x 和空格,拼接成一个字符串为 (总共 64 个字符):
ad5cff0a85ce4a5e9f7f8ad3a6c602f32502b1484c764c848238c3174d271433
前面加上 0x 就是我们用来破解 DB 的 key:
0xad5cff0a85ce4a5e9f7f8ad3a6c602f32502b1484c764c848238c3174d271433
到这里基本上就相当于拿到了微信数据库的 key 了,接下来就是用这个 key 打开 DB 文件了。
TODO(smaug)