微信数据库解析总结

article/2025/9/21 20:59:17

1.微信数据库解密

  • 微信数据库在在哪个文件夹

    EnMicroMsg.db的父文件加密规则是 md5("mm" + uin)这样就可以准确的获取到db文件的位置.

    uin的获取:/data/data/com.tencent.mm/shared_prefs/auth_info_key_prefs.xml`里面有个uinz字段,直接获取value值,示例如下图所示:

  • 解密微信数据库:目前只涉及两个数据库EnMicroMsg.db(微信数据涉数据库)和WxFileIndex.db(文件索引数据库)

    解密的密码:md5(手机imei+uin)的32位字符串取前7位,如果imei拿不到就用1234567890ABCDEF代替

项目推荐:基于SpringBoot2.x、SpringCloud和SpringCloudAlibaba企业级系统架构底层框架封装,解决业务开发时常见的非功能性需求,防止重复造轮子,方便业务快速开发和企业技术栈框架统一管理。引入组件化的思想实现高内聚低耦合并且高度可配置化,做到可插拔。严格控制包依赖和统一版本管理,做到最少化依赖。注重代码规范和注释,非常适合个人学习和企业使用

Github地址:https://github.com/plasticene/plasticene-boot-starter-parent

Gitee地址:https://gitee.com/plasticene3/plasticene-boot-starter-parent

微信公众号:Shepherd进阶笔记

2. 好友相关信息

微信的好友相关数据涉及三张表:rcontact,bizinfo,img_flag

  • rcontact表存放了该账号涉及的所有账号(微信账号,群账号)的基本信息(eg:微信昵称,备注,原微信号,改之后的微信号,全拼等等)。如下图所示:

  • bizinfo表存放的是该账号的好友微信号,群账号,这里好友包括已经通过的和添加没通过的,如下所示:

  • img_flag表存放该账号所有涉及的微信(好友,同属一个群不是好友,添加的陌生人)的头像地址,数据如下图所示:

    总结:rcontact表是一张基础表,存放所有的账号基本信息,bizinfo存放是该账号的好友信息或者群组信息,img_flag存放了微信账号对应的头像信息,以下场景有:

    • 获取微信好友信息,查询sql如下:

      select r.username, r.alias, r.conRemark, r.nickname, r.pyInitial, r.quanPin,r.encryptUserName, i.reserved2 from rcontact r INNER JOIN img_flag i  on r.username = i.username where r.type&2=2  and r.username not like '%@chatroom' and i.lastupdatetime > 0
      
    • 获取添加未通过的好友信息,此时有两种情况:1)添加同属一个群的好友。2)添加陌生人。比如说通过微信号,扫码什么。这两种情况在数据库的表现形式是不一样的,添加同属一个群的,在bizinfo表会插入一条username为添加好友的微信号记录,而如果是添加陌生人,则username是一个以@stranger结尾的key,对应的数据如下图所示:

      注意:这里如果通过微信号,扫码添加的陌生人,其username是一长串的以@stranger结尾的key,同 时pyInitial,qunPin两个字段存的并不是这个陌生人的微信号

      查询sql如下:

      SELECT r.username, r.alias, r.conRemark, r.nickname, r.pyInitial, r.quanPin, r.encryptUserName, i.reserved2 FROM rcontact r INNER JOIN bizinfo b ON r.username = b.username INNER JOIN img_flag i ON r.username = i.username 
      WHERE r.type <> 33 and r.type & 2 <> 2 AND r.username <> '当前微信号' AND r.username NOT LIKE '%@chatroom' AND b.updateTime > 0
      
    • 获取同属一个群但不是好友的基本信息:

      查询sql如下:

      SELECT DISTINCT r.username, r.alias, r.conRemark, r.nickname, r.pyInitial, r.quanPin, i.reserved2 FROM rcontact r  INNER JOIN img_flag i ON r.username = i.username 
      WHERE  r.username not in(select username from bizinfo) and i.lastupdatetime >0

    3.微信群组

    微信群组信息表为chatroom,存放着一些基本信息,数据如下图所示:

    注意:微信群组一开始建立显示群昵称是所有好友微信昵称加起来的一个字符串,即displayname字段,但是如果修改了群昵称之后,显示的是修改之后的,这时候需要根据根据群账号chatroomname去rcontact表做关联查询,根据rcontact表的username等于群账号查询出一条记录,此时这条记录的字段nickname即修改后的群昵称,查询sql如下:

    select c.chatroomname, c.memberlist, c.displayname, c.roomowner, c.selfDisplayName, r.nickname from chatroom c inner join rcontact r on r.username = c.chatroomname where c.modifytime > 0

    目前的微信群组的头像在img_flag表没有存储,暂时找不到资源所在

    4.微信聊天数据

    微信的聊天记录是保存在message表中的,数据示例如下图:

    msgSvrId:唯一标示一条聊天记录的id,可以作为更新聊天记录数据的条件

    createTime:发送消息的时间

    talker:如果是群账号,说明这条消息是群会话消息,发送人在content内容前面(发送人微信号:发送内容);如果是好友微信号,说明这条消息是好友会话消息

    isSend:发送或者接收标志。0:接收 1:发送

    type:消息类型 1:文本内容(包括小表情) 3:图片 34:语音 43:视频 47:大表情 49:文件

    436207665:微信红包 419430449:微信转账

    图片,视频,语音, 文件 根据msgId去索引库WxFileIndex的表WxFileIndex2查询

    • 图片查询sql:

      select * from WxFileIndex2 where msgId in(msgIds) and msgType=3 and msgSubType20
      
    • 语音查询sql:

      select * from WxFileIndex2 where msgId in(msgIds) and msgType=34
      
    • 视频查询sql:

      select * from WxFileIndex2 where msgId in(msgIds) and msgType=43 and msgSubType=1
      
    • 文件查询sql:

      select * from WxFileIndex2 where msgId in(msgIds) and msgType=49 and msgSubType = 34
      
    • 大表情查询sql:根据groupId去找到对应的包名,md5即表情的文件名

      select e.md5, e.groupid, m.msgSvrId from emojiinfo e INNER JOIN message m on e.md5=m.imgpath where m.type=47
      

    微信数据的撤销删除仍需要研究,待补充,未完待续…


http://chatgpt.dhexx.cn/article/LdKbiWJC.shtml

相关文章

微信个人公众号推广

作者&#xff1a;余伟峰链接&#xff1a;https://www.zhihu.com/question/34151231/answer/118281456来源&#xff1a;知乎著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 &#xff08;转&#xff09; 个人公众号常见的运营和推广可以参考以…

微信小程序云开发|个人博客小程序

&#x1f315;文章目录 1.前言2.博客首页数据展示3.使用data中的数据渲染博客展示4.使用云数据库创建集合blogs5.读取数据库中的数据6.创建添加博客页面7.博客添加页面样式设计8.总结 1.前言 这篇文章详细的介绍了个人博客小程序的云开发流程&#xff0c;包括博客展示页面&…

【个人开发】通过企业微信实现消息推送到个人微信

1. 背景 个人有个消息推送到任务&#xff0c;一直在飞书上跑&#xff0c;消息触达率太低&#xff0c;寻思着尝试用一些方法&#xff0c;将消息推送到微信。 2. 写在前面 坑1&#xff1a;寻思着企业微信有机器人&#xff0c;将机器人所在群拉上微信号&#xff0c;结果&#x…

个人开发者实现微信扫码登录

使用码上登录中转微信扫码登录 使用之前最好有一个公网服务器&#xff0c;能够公网访问的 redis 和 mysql 数据库&#xff0c;并且能够部署公网访问的服务 码上登录是一个小程序&#xff0c;对个体开发者提供了免费的微信扫一扫登录入口&#xff1a;官网 http://login.vicy.c…

深度解读企业微信与个人微信的区别?

收到我们售前服务团队同事的反馈&#xff0c;很多老板或运营小伙伴并不是很清楚个人微信与企业微信具体有哪些本质区别&#xff0c;很多人还停留在企业微信只是作为OA办公打卡工具的认知内。 今天我们将从11个要点28个细分点来聊一聊企业微信作为私域流量运营必备工具&#xff…

个人小程序申请微信支付

个人小程序如何申请微信支付功能&#xff1f; 给你们看一下效果 一、准备材料 ① 个体户营业执照 1️⃣可以去当地 工商局办理&#xff0c;免费&#xff08;一般提供一个地址&#xff0c;提供3张身份证复印件&#xff09; 2️⃣可以去淘宝叫人代理办理&#xff0c;收费&…

VC/MFC 检查指定的文件是否存在 判断文件是否存在

#include <iostream> #include <windows.h> #include <tchar.h>/*功能: 检查指定的文件是否存在编译环境: VS2017, 字符集可随意切换 */// 函数功能: 检查指定的文件是否存在, 文件存在则返回 TRUE, 不存在则返回 FALSE // LPCTSTR lpszFile 要检查的文件的绝…

html 判断本地文件存在,javascript怎么判断文件是否存在?

javascript怎么判断文件是否存在&#xff1f;下面本篇文章就来给大家介绍一下利用javascript判断文件是否存在的方法&#xff0c;希望对大家有所帮助。 在JavaScript中&#xff0c;可以通过ActiveXObject对象判断本地文件路径来判断本地文件是否存在&#xff0c;网络文件通过判…

matlab怎么分析数据,MATLAB应用——数据分析与统计

数学建模是用数学方法解决各种实际问题的桥梁,它已经渗透到各个领域,而且发挥出越来越重要的作用。面对自然科学和工程应用中的难题,大部分人无从入手,而个别人却能短时间内给出切实可行的解决方案,其差别往往在于驾驭数学知识的能力不同。现代计算机技术的应用不仅减少了…

大数据分析那点事

写在前文&#xff0c;首先声明博主对数据分析领域也在不断学习当中&#xff0c;文章中难免可能会出现一些错误&#xff0c;欢迎大家及时指正&#xff0c;博主在此之前也曾对不同量级、不同领域的数据进行过分析&#xff0c;但是在过程中总是感觉有许多困惑&#xff0c;即自己也…

【python与数据分析】Python与数据分析概述

目录 一、认识数据分析 1、数据分析的方法论与数据分析方法 &#xff08;一&#xff09;七何分析法——建立框架 &#xff08;二&#xff09;演绎树分析法——问题分层 &#xff08;三&#xff09;PEST分析法——设计环境 &#xff08;四&#xff09;金字塔原理分析法——…

2022年10个最佳地理空间数据分析 GIS 软件

数据可视化并不是简单的把数据变成图表, 而是以数据为视角看待世界。换言之&#xff0c;数据可视化的客体是数据&#xff0c;但我们往往想要的其实是数据视觉&#xff0c;以数据为工具&#xff0c;以可视化为手段&#xff0c;目的是描述真实&#xff0c;探索世界。GIS 就是这样…

数据分析报告编写规范

Ⅰ、数据分析报告编写规范 - 资料来源&#xff1a;百度文库 一份专业的数据分析报告&#xff0c;除了图表化呈现数据分析结果&#xff0c;还需要介绍此项分析的背景/目的&#xff0c;通过此次分析得到结论&#xff0c;以及结合业务知识给出的建议。在做数据报告之前&#xff0…

python数据分析常用图大集合

我们在做数据分析的时候&#xff0c;难免会用到图像来表示你要展示的东西&#xff0c;接下来写一下demo来表示一下各种图&#xff1a; 以下默认所有的操作都先导入了numpy、pandas、matplotlib、seaborn import numpy as np import pandas as pd import matplotlib.pyplot as…

数据分析自学路线

首先必须要对想要自学数据分析的朋友表示敬佩&#xff01;数据分析是个很庞大的学科体系&#xff0c;零零碎碎的知识点可能一辈子都学不尽&#xff0c;敢自学挑战的一定是个学习力和行动力超强的人&#xff01; 作为一个非科班转型的初级数据分析师&#xff0c;常有身边朋友问…

Python数据分析常用的类库

本节只对这些库进行一个简单介绍。 1. NumPy NumPy&#xff08;Numerical Python&#xff09;是 Python 科学计算的基础包&#xff0c;它可以提供以下功能。口快速高效的多维数组对象 ndarray。 口用于对数组执行元素级计算和直接对数组执行数学运算的函数。口用于读写硬盘…

10 个最佳地理空间数据分析 GIS 软件

有人说&#xff1a;一个人从1岁活到80岁很平凡&#xff0c;但如果从80岁倒着活&#xff0c;那么一半以上的人都可能不凡。 生活没有捷径&#xff0c;我们踩过的坑都成为了生活的经验&#xff0c;这些经验越早知道&#xff0c;你要走的弯路就会越少。 数据可视化并不是简单的把…

云计算机平台的特性,云平台对比传统平台特点分析

云计算的一个核心理念就是通过不断提高“云”的处理能力来减少用户终端的处理负担,最终使用户终端简化成一个单纯的输入输出设备,并能够按需享受“云”的强大计算能力。 而云计算平台与传统应用模式相比,具有如下特点。 1、虚拟化技术 现有的云计算平台的最大的特点是利用软…

什么是SAP Cloud Platform(SAP云平台) ?

1. 引言 SAP Cloud Platform (SCP) 是SAP目前主推的一个发展方向&#xff0c;从2012年SAP HANA Cloud Portfolio到后来的SAP HANA Cloud Platform&#xff0c;再到2017年SAP Cloud Platform的发布&#xff0c;SAP的云平台经过了一系列的演化过程。 在讨论SCP这一技术时&#…

云计算机是什么原理,云电脑的运行原理是什么?

大家好&#xff0c;这里是酷乐米小编龙牧&#xff0c;达龙云电脑这样的云游戏平台时什么原理来实现让玩家性能不是很好的电脑可以运行大型游戏呢&#xff1f; 这里就要说下云游戏的概念了&#xff0c;云游戏是以云计算为基础的游戏方式&#xff0c;在云游戏的运行模式下&#x…