更新
已将研究成果整合至文档: QQDecrypt:QQ 聊天数据库解密。
前言
不管是出于希望将聊天记录保存到本地,还是需要导出和将聊天记录用于语言模型训练等用途,都需要导出 QQ 聊天记录这一步。
近期发现 QQNT 也存在导出聊天记录的方法,遂进行尝试和记录,感谢各位前辈的探索和作出的贡献。
环境及准备工作
我的环境是 Windows10,QQNT 9.9.11-24568,Python 3.10.6。
需要任意一款反编译软件,以及用于查看数据库的 DB Browser for SQLite(安装包来自网络,可从参考文献第一条中获取链接)。
操作的所有文件建议在操作前进行备份。
逆向获取数据库密码
由于本人不会逆向,是按照参考文献第一条中的记录进行操作,故在此不重复记录。
需要注意的是附加到的进程是从上往下的第一个,与参考博客中的描述并不一致,也许不同设备会有不同。
如果进程选择正确,在附加后需要一定时间加载,且过程中有弹出窗口,并在 F9 继续运行之前无法使用 QQ,并在登录后触发断点。如果进程选择错误则以上会有不同,关掉 QQ 重新附加即可。
从数据库中导出数据
依旧按照参考文献第一条中的记录进行操作,不重复记录。
其中 nt_msg.header.txt 使用文本编辑器打开后可以在文件开头看到 SQLite header 3 以及 QQ_NT DB、HMAC_SHA1 等字样。亲测使用笔记本打开会显示乱码,而使用 VS Code 打开没有问题。
在 DB Browser for SQLite 中,打开菜单->工具->设置加密,不输入密码直接点击 OK 以解除数据库加密。
以私聊数据表 c2c_msg_table 为例,这里介绍一部分关键数据。
列名
类型
含义
说明
40050
int
发送时间
单位为秒的时间戳
40058
int
发送时间
单位为秒的时间戳,精确到天
40030
int
私聊对象
对方 QQ 号(无论是对方还是自己发送的消息)
40033
int
消息发送者
发送者的 QQ 号
40093
str
消息发送者
QQ 昵称或是备注名
40800
protobuf
消息内容
格式较为复杂,可使用 CyberChef 工具进行解析
关于 40800 的解析,由于较复杂所以不展开。
至此,已可以使用 sql 命令或编写程序导出数据。
附录
参考文献
GitHub - mobyw/GroupChatAnnualReport: 使用 QQNT Windows 聊天记录制作群聊年度报告!
GitHub - Mythologyli/qq-nt-db: QQ NT Windows 数据库解密+图片/文件清理
GitHub - QQBackup/qq-win-db-key: 全平台 QQ 聊天数据库解密
解析 NTQQ 数据库 | 冷月的博客
版权信息
本文原载于 reincarnatey.net,遵循 CC BY-NC-SA 4.0 协议,复制请保留原文出处。