阅读视图

发现新文章,点击刷新页面。

学习笔记 | QQNT 聊天记录导出

更新

已将研究成果整合至文档: 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 DBHMAC_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 命令或编写程序导出数据。

附录

参考文献

  1. GitHub - mobyw/GroupChatAnnualReport: 使用 QQNT Windows 聊天记录制作群聊年度报告!

  2. GitHub - Mythologyli/qq-nt-db: QQ NT Windows 数据库解密+图片/文件清理

  3. GitHub - QQBackup/qq-win-db-key: 全平台 QQ 聊天数据库解密

  4. 解析 NTQQ 数据库 | 冷月的博客

版权信息

本文原载于 reincarnatey.net,遵循 CC BY-NC-SA 4.0 协议,复制请保留原文出处。

❌