Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

数据库分析进度 #52

Open
weasUXL opened this issue Feb 8, 2025 · 2 comments
Open

数据库分析进度 #52

weasUXL opened this issue Feb 8, 2025 · 2 comments

Comments

@weasUXL
Copy link

weasUXL commented Feb 8, 2025

备份:https://linux.do/t/topic/416092
此处主要是针对nt_msg.db进行分析,很多列名对查看聊天信息本身没有帮助,但是可以用来分类整理消息类型
其余文件分析请看网站

nt_msg.db

group_msg_table

群聊数据 group_msg_table 表中的部分列含义如下:

列名 含义 说明
40001 msgId 消息ID,具有唯一性
40002 msgRandom 随机生成,不具有任何意义
40003 msgSeq 群聊消息ID 在每个群聊中依次递增
40010 chatType 聊天类型 私聊为1,群聊为2,频道为4,公众号为103,企业客服为102,临时会话为100
40011 msgType 消息类型 详见下表
40012 subMsgType pb类型 详见下表
40013 sendType, 发送标志 本机发送的消息为1,其他客户端发送的为2,别人发的消息为0 ,转发消息为5,在已退出或被封禁的消息中为当日整点时间戳
40020 senderUid nt_uid, 对应 nt_uid_mapping_table
40026 疑似cntSeq 🔴 大概率对数据显示无意义
40021 peerUid,群号
40027 peerUin,群号
40040 目前只清楚自己发的可能为1(但是也发现极少数存在1的现象),其余QQ用户均为0 🔴 大概率对数据显示无意义
40041 sendStatus,发送状态 2为成功,0为发送被阻止(如不是对方好友),1为尚未发送成功(比如网络问题),3为消息被和谐
40050 msgTime, 发送时的完整时间戳 UTC+8:00
40052 暂时无法理解,全是0( 🔴 大概率对数据显示无意义
40090 sendMemberName,发送者群名片 旧版 QQ 迁移数据中格式为 name(12345)name<[email protected]>, QQNT 中为群名片
40093 sendNickName,发送者昵称 旧版 QQ 此字段为空,QQNT 中未设置群名片时才有此字段
40080 聊天消息,最为复杂 尚未解析完
40900 不同情况下存在不一样的数据(以列40011为区分) 值为8时,列40900存贮转发聊天的缓存
值为9时,列40900存贮引用的消息
40105 推测为editable(未完全确定) 🔴 大概率对数据显示无意义
40005 只知道自己发的消息一定概率存在数值 正常情况为0
40058 当日 0 时整的时间戳格式 时区为 GMT+0800
40006 elem id? 不知道用处
40100 @状态 详见下表
40600 状态标志? protobuf 格式,详见说明
40060 已退出或已解散的群聊标志
40850 回复消息序号 该消息所回复的消息的序号
40851 全是0…… 🔴 大概率对数据显示无意义
40601 全是null值 🔴 大概率对数据显示无意义
40801 无法理解的protobuf
40605 全是null值 🔴 大概率对数据显示无意义
40030 群号 QQNT 保存的群号
40033 发送者 QQ 号 QQNT 保存的发送者 QQ 号
40062 存贮详细表态信息(包括表态表情和表态数量) 其数字与QQBOT中表情编号对应(超级表情不在此列表中)
40083 表态表情数量总和
40084 表态表情数量总和

[size=130][b]注意:以下信息可能存在不准确性:
所有值均为本人通过自己的聊天信息推断而来,可能存在未发现或错误分析,欢迎大佬指正[/b][/size]

40011部分值信息解读

展开阅读 疑似用于区分消息类型

无消息(消息损坏?多见于已退出群聊且时间久远):0

消息空白(msgid存在,应该是没加载出来):1

text文本消息:2

群文件:3

我的聊天记录里没有4~大佬带带>︿<

系统(灰字)消息:5

语音消息:6

视频文件:7

合并转发消息:8

回复类型消息:9

红包:10

应用消息:11

40012部分值信息解读

展开阅读 疑似用于区分pb消息类型

非常规text消息:0

普通文本消息:1

群文件其他类型消息:1

图片消息:2

群文件图片消息:2

群公告:3

群文件视频消息:4

撤回消息提醒:4

群文件音频消息:8

原创表情包:8

射精消息:11

拍一拍消息:12

群文件docx消息:16

平台文本消息:32

群文件pptx消息:32

回复类型消息:33

群文件xlsx消息:64

存在链接:161

群文件zip消息:512

群文件exe消息:2048

表情消息:4096

40011与40012组合可判断消息类型

一些常见消息组合 由于优先级问题(特别是2类别的信息),部分消息不满足以下规则 空消息:0,0

已撤回消息:1,0

普通文本类消息:2,1

图片消息:2,2

只带图片的纯文本消息:2,3

纯表情消息:2,16

带表情的纯文本消息:2,17

带图片带表情的纯文本消息:2,19

纯链接消息:2,129

带表情链接消息:2,145

机器人消息:2,577

机器人Markdown消息:2,65

@消息:2,35

回复引用消息(不带表情):2,33

回复引用消息(带表情):2,49

收藏表情:2,2

收藏表情包:2,4096

群文件其他类型消息:3,1

群文件图片(png,jpg)消息:3,2

群文件视频消息:3,4

群文件音频(mp3,flac)消息:3,8

群文件docx消息:3,16

群文件pptx消息:3,32

群文件xlsx消息:3,64

群文件zip消息:3,512

群文件exe消息:3,2048

拍一拍消息:5,12

撤回消息提醒:5,4

amr语音文件消息:6,0

视频文件消息:7,0

合并转发消息:8,0

回复消息:9,33

回复带图片消息(无@):9,34

回复带图片消息(有@):9,35

回复带图片带@:9,35

回复卡片引用消息:9,49

带表情回复:9,49

带表情带图片带@:9,51

回复存在链接的消息:9,161

红包:10,0

应用消息(如小程序):11,0

群公告:11,3

表情包:17,8

原创表情:17,8

40100值解读

值为6:有人@我;为2,有人@他人;为0,此条消息不包含@

40600值解读

展开阅读 当40600值为`14 00`时,为回复消息

此时:40100的值:

为6代表有人回复自己,为2代表他人回复他人

当40600值为c2e9130c98ce14 ** ** ** ** 06a8d11400时,为撤回消息

c2c_msg_table

私聊数据 c2c_msg_table 表中的部分列含义如下:

列名 类型 含义 说明
40030 int 私聊对象 QQ 号 对方 QQ 号(无论是对方还是自己发送的消息)
40033 int 发送者 QQ 号 发送者的 QQ 号
40050 int 时间 时间戳(单位为秒)
40058 int 日期 当日 0 时整的时间戳格式
40093 str 消息发送者 QQ 昵称或是备注名
40800 bytes 消息内容 protobuf 格式

Protobuf 消息格式

消息内容 protobuf 的部分字段含义如下:

Field Number 类型 含义 说明
40800 protobuf 或 protobuf array 消息段 一条消息中可以有多个消息段,按内容顺序,类似于富文本;部分类型中可嵌套

消息段(40800)的部分字段含义如下:

Field Number 类型 含义 说明
45001 int 消息段 ID
45002 int 消息类型 见下表
45101 str 消息文本 适用于文本消息
45102 str 图片文件名 适用于图片消息
45402 str 图片文件名 适用于图片消息
45411 int 图片宽度(压制后) 适用于图片消息
45412 int 图片高度(压制后) 适用于图片消息
45812 str 本地缓存目录 适用于图片消息
45815 str 替代文本,如 "[动画表情]" 适用于图片消息
47402 int 原消息序号 适用于引用消息
47403 int 原消息发送者 适用于引用消息
47404 int 原消息时间 适用于引用消息
47410 protobuf 格式复杂,存储原消息文本,疑似原消息过期后用以替代 47423 适用于引用消息
47413 str 显示的引用文本 适用于引用消息
47423 protobuf 引用消息段(嵌套) 适用于引用消息
47713 str 撤回消息后缀 适用于系统撤回消息
48602 str XML 消息内容 适用于 XML 消息

其中消息类型(45002)的已知消息类型与对应序号如下:

45002 含义 说明
1 文本消息 普通纯文本消息,以及 at 消息本质上为独立成消息段且内容为 "@群昵称" 的消息,包含于此
2 图片消息
3 文件消息
4 语音消息
6 表情 https://bot.q.qq.com/wiki/develop/api/openapi/emoji/model.html
7 引用 即常说的“回复”,位于消息段开头,其后为正式消息
8 系统消息 显示于屏幕中央的灰色小字提示,如撤回、接收文件
10 应用消息
11 表情
16 XML 消息 转发聊天记录本质上也是 XML 消息,包含于此
21 通话消息
26 动态消息
@artiga033
Copy link

artiga033 commented Feb 12, 2025

请问这些不同数据库文件前面的1024个字节有什么共同点吗?我在尝试写一个sqlite的vfs来做到直接读取而不用手动拆分文件,不过没有确定检测一个db是普通的sqlitedb还是ntqq的db的办法

edit:
目前来看几个平台几个数据库文件的[32,40]个字节都是固定的

51 51 5f 4e 54 20 44 42 │QQ_NT\x20DB

@weasUXL
Copy link
Author

weasUXL commented Feb 12, 2025

请问这些不同数据库文件前面的1024个字节有什么共同点吗?我在尝试写一个sqlite的vfs来做到直接读取而不用手动拆分文件,不过没有确定检测一个db是普通的sqlitedb还是ntqq的db的办法

edit:
目前来看几个平台几个数据库文件的[32,40]个字节都是固定的

51 51 5f 4e 54 20 44 42 │QQ_NT\x20DB

是的,另外除了gpro_v1-6_{nt_uid}.db文件的密钥与众不同,同一设备上的数据库密钥都相同(但是如果重装或清除过数据密钥会发生改变)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants