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

关于wx数据库,如何查看群聊中具体群成员的ID? #31

Closed
EDWINCHENC opened this issue Nov 23, 2023 · 2 comments
Closed

关于wx数据库,如何查看群聊中具体群成员的ID? #31

EDWINCHENC opened this issue Nov 23, 2023 · 2 comments
Labels
新需求 New feature or request

Comments

@EDWINCHENC
Copy link

根据MSG数据库的解析,似乎我们只能获得群聊的ID也就是StrTalker, 那么如果要定位某一位群成员的聊天记录,似乎没有记录?
群成员的固定ID和聊天记录能定位到吗?请问如何定位和查找?
现在要分析聊天记录,只能分析整个群的,每个群成员的发言没法区分开来?
MSG
localId:字面意思消息在本地的 ID,暂未发现其功用
TalkerId:消息所在房间的 ID(该信息为猜测,猜测原因见 StrTalker 字段),与Name2ID对应。
MsgSvrID:猜测 Srv 可能是 Server 的缩写,代指服务器端存储的消息 ID
Type:消息类型,具体对照见表1
SubType:消息类型子分类,暂时未见其实际用途
IsSender:是否是自己发出的消息,也就是标记消息展示在对话页左边还是右边,取值0或1
CreateTime:消息创建时间的秒级时间戳。此处需要进一步实验来确认该时间具体标记的是哪个时间节点,个人猜测的规则如下:
从这台电脑上发出的消息:标记代表的是每个消息点下发送按钮的那一刻
从其它设备上发出的/收到的来自其它用户的消息:标记的是本地从服务器接收到这一消息的时间
Sequence:次序,虽然看起来像一个毫秒级时间戳但其实不是。这是CreateTime 字段末尾接上三位数字组成的,通常情况下为000,如果在出现两条CreateTime 相同的消息则最后三位依次递增。需要进一步确认不重复范围是在一个会话内还是所有会话。CreateTime 相同的消息则最后三位依次递增。需要进一步确认不重复范围是在一个会话内还是所有会话。
StatusEx、FlagEx、Status、MsgServerSeq、MsgSequence:这五个字段个人暂时没有分析出有效信息
StrTalker:消息发送者的微信号。特别说明,从这里来看的话,上面的TalkerId 字段大概率是指的消息所在的房间ID,而非发送者ID,当然也可能和TalkerId属于重复内容,这一点待确认。
StrContent:字符串格式的数据。特别说明的是,除了文本类型的消息外,别的大多类型这一字段都会是一段 XML 数据标记一些相关信息。通过解析xml可以得到更多的信息,例如图片的宽高、语音的时长等等。
DisplayContent:对于拍一拍,保存拍者和被拍者账号信息
Reserved0~6:这些字段也还没有分析出有效信息,也有的字段恒为空
CompressContent:字面意思是压缩的数据,实际上也就是微信任性不想存在 StrContent 里的数据在这里(例如带有引用的文本消息等;采用lz4压缩算法压缩)
BytesExtra:额外的二进制格式数据
BytesTrans:目前看这是一个恒为空的字段

@xaoyaoo
Copy link
Owner

xaoyaoo commented Nov 24, 2023

我也正在找这个字段在哪里,暂时还没有找到。如果你找到后,可以帮忙修改pull

@EDWINCHENC
Copy link
Author

EDWINCHENC commented Nov 24, 2023

以下是目前能知道的一些线索:
1、找到StrTalker这个id,这个id只是群的id,到Chatroom表,你就可以对应到群名字;找到群名字那个记录,顺便把RoomData数据,可以拿到usernamelist (protobuf格式);
2、找到StrTalker同时,在MSG内对应的这条记录里面,还有个BytesExtra,这个是二进制的protobuf格式,把它解码,就拿到了群聊里面发送者id;
3、把第1步拿到的RoomData(也是protobuf格式)解码,得到每个人的微信群昵称?,把第2步拿到的发送者id到这个里面匹配,就匹配到群聊里面发送者id了;
以上基本能定位到,但还是有些许问题,需要项目主一起琢磨,例如群聊RoomData/usernamelist里面可能没有这个BytesExtra 内id对应信息,只能拿这个id去chatroom表里面查表找到NickName和Remark了;微信记录里面的BytesExtra和RoomData有时各种格式还是不一致的……等诸多问题.....

我也正在找这个字段在哪里,暂时还没有找到。如果你找到后,可以帮忙修改pull

@xaoyaoo xaoyaoo added the 新需求 New feature or request label Nov 25, 2023
xaoyaoo added a commit that referenced this issue Dec 6, 2023
@xaoyaoo xaoyaoo closed this as completed Dec 6, 2023
xaoyaoo added a commit that referenced this issue Dec 6, 2023
xaoyaoo added a commit that referenced this issue Dec 6, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
新需求 New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants