首页
社区
课程
招聘
QQ聊天记录文件存储方式解密
发表于: 2006-12-29 13:12 29089

QQ聊天记录文件存储方式解密

2006-12-29 13:12
29089
QQ聊天记录文件存储方式解密
QUQU<quhongjun@msn.com>
2006/12/29

最近花了几天时间跟踪了一下“QQ聊天记录查看器 5.3 华军版”,总算把聊天记录的存储方法弄清了。大家不要笑我,只是好奇而已,呵呵。

1.聊天记录存储方式
QQ聊天记录保存在MsgEx.db文件中。以前很早的版本是保存在Msg.db中,文件结构也与现在不同,我们就不分析了。

MsgEx.db采用Storage结构化存储。关于Storage复合文档的知识请查阅Microsoft相关文档,我们不做赘述。

大家可以用VC自带的DocFile View工具查看该文件的内容,可以看到文件结构大致如下:

|----MsgEx.db
|    |----C2CMsg
|        |----QQ号码
|            |----Data.msj
|            |----Index.msj
|    |----IMInfo
|        |----info.dat
|    |----Matrix
|        |----Matrix.db
|    |----SysMsg
|        |----10000
|            |----Data.msj
|            |----Index.msj
|    |----DiscMsg
|    |----GroupMsg
|    |----MobileMsg
|---------TempSessionMsg

消息内容都存储在每个号码下面的Data.msj中,通过Index.msj索引。消息内容是经过加密处理的,必须经过解密才能看到。

2.解密方法

消息内容采用BlowFish分组加密。每8个字节为一个分组。密钥Key通过QQ号码生成,具体算法稍后讨论。

解密方法:

a.取前8个字节,通过BlowFish解密, 得到decryptKey;

b.decryptKey与后面8个字节XOR,对结果再进行一次BlowFish解密;

c.将decryptKey与前8个字节XOR,得到第一组结果。

d.decryptKey与后面8个字节XOR,重复b,c两步。

e.最终全部数据解密完毕。

最后会剩下一组8字节无法解密,这个实际上是冗余数据,似乎是用来作为校验。

3.以上解密时,BlowFish的密钥是一个全局公用密钥Key。Key要通过QQ号码生成,具体步骤是:

a.将QQ号码进行MD5变换,得到Md5Key

b.取Matrix.db的数据,对其进行解码。简单说一下Matrix.db文件的结构:
Matrix.db采用分块存储,每个Record包含类型、名字长度、名字、内容长度、内容几个字段组成。用数据结构表示就是:
struct Record{
        char rType;
        short nLen;
        char Name[nLen];
        int rLen;
        char Content[rLen];
};
初始内容也是通过加密存储的。解密方法很简单:将长度的低位字节和高位字节XOR,得到key;将内容逐个与key进行XOR,就得到结果。对名字和内容分别进行解密即可。解密后会看到STL, TIP, CRK, CPH, CAH等字段,不清楚具体的啥含义,感兴趣的同学可以自己去研究研究。我们要用到的是CRK字段,长度为32字节(如果本地聊天记录加密,可能会有变化,没试过)。

将得到的CRK字段作为pData。

c.用Md5Key对pData进行BlowFish解密,得到全局密钥Key

4.以上讨论的都是本地聊天记录没有加密的情况。如果选择了加密,没有密码是肯定解不出来滴,大伙就不用费心了。

后记:

在分析过程中参考了牛人nbw和blowfish的帖子,小弟获益匪浅,在此一并致谢。
http://bbs.pediy.com/showthread.php?threadid=29098
http://bbs.pediy.com//showthread.php?threadid=862&goto=nextoldest

根据以上分析,做了一个小程序。改天找个地方传上来,请大家指正。呵呵。

程序下载:
http://ququ.52pai.com/QQmsg.rar

2007.6.25补充:
最近经常有人找我要源码,所以就干脆公布在这里算了:
http://ququ.52pai.com/QQmsg-src.rar

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 211
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
QQ聊天记录的存放机制不错嘛
2006-12-29 17:01
0
雪    币: 238
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
顶,顶,顶
2006-12-29 17:13
0
雪    币: 254
活跃值: (126)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
好贴子,学习了
2006-12-29 17:34
0
雪    币: 304
活跃值: (82)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
5
挺厉害的嘛,
2006-12-29 17:44
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
最初由 skylly 发布
挺厉害的嘛,
2006-12-29 17:57
0
雪    币: 0
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
7
最初由 syscall 发布
QQ聊天记录文件存储方式解密
QUQU<quhongjun@msn.com>
2006/12/29

最近花了几天时间跟踪了一下“QQ聊天记录查看器 5.3 华军版”,总算把聊天记录的存储方法弄清了。大家不要笑我,只是好奇而已,呵呵。
........


真厉害 楼主是湖北人?

感觉2006的新ID 一个比一个强悍
2006-12-29 18:05
0
雪    币: 440
活跃值: (717)
能力值: ( LV9,RANK:690 )
在线值:
发帖
回帖
粉丝
8
学习

不要用于窥探别人隐私啊
2006-12-29 18:32
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
9
支持一下!以前跟过这个算法,不过网上有公开的源代码,有人给发了一份,韩。
2006-12-29 19:44
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最初由 nbw 发布
支持一下!以前跟过这个算法,不过网上有公开的源代码,有人给发了一份,韩。

汗。。。要是能找到源码,小弟也不用费这老功夫了。。
不过在分析过程中参考了nbw兄的帖子,获益匪浅。
2006-12-30 09:24
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
最初由 syscall 发布
QQ聊天记录文件存储方式解密
QUQU<quhongjun@msn.com>
2006/12/29

最近花了几天时间跟踪了一下“QQ聊天记录查看器 5.3 华军版”,总算把聊天记录的存储方法弄清了。大家不要笑我,只是好奇而已,呵呵。
........


Storage相关内容哪里有?
2006-12-30 09:39
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
12
最初由 syscall 发布
汗。。。要是能找到源码,小弟也不用费这老功夫了。。
不过在分析过程中参考了nbw兄的帖子,获益匪浅。


我?分析文件结构,只是分析了一下里面的解密算法。源代码开始是有人在这个论坛发过,后来不知道什么原因发帖人给删除了,后来有朋友给我传了一份,我也没研究。其实感觉有的用就好,大体了解一下我就不弄了。
2006-12-30 10:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
最初由 堆栈的栈 发布
Storage相关内容哪里有?

这里有一个不错的介绍:
http://www.vckbase.com/document/viewdoc/?id=1483
2006-12-30 10:52
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
最初由 疯狂菜鸟 发布
真厉害 楼主是湖北人?

感觉2006的新ID 一个比一个强悍


汗。。怎么看出来的?
要是再晚几天,俺就是2007年的ID了
2006-12-30 22:45
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 syscall 发布
这里有一个不错的介绍:
http://www.vckbase.com/document/viewdoc/?id=1483


thanks
2006-12-31 09:30
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
最初由 nbw 发布
我?分析文件结构,只是分析了一下里面的解密算法。源代码开始是有人在这个论坛发过,后来不知道什么原因发帖人给删除了,后来有朋友给我传了一份,我也没研究。其实感觉有的用就好,大体了解一下我就不弄了。


也给我发一份吧。
figozhu@gmail.com
2006-12-31 09:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
哇,是不是见者有份?我也要!
quhongjun@gmail.com
2006-12-31 09:56
0
雪    币: 236
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
能给源码我吗?

我想研究c++

谢谢!

我的E-Mail: it_king@21cn.com
2006-12-31 10:19
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
19
汉,我这里真木有了。再说作者既然不想发应该有自己的想法,大家原谅一下。阿门
2006-12-31 10:36
0
雪    币: 218
活跃值: (42)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
解密方法很简单:将长度的低位字节和高位字节XOR,得到key


请问这里的"长度"是什么意思
2007-3-19 22:50
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
最近经常有人找我要源码,所以就干脆公布在这里算了,希望对大家有点帮助。
2007-6-25 10:06
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
谢谢楼主开源啊。
2007-6-25 10:12
0
雪    币: 1272
活跃值: (5124)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
顶一下!!!!!!!!!!!!!
2007-8-20 16:44
0
游客
登录 | 注册 方可回帖
返回
//