微信已然成为我们(大陆人)生活中最重要的生态系统之一。但相对于其前任的聊天平台而言,聊天记录的备份始终比较封闭:至少 MSN 能够在文件夹里找到明文 XML 格式的记录文件,QQ 也能在桌面端方便导出。
曾经在2015年换手机的时候,使用当时的 iTools 软件进行了一次微信备份,生成了一个「小而美」的 1.5G 备份文件,扩展名为 msgbk。后续,因为手机存储容量有限,没有及时进行恢复。再后来手机容量够用的时候,却发现了难题:
- 新版 iTools 无法读取第一代的 msgbk 文件
- 旧版 iTools 不支持新版 iOS
- 旧版 iTools 可以恢复到旧版 iOS 的设备中,但是旧版微信需要强制升级才能打开
- 旧版微信升级需要升级到新版 iOS
于是便产生了死循环,近七年来一直无解。iTools 的贴吧中也不断有用户询问如何恢复,但均没有解答。不死心之前的记录就此消失的我也始终没有放弃这个文件,无论换了哪个电脑,这个文件一直跟随着我。
昨天,我再一次尝试用 BBedit 打开这个文件,但并不抱希望:因为文件体积太大,打开的时候常常会死机。幸运的是,在假死十几秒之后,文件成功地打开了。不出意外,全屏的乱码。正当我要再一次放弃的时候,我在文件的文件头看到了如下字符:
SQLite
不禁虎躯一震:所以这个 msgbk 并不是 iTools 专有的加密格式,很有可能只是一个套了马甲的SQLite。
预感到七年解密之路即将引来曙光的我,去网上下载了 DB Browser for SQLite ,然后不费吹灰之力成功读取了 msgbk 文件,其中包括三张表:
- T_Friends:好友列表
- T_MsgFile:所有的记录(音频、图片、文件、视频、文字聊天记录)
- T_SavePath:系统信息
在 Browse Data 标签页,选择 T_MsgFile 的 Table,下方窗格中就会显示数据库里所有隐含的信息。
首先在 device path 中搜索 sqlite ,可以得到多个数据库。将名字为 MM.sqlite的数据库选中,点击旁边的 BLOB 随后在右上角的窗格中点击导出。这个文件是所有的文字记录。打开后所有的记录按照好友/群组分为不同的 table,可以筛选后分别导出为 CSV 格式。但不方便的地方在于,所有表的名字在软件中都是乱码形式,无法直接对应到人。
之后可以在 device path 中搜索 Audio,可以得到所有的语音信息。暂时我还没有找到批量导出的方法,需要在右上角窗格中逐个导出为AUD格式,并通过网上的其他方法转换为amr 或 mp3 格式。
而图片就更为直接了。在 device path 中搜索 img,就可以筛选出所有的图片。对于图片,右上角的窗格中可以进行预览,我们就可以在窗格中自己需要的图片,并保存为 JPG 格式。
相信其他的编程大神肯定有更方便的自动化导出方法。但对于技术小白而言,能够成功地打开并提取出文件(尽管是手动的)已经迈出了一大步。
还是希望微信能够早日开放一些更友好、通用的备份方式,虽然很有可能只是我心中的奢望罢了。