首页 > QQ, 计算机编程 > QQ聊天记录文件存储方式解密

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

2009年6月11日 岩岩魂   访问量: 498 发表评论 阅读评论
QQ聊天记录文件存储方式解密?

最近花了几天时间跟踪了一下“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索引。消息内容是经过加密处理的,必须经过解密才能看到。? BBS.bitsCN.com网管论坛

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];

bbs.bitsCN.com
};

初始内容也是通过加密存储的。解密方法非常简单:将长度的低位字节和高位字节XOR,得到key;将内容逐个和key进行XOR,就得到结果。对名字和内容分别进行解密即可。解密后会看到STL, TIP, CRK, CPH, CAH等字段,不清晰具体的啥含义,感兴趣的同学能自己去研究研究。我们要用到的是CRK字段,长度为32字节(如果本地聊天记录加密,可能会有变化,没试过)。将得到的CRK字段作为pData。?

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

4.结论?

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

相关文章:

  1. 网络游戏外挂核心封包揭密(转)
分类: QQ, 计算机编程 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.