导出 QQ 聊天记录

Author Avatar
WincerChan 7月 01, 2017
  • 在其它设备中阅读本文章

前言

从 2013 年开始,手机 QQ 就已经不支持私人聊天记录的导出功能了(群聊的记录还是可以导出),目的当然是为了推广超级会员,毕竟超级会员的聊天记录有 2 年漫游时间,而不想给腾讯送钱的我,就只好另辟蹊径了。

准备

我并不算是那种埋头造轮子的人,所以遇到问题总是先问谷歌,确实也寻找到了一些工具,可惜有的不能用能用的还要收费。看来还是需要自己动手(当然,不动手也就没有这篇文章了)。

数据库位置

安卓手机 QQ 的数据库文件保存在 data/data/com.tencent.monileqq/databases/{QQ 号}.db 下,所以一般情况下需要 Root,当然用 adb 工具也可以,这里并非本文的重点,就不展开说了。数据库里面不仅有聊天记录,基本上包括了 QQ 号的所有信息。

不幸的是,里面的重要数据被加密了。

加密方式

另外很幸运的是,加密方式采用的是「异或加密」,而用于加密的字符串就是你手机的 IMEI,所有手机的 IMEI 都是不同的,这样也可以确保加密后的数据是唯一的,既然知道了加密方式和密钥,那么解密自然也就不是难事了。

开始

先想一下,我们聊天记录想导出成什么格式:

我的想法是:时间--发信人--内容 这样的格式。打开数据库文件:

如下图,mr_friend_** **_New 就是你与每一个好友聊天的信息,包括昵称、备注、qq 号码、聊天记录等,直接查看就会发现是被加密过的。这一串 32 位的字符串就是 QQ 号码的 md5 值。

由于 QQ 在手机端使用的数据库是 sqlite,Python 有很方便的 sqlite 的工具,而且 Python 针对字符串处理很方便,这里就采用 Python 来解密。

用浏览工具打开数据库,以我的数据库为例:

msgData 保存的就是聊天记录,selfuin 就是聊天对象的 QQ 号码,time就是发送消息的时间,既然知道了这三个就是我们想要的,那么接下来的就好办多了,解密这三个就好了。

解密

既然牵扯到解密,自然也就逃不掉编码和解码。尤其是 msgData 项,确实是花费了我好久才解决(哼,我才不会说这是因为我对 Python 的编码不熟悉呢)。

代码已托管至 Gist,见这里

参考:

本文标题: 导出 QQ 聊天记录
最后更新:2018 年 05 月 27 日 - 10:05
本文链接:https://blog.itswincer.com/posts/1060d444/
本文采用:署名-非商业性使用-禁止演绎 4.0 国际 协议进行许可,阅读 相关说明