解密QQ消息文件格式

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情
QQ的消息实际上是存放在本地的,位于"QQ安装目录/QQ号码/MsgEx.db"内。关于QQ消息文件格式的文章,网上有不少,但是没有一篇是完整并且可重现。结合QQ聊天记录察看器 5.1,我做了一些研究,重现了读取并显示历史消息的完整过程。

一个很好的学习QQ相关算法的实例,是它的Linux版本 LumaQQ

首先,MsgEx.db文件的大致结构可以参考 QQ聊天记录查看器 5.3 华军版
IStorage的详细介绍可以在MSDN中查到,CHM就是使用了这个格式。为了方便的操作这个COM接口,我们可以直接使用 Decompiling CHM (help) files with C#中提供的RelatedObjects.Storage.dll

消息的加密密码存放在Matrix.db中,提取出来之后就可以解密实际存放消息文本的Data.msj文件了
(值得注意的是,QQ使用的数据加密算法并不是上面帖子里提到的Blowfish,而是TEA算法,可以参考 QQ的TEA填充算法C#实现

QQ分若干种消息类型,诸如双人消息、群消息和系统公告等,格式有一些差异。

具体的细节,看看代码就清楚了。一个简单的QQ消息类的实现如下:

namespace Van.Utility.QQMsg
{
    public enum QQMsgType
    {
        BIM, C2C, Group, Sys, Mobile, TempSession //Disc
    }

    class QQMsgMgr
    {
        private static readonly int s_MsgTypeNum = (int)QQMsgType.TempSession + 1;
        private static readonly string[] s_MsgName = new string[] {
            "BIMMsg""C2CMsg""GroupMsg""SysMsg""MobileMsg""TempSessionMsg"
        };
        private IStorageWrapper m_Storage;
        private byte[] m_Password;

        private List<string>[] m_MsgList = new List<string>[s_MsgTypeNum];

        public void Open(string QQID)
        {
            Open(QQID, null);
        }
        public void Open(string QQID, string QQPath)
        {
            if (QQPath == null)
            {
                using (Microsoft.Win32.RegistryKey reg = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"Software/Tencent/QQ"))
                {
                    QQPath = reg.GetValue("Install"as string;
                }
                if (QQPath == nullreturn;
            }

            for (int i = 0; i < m_MsgList.Length; ++i)
            {
                m_MsgList[i] = new List<string>();
            }
            m_Storage = null;
            m_Password = null;

            m_Storage = new IStorageWrapper(QQPath + QQID + @"/MsgEx.db");
            m_Password = QQMsgMgr.GetGlobalPass(m_Storage, QQID);

            if (m_Password == null) m_Storage = null;

            foreach (IBaseStorageWrapper.FileObjects.FileObject fileObject in m_Storage.foCollection)
            {
                if (fileObject.FileType == 1)
                {
                    for (int i = 0; i < m_MsgList.Length; ++i)
                    {
                        if (fileObject.FilePath == s_MsgName[i])
                        {
                            m_MsgList[i].Add(fileObject.FileName);
                        }
                    }
                }
            }
        }

        public void OutputMsg()
        {
            for (int i = 0; i < s_MsgTypeNum; ++i)
            {
                OutputMsg((QQMsgType)i);
            }
        }
        public void OutputMsg(QQMsgType type)
        {
            if (m_Storage == nullreturn;
            if (m_Password == nullreturn;

            int typeIndex = (int)type;
         &nb
逆向工程实战:构建跨平台QQ聊天记录解密与解析工具 数据加密与解密是信息安全领域的核心概念,其原理在于通过特定算法和密钥对原始信息进行变换,以实现数据的保密性。在工程实践中,针对特定应用(如即时通讯软件)的私有数据格式进行逆向解析,是理解其内部数据存储机制、实现数据自主管理的关键技术。这项技术的价值在于打破数据壁垒,赋予用户对自身数据的完全控制权,尤其适用于数据迁移、归档分析和跨平台兼容等场景。本文聚焦于QQ本地数据库,其数据通常经过自定义加密和序列化处理,例如采用异或(XOR)或TEA系列算法,并结合SQLite存储。通过逆向工程分析其密钥推导逻辑(如基于 阅读详情

相关推荐

QQ协议分析(八)

<br />0x00CD(发送消息)<br /> <br />02 1A 35 00 CD 3A F7 00 66 13 D0 02 00 00 00 01 01 01 00 00 64 00 25 9F 67 6B 16 C0 87 E4 9B 5F <br />FD E4 D4 58 37 43 02 26 09 13 FA 52 42 54 A4 9C 0F 6D D7 83 26 BD E3 91 F7 F7 F1 D4 CD 11 C1 80 <br />BC FB 36 C6 86 EC E7

疯狂的甜橙 1737

特别信息代码

这是一串很特别的信息代码。希望对有需要的人一些帮助。

QQ聊天记录解密技术解析:从本地加密到数据自主备份

本地数据加密是保护用户隐私的核心技术,其原理是通过密钥对存储在设备上的敏感信息进行加密处理,确保即使数据文件被非法获取也无法直接读取。在即时通讯领域,这种技术广泛应用于保护聊天记录等用户数据,实现端到端或设备绑定的安全防护。从技术价值看,理解本地加密机制不仅有助于增强数据安全意识,也为合法合规的数据迁移、备份和恢复提供了可能。在实际应用场景中,用户可能因设备更换、系统升级或应用故障,需要访问被加密的本地数据,这就涉及对加密存储结构和密钥管理机制的分析。以SQLite数据库加密和AES算法为例,常见的实现方式

weixin_30275415的博客 639

QQBake.rar(QQ消息备份、读取)

QQ历史消息的读取、备份。MsgEx.db转换成txt

手机QQ聊天记录文件解密方法学习

解密手机QQ聊天记录方法汇总 解密方法: (1)聊天记录内容明文:D (2)聊天记录内容密文:E (3)手机IMEI(MEID): IMEI (4)公式:E = D^IMEI 具体实现: 1,聊天记录文件采用UTF-8编码保存,以汉字为例,一个汉字3个字节。 2,IMEI号码采用ASCII字符编码,每个字符占1个字节。 BYTE msg_t[64];//保存聊天...

相信未来! 1万+

解密QQ的MsgEx.db消息文件格式

QQ消息实际上是存放在本地的,位于"QQ安装目录/QQ号码/MsgEx.db"内。关于QQ消息文件格式的文章,网上有不少,但是没有一篇是完整并且可重现。结合QQ聊天记录察看器 5.1,做了一些研究,重现了读取并显示历史消息的完整过程。 一个很好的学习QQ相关算法的实例,是它的Linux版本LumaQQ 首先,MsgEx.db文件的大致结构可以参考QQ聊天记录查看器 5.3 华军版 ISto

王以山的专栏 1万+

安卓 qq 聊天记录数据库解密的一个误区

在 UTF-8 长度为四个字节的情况下(例如某些 emoji),UTF-16BE 会将其转换为两个 char,如果我们再按照一个 char 去解密,就会出现乱码。当然,在字节长度 1-3 的情况下,直接按照 UTF-8 解密也是可以的,但是在字节长度为 4 的情况下,就会出现乱码,需要特别注意。其实这个问题应该是在 Java 外的语言中才会出现,安卓 QQ 的加密方法是写在 so 层的,传入的是 Java 层的。安卓解密的具体方法我就不再赘述了,大体方法都是正确的,这里只讲我遇到的问题。

qq_33974611的博客 1103

QQ聊天记录如何加密

原文链接:http://www.baiyikeji.com/rjgc/265.htm QQ,就是OICQ,TENCENT公司研发的即时信息软件,是中国市场上国产IM软件绝对的老大。中国网民几乎人手至少一个QQ号码。大家都比我清楚,不多介绍。   本文谈谈QQ的安全问题。   QQ具有如此惊人的人气,却有着与之不相称的安全问题。基本上可以说,使用QQ,基本没有任何隐私可言!另外它也为你的电脑带

翟冬狼_Trump 9457

OICQ 99c版本加密方法研究报告

OICQ是Internet网上常用的通信软件,本文将给出OICQ最新版99c的口令加密方法、与服务器进行通讯的加密方法和用户之间的加密加信方法。一、 口令加密每个oicq帐号的口令都保存在本地的一个文件中。登录oicq时,先将输入的口令与本地的文件进行比较。如果口令与文件中保存的不符,将提示"输入的密码与上次成功登录的密码不一致,是否到服务器验证?"。OICQ 99c的口令文件为matrix.cn

蝈蝈俊.net 2127

QQ协议TEA加密解密代码 C#

网上找到的qq协议的TEA加密和解密说明如下: 也有很多源代码,但是感觉上代码比较复杂,不容易看。我用C#重写了下。 基于2008协议     * QQ消息的加密算法是一个16次的迭代过程,并且是反馈的,每一个加密单元是8字节,输出也是8字节,密钥是16字节     * 我们以prePlain表示前一个明文块,plain表示当前明文块,crypt表示当前明文块加密得到的密文块,preCry

邱征响的专栏 5307

Android 手机QQ聊天记录导出(NTQQ),解密聊天数据库

本教程导出的聊天记录QQ版本的NT版本的,即QQ8.9之后的版本,我的QQ版本是9.1.50.23520,QQ8.9之后的版本为NT架构,如果是之前的版本,建议查看另一个大佬的项目:[地址]

butterfly_new的博客 1万+

tea qq消息

<br /> 代码  1     /// <summary><br />  2     /// 加密解密QQ消息包的工具类.<br />  3     /// </summary><br />  4     public static class QQCrypter<br />  5     {<br />  6         private static Random Rnd = new Random();<br />  7         private static void code(byte[]

dieindark的专栏 541

实现QQ登陆、获取QQ信息,分享消息QQ

实现QQ登陆、获取QQ信息,分享消息QQQQ的SDK下载:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

QQ坦白说之解密教程

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34378969的博客 1122

微信小程序加密消息解密工具类

开发者后台校验与解密开放数据 微信会对这些开放数据做签名和加密处理。开发者后台拿到开放数据后可以对数据进行校验签名和解密,来保证数据不被篡改。 签名校验以及数据加解密涉及用户的会话密钥 session_key。 开发者应该事先通过wx.login登录流程获取会话密钥 session_key 并保存在服务器。为了数据不被篡改,开发者不应该把 session_key 传到小程序客户端...

hzau_itdog的博客 3810

c# tea算法_C#中QQ协议TEA加密解密代码

网上找到的qq协议的TEA加密和解密说明如下: 也有很多源代码,但是感觉上代码比较复杂,不容易看。我用C#重写了下。* QQ消息的加密算法是一个16次的迭代过程,并且是反馈的,每一个加密单元是8字节,输出也是8字节,密钥是16字节* 我们以prePlain表示前一个明文块,plain表示当前明文块,crypt表示当前明文块加密得到的密文块,preCrypt表示前一个密文块* f表示加密算法,d表示...

weixin_39939665的博客 704

音频解密工具全攻略:3步解锁QQ音乐加密格式

还在为QQ音乐的加密音频无法在其他设备上播放而烦恼吗?今天我们就来聊聊如何用专业的音频解密工具,快速将QMC3、QMC0、QMCFLAC等加密格式转换为通用的MP3或FLAC格式,让你的音乐收藏真正实现跨平台自由!🎵 ## 为什么需要音频解密?🤔 你有没有遇到过这样的情况:在QQ音乐下载的歌曲,想在车载音响、其他播放器或者朋友的设备上播放时,却发现文件无法识别?这是因为QQ音乐采用了特殊

gitblog_01081的博客 965

QQ红包技术方案全解密(一)

前言自2015年春节以来,QQ春节红包经历了企业红包(2015年)、刷一刷红包(2016年)和AR红包(2017年)几个阶段,通过不断创新玩法,活跃度节节攀升,成为春节一大玩点,给火红的春节带来一抹亮色。2017年除夕,AR红包、刷一刷红包再创新高,抢红包用户数达 3.42 亿,共刷出红包 37.77 亿个。那么,QQ红包的技术方案究竟是怎样的?其整体架构如何?重要的系统是如何设计的?为了保证用户...

qq_42330464的博客 5973

QQ配置文件解密(转)

QQ的安装目录下以你的QQ号码为名字的文件夹里有几个关键文件,保存着你的QQ的一些信息,如果用好了它们,可以玩出一些有趣的花样,用来捉弄人也可以。 MsgEx.db文件:是你正常登陆过QQ后生成的,如果删除该文件QQ就会无法正常登陆!不过,如果用其他QQ号码文件夹下的同名文件覆盖它,则可以正常登陆。(这个是消息记录,要备份消息记录就是这个东东) ewh.db文件:同样是正常登陆后生成的文件,它用...

Flosing的博客 1554
上一篇: C++ Internals: VC RTTI - dynamic_cast (2)
下一篇: C++ Internals: 序言
vbvan
博客等级 码龄19年 132粉丝 40原创
评论 39
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值