备份微信聊天记录

现状

随着时间推移,微信聊天记录占用空间越来越夸张。微信上除了家人和密友,还有了各式各样的群,比如工作群、爱好群。随着手机性能的提升(相机性能导致照片视频变大,运算性能导致可解码的文档变大),聊天记录也突破百 G 并绝尘而去。

虽然近几年手机的存储空间越来越便宜,拿容量当金子卖的苹果也过滤到 128G 起,但不是每个人都有换机计划。

最好的解决方案当然是微信官方出一个云聊天记录的服务,但自从 2021 年传过一次微信拟推出聊天记录付费云存储服务之后,就再无消息。

不能坐以待毙,思考一下目前我们能做些什么。

构思

最佳设计肯定是像 QQ 那样,聊天记录全设备无感漫游。但很显然除了微信官方,谁都做不到。

退而求其次,仅实现手动聊天记录上云,一共需要这么几个功能:

  • 上传,用户手动上传微信聊天记录上云;
  • 下载,用户手动下载微信聊天记录到手机;
  • 查看,用户可以非常灵活的搜索,查看云端聊天记录。

    比如,查看时间为 2021 年 8 月份,对象是所有人,包含关键字“家长会”的聊天记录。
    又比如,查看时间为 2020 年暑假,视频时间超过 1 分钟 的视频。

上传下载

微信将上传下载功能划分为了两类:

  • 备份(Backup)与恢复(Restore)。备份和恢复是全量的、替换的。
  • 迁移(Migrate)。迁移是增量的、合并的。

而在我们的设计里,因为云端要尽量保持完整数据,所以完全不需要全量替换,只要增量迁移。

上传方式

微信官方提供了三种上传方式:

  • 从手机备份到电脑
  • 从手机迁移到电脑
  • 从手机迁移到另一台手机或平板

使用平板端

微信支持三端登录,对普通的上班族来说,使用的优先级应该是手机 > 电脑 > 平板,其中平板很可能从来不用。那么我们就可以利用这点,将平板做为同步的中转站。

推荐使用mumu 模拟器,支持使用平板端的微信。

mumu 内置的 adb 等工具在c:\Program Files\NetEase\MuMu Player 12\shell\

数据解析

微信管理的用户数据大概有这么几类:

  • 聊天记录
  • 图片
  • 视频
  • 语音
  • 文件

根据平台不同,分别存放在不同位置。

解密

微信聊天记录使用了微信自研的数据库框架wcdb,特性是使用了sqlcipher对 sqlite 数据库进行加密,并支持了多种语言环境。

桌面端解密

桌面端的解密可以参考PyWxDump开源项目,项目作者将原理写成了公众号系列文章

移动端解密

android参见文章备份微信聊天记录-android篇