VBGood网站全文搜索 Google

搜索VBGood全站网页(全文搜索)

VB爱好者乐园(VBGood)

 找回密码
 立即注册
搜索
查看: 12205|回复: 22

[转帖] QQ聊天记录存储规则

[复制链接]
 楼主| 发表于 2008-9-5 15:10:28 | 显示全部楼层 |阅读模式


    在百度VB吧看到Ultraman_King贴的网址中的内容..挪个vbg做个备份, 没准哪天心血来潮, 就试试了..



  最近花了几天时间跟踪了一下"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索引。消息内容是经过加密处理的,必须经过解密才能看到。

  QQ聊天记录解密方法

  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.结论

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

评分

参与人数 6威望 +23 人气 +3 收起 理由
xielangfd + 1 收了..3Q..
blk661 + 10 + 2 不错,最好带源码。便于说明实际效果。
新林 + 5 精品文章
DreamonII + 4 精品转载。。。
yimins + 2 不错,如果能写个VB范例出来就更好了
szdan + 2 好东西要支持下!

查看全部评分

发表于 2008-9-5 15:22:43 | 显示全部楼层
好东西 :)

学习一下
回复 支持 反对

使用道具 举报

发表于 2008-9-5 17:45:34 | 显示全部楼层
写个VB例程来玩玩多好呀!
可惜俺不会....
回复 支持 反对

使用道具 举报

发表于 2008-9-5 19:42:35 | 显示全部楼层
看起来就很麻烦也很难~~.....

vb妮可 很有毅力~
回复 支持 反对

使用道具 举报

发表于 2008-9-5 20:07:44 | 显示全部楼层
Ultraman_King?
奥特之王
原来和我是兄弟啊
回复 支持 反对

使用道具 举报

发表于 2008-9-6 09:52:32 | 显示全部楼层
QQ聊天记录无非采用的是复合文档罢了,虽然微软刚刚才公开符合文档结构,但操作复合文档的SDK早已有之。
回复 支持 反对

使用道具 举报

发表于 2008-9-6 10:56:58 | 显示全部楼层
太好了,搞懂了这个就可以偷窥MM们的QQ聊天记录了。
等待妮可心血来潮的那一天。。。
回复 支持 反对

使用道具 举报

发表于 2008-9-7 16:46:32 | 显示全部楼层
真强,mark一下
回复 支持 反对

使用道具 举报

发表于 2008-9-12 09:29:25 | 显示全部楼层
两个字 弓虽
回复 支持 反对

使用道具 举报

发表于 2008-9-30 21:13:11 | 显示全部楼层
一个字“弓虽”
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

文字版|手机版|小黑屋|VBGood  

GMT+8, 2022-7-4 04:59

VB爱好者乐园(VBGood)
快速回复 返回顶部 返回列表