基于QQ的DB文件格式解析Word格式文档下载.docx

上传人:b****5 文档编号:8386274 上传时间:2023-05-11 格式:DOCX 页数:22 大小:663.01KB
下载 相关 举报
基于QQ的DB文件格式解析Word格式文档下载.docx_第1页
第1页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第2页
第2页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第3页
第3页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第4页
第4页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第5页
第5页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第6页
第6页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第7页
第7页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第8页
第8页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第9页
第9页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第10页
第10页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第11页
第11页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第12页
第12页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第13页
第13页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第14页
第14页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第15页
第15页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第16页
第16页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第17页
第17页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第18页
第18页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第19页
第19页 / 共22页
基于QQ的DB文件格式解析Word格式文档下载.docx_第20页
第20页 / 共22页
亲,该文档总共22页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

基于QQ的DB文件格式解析Word格式文档下载.docx

《基于QQ的DB文件格式解析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《基于QQ的DB文件格式解析Word格式文档下载.docx(22页珍藏版)》请在冰点文库上搜索。

基于QQ的DB文件格式解析Word格式文档下载.docx

致谢语……………………………………………………………………………25

参考文献…………………………………………………………………………26

引言

在线即时通讯技术是高新网络通讯技术的一部分,通过即时通讯,你能方便的与来自世界的各地的网络用户进行交流沟通。

即时通讯所具备简便、实时、快捷的特点使得它得以在社会生活的各个方面得以发展应用,如:

商务、交友、娱乐、服务等。

网络技术的进一步发展更促进了即时通讯技术与生活各层面的交融。

QQ作为国内主流的在线即时通讯软件,注册帐号数多达5.9亿,总活跃帐号数超过3亿,最高同时在线帐号数多达4000多万,QQ的用户数已经覆盖了我国网民的90%之多。

如此庞大的用户规模,一旦有不法分子混入,而广大网民又疏于防范的情况下,就很容易出现网络诈骗横行的局面。

尤其是对本地聊天记录的取证极为重要,从中挖掘、捕获直接的犯罪信息成为调查取证的重要手段。

利用本地聊天记录进行取证,首要的任务就是要解析聊天记录的存放格式,将经过加密的二进制文件数据还原为可见的Txt文本文档格式。

本文主要就QQ聊天记录存储格式DB的数据文件格式进行了分析。

本文分为四个部分:

第一章:

QQ及其DB数据文件的介绍

第二章:

Blowfish算法介绍

第三章:

聊天记录的解析

第四章:

总结与展望

第一章QQ及其DB数据文件的介绍

1.1QQ简介

QQ也就是OICQ,也叫做腾讯即时聊天工具。

QQ以前也是模仿ICQ者,ICQ是面向国际的一个聊天工具,是Iseekyou(我找你)的意思。

OICQ意为OpeningIseekyou,意思是“开放的ICQ”。

到了2000年腾讯的OICQ占领了中国在线即时通讯90%以上的市场。

这时候腾讯为避免AOL控诉其侵权的风险,腾讯做出了一个提前的自我保护的改变,OICQ正式更名为QQ。

软件特点:

由于QQ在我国的普及率很高,这使得QQ的用户数量和易用性在同类软件中占有绝对的优势。

此外,QQ聊天界面设计合理,用户操作十分简单。

腾讯QQ支持在线聊天、即时传送视频、语音和文件等多种多样的功能。

同时,QQ也可与移动通讯终端、IP电话网、无限寻呼等多种通讯方式相连,这使QQ不仅仅是单纯意义上的网络虚拟呼机,而更是一种方便、实用、高效的即时通讯工具。

其聊天界面如下:

1.2db格式文件介绍

本地所有的QQ用户数据、聊天记录及其系统设置都存储在后缀名为db的数据文件中,文件大小不定。

其db数据文件默认存放目录为X:

\ProgramFiles\Tencent\QQ\用户QQ号码。

其中X代表盘符,默认为C盘。

该目录下默认的db数据格式文件有:

Config.db、notes.db、User.db、ShareInfo.db、ewh.db、MsgEx.db、CardMgr.db。

如下图:

1.2.1Config.db

Config.db为QQ系统配置文件。

通过VC自带的工具DocFileViewer对该文件进行查看有如下结构:

Config.db文件为QQ的系统配置重要文件,其记录的明文信息大致如下:

QQ系统声音配置,如下图:

QQ服务器地址,如下图:

QQ广告窗口信息,如下图:

QQ系统快速回复信息,如下图:

1.2.2notes.db

notes.db为QQ备忘录管理文件。

文件大小始终为3KB,内容被加密。

初步理解为用来管理用户信息备忘录。

1.2.3ShareInfo.db

ShareInfo.db为QQ共享信息设置文件。

ShareInfo.db文件记录了好友的共享网络硬盘的相关设置信息,包含浏览共享文件、共享文件列表、下载共享文件等信息。

DocFileViewer对该文件进行查看有如下结构:

1.2.4User.db

User.db为QQ本地好友列表文件。

User.db文件为QQ本地存放用户好友分组等信息的文件。

下面简单分析下User.db文件格式,取的串是User.db里某个QQ号码的信息。

User.db文件原始数据:

5144:

"

QD"

数据段标志代表QQData;

0101:

保留的数据结构;

58 

00:

总数据段;

04:

第一个数据段(简称1S,下同)的类型,可以从0x01到0x0F,04代表本数据没经过加密处理;

0300:

1S标志的长度;

A9B5B2:

1S标志(例如AST、UIN、EWH等),是经过简单的异或并求反计算处理的;

04000000:

1S数据的长度;

9A4D1F04:

1S数据,此处为QQ号码,即69160346 

0x041F4D9A(高位在前);

06:

第二个数据段的类型(2S);

0400:

2S标志的长度;

B5BAB6BE 

2S标志,此处是昵称标志;

2S数据长度;

35253529:

2S数据,昵称内容,已被加密;

2S数据加密的分析:

69160346,此号的昵称是“无我”,正常用UE打开显示为:

CEDECED2;

User.db显示为:

35253529;

其转换过程与2S数据长度有关系,取第一个字节0x000035与0x0000FB(255-2S数据长度=251)的值异或,得 

206,进行判断得数<

160,则单字符值(单个可见字符的ASC<

160),得值>

160,表明应是2字节的字符,所以取0x00003525与0x00FBFB异或,得到ASC码值52958换为16进制表示为0xCEDE,这便是昵称的第一个字符“无”。

当然后面的3529也是这样转,得到的就是字符“我”。

1.2.5ewh.db

ewh.db为QQ密码信息文件。

QQ密码在用户正确登陆后,会将加密的结果保存在用户目录的ewh.db文件中。

该文件采用公开的MD5算法加密,通过N次循环以及异或后求反,然后将计算出的加密结果与用户的ewh.db文件中的密文比较后,发出“输入密码与上次成功登陆密码不一致,$0A是否到服务器验证?

”(这条信息在BasicCtrlDll.dll(QQ的登陆控件)的资源中,$0A在C的格式化中为回车)。

根据这个提示,就有可能完成本地QQ密码的破解。

ewh.db文件原始数据:

其中,红色为AST循环次数,蓝色为EWH加密字符串,绿色为QQ号码。

1.2.6MsgEx.db

MsgEx.db为QQ聊天记录文件。

MsgEx.db采用Storage结构化存储。

通过VC自带的DocFileViewer工具查看该文件的内容,能够看到文件结构大致如下:

其中C2CMsg为QQ好友聊天信息,SysMsg为QQ系统信息,DiscMsg为讨论组信息,GroupMsg为群组信息,MobileMsg为移动信息,TempSessionMsg为临时会话信息。

QQ用户聊天记录内容都存储在QQ号码下面的Data.msj中,通过Index.msj索引。

消息内容是经过加密处理的,必须经过解密才能看到。

消息内容采用Blowfish分组加密,每8个字节为一个分组。

密钥Key通过QQ号码生成,具体算法下章讨论。

1.2.7CardMgr.db

对于使用TM的用户会产生这个文件,初步判断是保存好友名片信息的数据文件。

第二章Blowfish算法介绍

2.1Blowfish算法背景

Blowfish算法是1993年由BruceSchneier提出的备选加密方法,它是一种强对称的分组密码,使用32位至448位可变长度密钥,应用内部加密或加密输出。

自32位处理器诞生后,Blowfish高效、容易实现等优良性能得以体现,正越来越多的应用于电子商务、军事、安全通信等诸多领域,逐步取代了DES和IDEA算法。

2.2Blowfish算法特性

2.2.1快速性

Blowfish在32位的微处理器上的加密速度达到每字节18个时钟周期。

2.2.2紧凑性

Blowfish能在容量小于5K的存储器中运行。

2.2.3简单性

Blowfish仅使用了一些简单运算:

基于32位的加、异或和查表。

它的设计容易分析,易于实现和判定算法强度。

2.2.4可变的安全性

通过选择不同的密钥长度选择不同的安全级别。

Blowfish的密钥为32位至448位可变长度密钥,通过密钥扩展可把长度最多达448位的密钥转变成总共4168位的一些字密钥系列。

2.3Blowfish算法的实现

Blowfish算法是用来加密64Bit长度的字符串,Blowfish算法使用两个“盒”ungignedlongpbox[18]和unsignedlongsbox[4][256]。

Blowfish算法中,有一个核心加密函数:

BF_En,该函数输入64位信息,在运算后,以64位密文的

形式输出。

用Blowfish算法加密信息,需要两个过程:

2.3.1密钥预处理

Blowfish算法的源密钥pbox和sbox是固定的。

我们要加密一个信息,需要自己选择一个key,用这个key对pbox和sbox进行变换,得到下一步信息加密所要用的key_pbox和key_sbox。

具体的变化算法如下:

1)用sbox填充key_sbox

2)用自己选择的key8个一组地去异或pbox,用异或的结果填充key_pbox。

key可以循环使用。

比如说:

选的key是"

abcdefghijklmn"

则异或过程为:

key_pbox[0]=pbox[0]^abcdefgh

key_pbox[1]=pbox[1]^ijklmnab

…………

如此循环,直到key_pbox填充完毕。

3)用BF_En加密一个全0的64位信息,用输出的结果替换key_pbox[0]和key_pbox[1],i=0。

4)用BF_En加密替换后的key_pbox[i]和key_pbox[i+1],用输出替代key_pbox[i+2]和key_pbox[i+3]。

5)i+2,继续第4步,直到key_pbox全部被替换。

6)用key_pbox[16]和key_pbox[17]做首次输入(相当于上面的全0的输入),用类似的方法,替换key_sbox信息加密。

2.3.2信息加密

信息加密就是用函数把待加密的信息X(设X为64位输入数据)进行加密。

加密过程如下:

1)将待加密信息X分成32位的两部分:

XL、XR。

2)函数BF_En对输入信息进行变换,详细变换过程如下:

其中函数F:

把XL分为4个8位分组:

a、b、c和d.

函数F定义如下:

3)恢复最后一轮XL和XR的交换:

4)对XL和XR进行异或处理:

5)重新合并XL和XR,重新合并后得到的结果就是我们需要的密文。

2.3.3信息解密

用Blowfish算法解密,需要经过密钥预处理和信息解密两个过程。

密钥预处理过程与信息加密过程的密钥预处理完全相同,信息解密过程就是把信息加密过程中的key_pbox逆序使用即可。

要破解Blowfish算法,就是要得到Blowfish算的的Key。

所以用Blowfish算法进行加密,最重要的也就是Key的选择以及Key的保密。

其中Key的选择可以使用bf_sdk中的_WeakKey函数进行检验。

_WeakKey函数原文说明:

译文如下:

_WeakKey

功能:

测试产生的box是否安全

参数:

返回:

AX=1不安全;

AX=0安全

影响:

AX,BX,CX,DX,SI,DI,方向标志

描述:

使用"

_InitCrypt"

函数产生用于加密的Boxes后,你应该用这个函数测试产生的Boxes是否安全。

如果该key产生的Boxes不安全——可以被密码分析者通过分析Boxes得到key,那么,你应该采用另外一个key产生一个安全的Boxes用来加密。

第三章聊天记录的解析

3.1聊天记录的查看方法

自从有了即时聊天软件,伴随来的就是各种聊天记录查看工具,当然前提是在不知道即时通讯软件登陆密码的情况下。

相对与完全没有加密,隐藏的MSN来说,QQ的聊天记录查看就显得复杂了一些.具体来说,主要有两种方法:

3.1.1hook方式

利用QQ程序在登陆过程中验证密码后才退出QQ界面的bug,使用钩子捕获QQ的登陆状态,在QQ程序提示密码错误的情况下马上进行拦截,使得QQ程序滞留在登陆不成功又可操作状态下,随后即可调用QQ自带的消息管理器进行查看消息。

3.1.2解密方式

直接读取QQ的在本地消息记录文件,这种方式是对QQ的MsgEx.db文件格式进行解析。

也就是说,通过第三方软件来实现QQ的消息管理器功能借以查看QQ聊天记录。

应该说两个方法各有优缺点,并且实现的技术也迥然不同。

总的来说hook方式界面是特别友好的,因为它直接使用了QQ的自身功能,但是这类程序大都捆绑了木马,使用起来安全性不高。

此外Tencent对这种方式比较敏感,往往一个新的版本出来,原来的hook方式就没用了。

解密方式最主要的特点是利用了消息密钥Key是通过QQ号码生成的来进行运算,如果使用了QQ的本地信息安全,即将本地聊天记录进行加密,那就没办法解密了。

此外MsgEx.db中QQ消息的具体格式是未知的,往往无法完全还原聊天内容,如表情,图片,字体等就无法恢复。

3.2聊天记录存储方式

QQ聊天记录存放在MsgEx.db文档中,早期版本的聊天记录是保存在Msg.db文档中,两个文档的结构并不相同。

本文主要针对新版本QQ的聊天记录文件MsgEx.db进行分析。

MsgEx.db文档的存储目录为:

X:

\ProgramFiles\Tencent\QQ\用户QQ号码\。

3.3聊天记录存储结构

QQ聊天记录文件MsgEx.db采用IStorage结构化存储,对于此类复合文档可以通过VC自带的DocFileViewer工具来查看该文档的内容及其结构:

从MsgEx.db的文档结构中,可以看到QQ分了若干消息类型,诸如好友消息C2CMsg、系统信息SysMsg、多人聊天消息DiscMsg、群组消息GroupMsg、移动QQ消息MobileMsg、临时会话消息TempSessionMsg,在每个类型的消息下都有Data.msj和Index.msj两个文件。

聊天记录内容就存放在每个QQ号码下

的Data.msj中,Index.msj为一个索引文件,具体消息内容已经经过加密。

消息的加密密码存放在Matrix.db中,提取出来之后就可以用来解密实际存放消息记录的Data.msj文件了。

3.4解析流程图

3.5解析的代码实现

3.5.1读取QQ号码

消息内容是通过Blowfish分组加密,每8个字节为一组。

密钥Key则是通过QQ号码生成的。

要解密聊天记录,需要MsgEx.db文件和对应用户的QQ号码。

QQ号码可以通过MsgEx.db文件的存储路径信息来读取。

3.5.2访问MsgEx.db文档

MsgEx.db文档采用IStorage结构化存储,可以通过WINAPI函数StgOpenStorage()打开它,得到它的根存储接口指针hr。

由hr出发可以遍历整个MsgEx.db文档。

代码实现如下:

3.5.3访问Matrix.db

1)取Matrix.db存储接口指针

消息的加密密码就存储在Matrix.db的数据中。

要获得加密密码的

密文就必须取得Matrix.db的数据,并对其进行解码。

为取得Matrix.db的数据必须先知道存储Matrix.db的接口指针node。

实现代码如下:

TNode_find函数定义如下:

结构体TNode定义如下:

2)Matrix.db文档结构分析

取得Matrix.db的存储接口指针后,为取得Matrix.db的具体数据,需要先对Matrix.db文档的结构进行分析。

Matrix.db采用分块存储,每个MatrixDbRecord都由类型、名字长度、名字、内容长度、内容几个字段组成。

用数据结构来表示如下:

3)Matrix.db的解码

Matrix.db的初始内容也是通过加密存储的,解密方法是:

a.判断起始字段是否为QD数据段;

b.将长度的低位字节和高位字节异或,得到密钥key;

c.将内容逐个和密钥key进行异或,就得到结果;

d.对名字和内容分别进行解密,解密后会看到STL、TIP、CRK、

CPH、CAH等字段,其中长度为32字节的CRK字段就是消息加密密码的密文。

获取CRK字段的代码实现如下:

其中MsgEx_FindMatrixDB定义如下:

3.5.4获取消息加密密码

将QQ号码pUid进行MD5变换,得到Md5Key。

其中函数MD5定义如下:

用得到的Md5Key对消息加密密码的密文pCRK进行Blowfish解密,得到消息加密密码pMsgExKey。

3.5.5解密消息内容

得到消息加密密码后,便可以利用加密密码对消息内容进行解密。

实现过程描述如下:

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

2)将decryptKey和后面8个字节异或,对异或结果再进行一次BlowFish

解密,得到新的decryptKey;

3)将新decryptKey和前面8个字节异或,得到第一组结果;

4)将新decryptKey和后面8个字节异或,重复2,3两步;

5)最终全部数据解密完毕。

Blowfish解密函数blowfish_decrypt定义如下:

解析完毕后会剩下一组8字节数据无法解密,这组数据当做冗余数据来处理。

3.5.6导出消息内容

解密聊天记录后,为方便查看消息内容,将聊天记录以文本文档的形式导出。

文档名定为QQ号码.txt。

保存在程序根目录下。

3.6程序运行效果

在命令提示符下输入如下格式的指令

QQMsg.exe"

\QQ安装目录\QQ号码\MsgEx.db"

QQ号码

第四章总结与展望

本文对QQ聊天记录db文件存储格式进行了解析,可以实现完整的记录本地电脑上的所有的QQ聊天信息,不需要密码,不需要登录QQ窗口,便能查看本地电脑上所有QQ号码的聊天记录,包括聊后立即删除的记录。

并能够以文本文档的形式导出聊天记录信息。

从而可以很好的解决通过QQ进行诈骗等犯罪活动带来的取证难的难题。

对计算机调查取证有很大的帮助,可以作为计算机调查取证软件的一部分。

随着网络即时通讯技术的发展和变革,即时通讯软件对信息安全的保障也在不断提高。

针对通过即时通讯软件进行的网络犯罪活动,要实现从聊天记录中提取证据信息,必须对即时通讯软件的聊天记录文件进行解析和技术跟踪。

这是计算机调查取证技术的重要组成部分之一,也是计算机调查取证技术所待变革的一部分。

参考文献

[1]林丽闽,楮尚军著标准C++程序设计教程[M].北京:

电子工业出版社,2003.

[2]孙鑫,余安萍著.VC++深入详解[M].北京:

电子工业出版社,2006.

[3]谭浩强著.C程序设计[M].北京:

清华大学出版社,1999.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2