微信PC端各个数据库文件结构与功能简述 - Multi文件夹

异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复;本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告。本人所有文章仅在CSDN、掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是盗文!


相关内容:


Multi文件夹中的文件解码和之前的其它数据库操作相同。

该文件夹中文件结构比较简单,只有三种:FTSMSGMediaMSGMSG。这里说是三种不是三个,是因为这里的数据库达到一定大小后会拆分。

FTSMSG

看过《总述》一文的应该很熟悉 FTS 这一前缀了——这代表的是搜索时所需的索引。

其内主要的内容是这样的两张表:

  • FTSChatMsg2_content:内有三个字段
    • docid:从1开始递增的数字,相当于当前条目的 ID
    • c0content:搜索关键字(在微信搜索框输入的关键字被这个字段包含的内容可以被搜索到)
    • c1entityId:尚不明确用途,可能是校验相关
  • FTSChatMsg2_MetaData
    • docid:与FTSChatMsg2_content表中的 docid 对应
    • msgId:与MSG数据库中的内容对应
    • entityId:与FTSChatMsg2_content表中的 c1entityId 对应
    • type:可能是该消息的类型
    • 其余字段尚不明确

特别地,表名中的这个数字2,个人猜测可能是当前数据库格式的版本号。

MediaMSG

这里存储了所有的语音消息。数据库中有且仅有Media一张表,内含三个有效字段:

  • Key
  • Reserved0
  • Buf

其中Reserved0字段MSG数据库中消息的MsgSvrID一一对应

第三项即语音的二进制数据,观察头部即可发现这些文件是以 SILK 格式存储的。这是一种微软为 Skype 开发并开源的语音格式,具体可以自行 Google。

下面是将 Buf 字段中的数据导出为文件的代码:

import sqlite3


def writeTofile(data, filename):
    with open(filename, 'wb') as file:
        file.write(data)
    print("Stored blob data into: ", filename, "\n")


def readBlobData(key):
    try:
        sqliteConnection = sqlite3.connect('dbs/decoded_MediaMSG0.db')
        cursor = sqliteConnection.cursor(<
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

异想之旅

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值