2023年12月7日发(作者:)

基于QQ的DB文件格式解析

摘要

QQ作为国内主流的在线即时通讯软件,已经成为当今人们的重要通讯手段之一。由于QQ用户规模巨大,很多不法分子便自然的以QQ作为媒介来进行违法犯罪活动。针对通过QQ进行的网络犯罪,QQ客户端的数据文件便成为调查取证的重要对象。而其首要条件就是要对QQ客户端的数据文件进行格式解析。本文对DB数据文件格式进行了解析,能够实现查看和导出本地所有QQ的聊天记录,从而为证据信息的取得提供了重要手段。

关键词

QQ Blowfish算法 聊天记录

QQ DB File Format Analysis

Abstract

QQ is the domestic mainstream online immediate communication software,

it become one of people’s important communication methods. As the large size of QQ

users, a great many of lawless man carry out illegal criminal activities by QQ. In allusion to

the crime of networks which carrys on by QQ, The data file in the QQ client become

important to the evidence collection. Then, the first thing what we should do is analysis the

QQ data file format. The article expound how to analysis the DB file format, and dump all

the local QQ record on chat message in the form of text documents, which provide a

important means to collect evidence.

Key Words

QQ Blowfish arithmetic Chat Record

目 录

引言……………………………………………………………………………………1

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

1.1 QQ简介 ………………………………………………………………2

1.2 db格式文件的介绍 ……………………………………………………3

第二章 Blowfish算法介绍…………………………………………………………9

2.1 Blowfish算法的背景 …………………………………………………9

2.2 Blowfish算法的特性…………………………………………………9

2.3 Blowfish算法的实现 …………………………………………………9

第三章 聊天记录的解析 ………………………………………………13

3.1聊天记录的查看方法…………………………………………13

3.2聊天记录的存储方式…………………………………………14

3.3聊天记录的存储结构…………………………………………14

3.4解析流程图…………………………………………………15

3.5解析的代码实现………………………………………………17

3.5.1 读取QQ号码 ……………………………………………17

3.5.2 访问文档………………………………………17

3.5.3 访问……………………………………………17

3.5.4 获取消息加密密码…………………………………………20

3.5.5 解密消息内容………………………………………………21

3.5.6 导出消息内容…………………………………………………22

3.6程序运行效果…………………………………………………23

第四章 总结与展望 ……………………………………………………………24

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

参考文献 …………………………………………………………………………26 引 言 基于QQ的DB文件格式解析

引 言

在线即时通讯技术是高新网络通讯技术的一部分,通过即时通讯,你能方便的与来自世界的各地的网络用户进行交流沟通。即时通讯所具备简便、实时、快捷的特点使得它得以在社会生活的各个方面得以发展应用,如:商务、交友、娱乐、服务等。网络技术的进一步发展更促进了即时通讯技术与生活各层面的交融。

QQ作为国内主流的在线即时通讯软件,注册帐号数多达5.9亿,总活跃帐号数超过3亿,最高同时在线帐号数多达4000多万,QQ的用户数已经覆盖了我国网民的90%之多。如此庞大的用户规模,一旦有不法分子混入,而广大网民又疏于防范的情况下,就很容易出现网络诈骗横行的局面。针对通过QQ进行的网络犯罪,QQ客户端的数据文件便成为调查取证的重要对象。尤其是对本地聊天记录的取证极为重要,从中挖掘、捕获直接的犯罪信息成为调查取证的重要手段。

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

本文分为四个部分:

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

第二章:Blowfish算法介绍

第三章:聊天记录的解析

第四章:总结与展望

- 1 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

第一章

QQ及其DB数据文件的介绍

1.1 QQ简介

QQ也就是OICQ,也叫做腾讯即时聊天工具。QQ以前也是模仿ICQ者,ICQ是面向国际的一个聊天工具,是I seek you(我找你)的意思。OICQ意为Opening I seek you,意思是“开放的ICQ”。到了2000年腾讯的OICQ占领了中国在线即时通讯90%以上的市场。这时候腾讯为避免AOL控诉其侵权的风险,腾讯做出了一个提前的自我保护的改变,OICQ正式更名为QQ。

软件特点:由于QQ在我国的普及率很高,这使得QQ的用户数量和易用性在同类软件中占有绝对的优势。此外,QQ聊天界面设计合理,用户操作十分简单。腾讯QQ支持在线聊天、即时传送视频、语音和文件等多种多样的功能。同时,QQ也可与移动通讯终端、IP电话网、无限寻呼等多种通讯方式相连,这使QQ不仅仅是单纯意义上的网络虚拟呼机,而更是一种方便、实用、高效的即时通讯工具。

其聊天界面如下:

- 2 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

1.2 db格式文件介绍

本地所有的QQ用户数据、聊天记录及其系统设置都存储在后缀名为db的数据文件中,文件大小不定。其db数据文件默认存放目录为X:Program FilesTencentQQ用户QQ号码。其中X代表盘符,默认为C盘。该目录下默认的db数据格式文件有: 、、、、、、。如下图:

1.2.1

为QQ系统配置文件。

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

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

- 3 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

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

QQ服务器地址,如下图:

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

- 4 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

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

1.2.2

为QQ备忘录管理文件。

文件大小始终为3KB,内容被加密。初步理解为用来管理用户信息备忘录。

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

1.2.3

为QQ共享信息设置文件。

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

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

1.2.4

为QQ本地好友列表文件。

- 5 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

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

文件为QQ本地存放用户好友分组等信息的文件。下面简单分析下文件格式,取的串是里某个QQ号码的信息。

文件原始数据:

51 44 : "QD"数据段标志代表QQ Data;

01 01 :保留的数据结构;

58 00 :总数据段;

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

03 00 :1S标志的长度;

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

04 00 00 00 :1S数据的长度;- 6 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

9A 4D 1F 04 :1S数据,此处为QQ号码,即69160346 0x041F4D9A(高位在前);

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

04 00 :2S标志的长度;

B5 BA B6 BE :2S标志,此处是昵称标志;

04 00 00 00 :2S数据长度;

35 25 35 29 :2S数据,昵称内容,已被加密;

2S数据加密的分析:

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

显示为:35 25 35 29 ;

其转换过程与2S数据长度有关系,取第一个字节 0x000035与 0x0000FB(255-2S数据长度=251)的值异或,得 206 ,进行判断 得数<160,则单字符值(单个可见字符的ASC<160),得值>160,表明应是2字节的字符,所以取0x00003525 与0x00FBFB异或,得到ASC码值52958换为16进制表示为0xCEDE,这便是昵称的第一个字符“无”。当然后面的 35 29 也是这样转,得到的就是字符“我”。

1.2.5

为QQ密码信息文件。

QQ 密码在用户正确登陆后,会将加密的结果保存在用户目录的文件中。该文件采用公开的MD5算法加密,通过N次循环以及异或后求反,然后将计算出的加密结果与用户的文件中的密文比较后,发出“输入密码与上次成功登陆密码不一致,$0A是否到服务器验证?” (这条信息在(QQ的登陆控件)的资源中,$0A在C的格式化中为回车)。根据这个提示,就有可能完成本地QQ密码的破解。

文件原始数据:

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

- 7 - 第一章 QQ及其DB数据文件的介绍 基于QQ的DB文件格式解析

1.2.6

为QQ 聊天记录文件。

采用Storage结构化存储。通过VC自带的DocFile Viewer工具查看该文件的内容,能够看到文件结构大致如下:

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

QQ用户聊天记录内容都存储在QQ号码下面的中,通过索引。消息内容是经过加密处理的,必须经过解密才能看到。消息内容采用Blowfish分组加密,每8个字节为一个分组。密钥Key通过QQ号码生成,具体算法下章讨论。

1.2.7

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

- 8 - 第二章 Blowfish算法介绍 基于QQ的DB文件格式解析

第二章 Blowfish算法介绍

2.1 Blowfish算法背景

Blowfish算法是1993年由Bruce Schneier提出的备选加密方法,它是一种强对称的分组密码,使用32位至448位可变长度密钥,应用内部加密或加密输出。自32位处理器诞生后,Blowfish高效、容易实现等优良性能得以体现,正越来越多的应用于电子商务、军事、安全通信等诸多领域,逐步取代了DES和IDEA算法。

2.2 Blowfish算法特性

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.3 Blowfish算法的实现

Blowfish算法是用来加密64Bit长度的字符串,Blowfish算法使用两个“盒”ungigned long pbox[18]和unsigned long sbox[4][256]。Blowfish算法中,有一个核心加密函数:BF_En,该函数输入64位信息,在运算后,以64位密文的- 9 - 第二章 Blowfish算法介绍 基于QQ的DB文件格式解析

形式输出。用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对输入信息进行变换,详细变换过程如下:- 10 - 第二章 Blowfish算法介绍 基于QQ的DB文件格式解析

其中函数F:把XL分为4个8位分组:a、b、c和d.

函数F定义如下:

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

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

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

2.3.3 信息解密

用Blowfish算法解密,需要经过密钥预处理和信息解密两个过程。- 11 - 第二章 Blowfish算法介绍 基于QQ的DB文件格式解析

密钥预处理过程与信息加密过程的密钥预处理完全相同,信息解密过程就是把信息加密过程中的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用来加密。

- 12 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

第三章 聊天记录的解析

3.1 聊天记录的查看方法

自从有了即时聊天软件,伴随来的就是各种聊天记录查看工具,当然前提是在不知道即时通讯软件登陆密码的情况下。相对与完全没有加密,隐藏的MSN来说, QQ的聊天记录查看就显得复杂了一些.具体来说,主要有两种方法:

3.1.1 hook方式

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

3.1.2 解密方式

直接读取QQ的在本地消息记录文件,这种方式是对QQ的文件格式进行解析。也就是说,通过第三方软件来实现QQ的消息管理器功能借以查看QQ聊天记录。

应该说两个方法各有优缺点,并且实现的技术也迥然不同。总的来说hook方式界面是特别友好的,因为它直接使用了QQ的自身功能,但是这类程序大都捆绑了木马,使用起来安全性不高。此外Tencent对这种方式比较敏感,往往一个新的版本出来,原来的hook方式就没用了。解密方式最主要的特点是利用了消息密钥Key是通过QQ号码生成的来进行运算,如果使用了QQ的本地信息安全,即将本地聊天记录进行加密,那就没办法解密了。此外中QQ消息的具体格式是未知的,往往无法完全还原聊天内容,如表情,图片,字体等就无法恢复。

- 13 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

3.2 聊天记录存储方式

QQ聊天记录存放在文档中,早期版本的聊天记录是保存在文档中,两个文档的结构并不相同。本文主要针对新版本QQ的聊天记录文件进行分析。文档的存储目录为:X:Program FilesTencentQQ用户QQ号码。

3.3 聊天记录存储结构

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

从的文档结构中,可以看到QQ分了若干消息类型,诸如好友消息C2CMsg、系统信息SysMsg、多人聊天消息DiscMsg、群组消息GroupMsg、移动QQ消息MobileMsg、临时会话消息TempSessionMsg,在每个类型的消息下都有和两个文件。聊天记录内容就存放在每个QQ号码下- 14 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

的中,为一个索引文件,具体消息内容已经经过加密。消息的加密密码存放在中,提取出来之后就可以用来解密实际存放消息记录的文件了。

3.4 解析流程图- 15 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

输入指向QQ聊天记录文档的路径信息

从存放的路径信息中读取QQ号码信息

取得QQ号码(Y/N)

N

Tell me the QQ number

Y

输入QQ号码

访问消息文档

Invalid QQ

message file

N

复合文档(Y/N)

Y

StgIsStorageFile函数打开复合文档得到根存储接口指针hr

使用MsgEx_EnumStorage函数枚举复合文档的内部存储结构

使用TNode_find函数找到

并返回存储接口指针node

使用MsgEx_DecodeMatrixDB函数解码取得CRK字段

将QQ号码进行MD5变换,得到MD5Key:UidMd5

用UidMd5对CRK字段解密得到消息加密密钥pMsgExKey

使用消息加密密钥pMsgExKey通过函数QQMSG_decode对加密消息进行解密

导出聊天记录内容,保存至QQ号码.txt文本文档

- 16 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

3.5 解析的代码实现

3.5.1 读取QQ号码

消息内容是通过Blowfish分组加密,每8个字节为一组。密钥Key则是通过QQ号码生成的。要解密聊天记录,需要文件和对应用户的QQ号码。QQ号码可以通过文件的存储路径信息来读取。

3.5.2 访问文档

文档采用IStorage结构化存储,可以通过WIN API函数StgOpenStorage()打开它,得到它的根存储接口指针hr。由hr出发可以遍历整个文档。代码实现如下:

3.5.3 访问

1) 取存储接口指针

消息的加密密码就存储在的数据中。要获得加密密码的

密文就必须取得的数据,并对其进行解码。为取得- 18 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

的数据必须先知道存储的接口指针node。实现代码如下:

TNode_find函数定义如下:

结构体TNode定义如下:

2) 文档结构分析

取得的存储接口指针后,为取得的具体数据,需要先对文档的结构进行分析。采用分块存储,每个MatrixDbRecord都由类型、名字长度、名字、内容长度、内容几个字段组成。

- 18 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

用数据结构来表示如下:

3) 的解码

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

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

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

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

- 19 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

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

CPH、 CAH等字段,其中长度为32字节的CRK字段就是消息加密密码的密文。获取CRK字段的代码实现如下:

其中MsgEx_FindMatrixDB定义如下:

3.5.4 获取消息加密密码

将QQ号码pUid进行MD5变换,得到Md5Key。代码实现如下:

- 20 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

其中函数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两步;- 21 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

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

Blowfish解密函数blowfish_decrypt定义如下:

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

3.5.6 导出消息内容

解密聊天记录后,为方便查看消息内容,将聊天记录以文本文档的形式导出。文档名定为QQ号码.txt。保存在程序根目录下。

实现代码如下:- 22 - 第三章 聊天记录的解析 基于QQ的DB文件格式解析

3.6 程序运行效果

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

"QQ安装目录QQ号码 " QQ号码

如下图:

- 23 - 第四章 总结与展望 基于QQ的DB文件格式解析

第四章 总结与展望

本文对QQ聊天记录db文件存储格式进行了解析,可以实现完整的记录本地电脑上的所有的QQ聊天信息,不需要密码,不需要登录QQ窗口,便能查看本地电脑上所有QQ号码的聊天记录,包括聊后立即删除的记录。并能够以文本文档的形式导出聊天记录信息。从而可以很好的解决通过QQ进行诈骗等犯罪活动带来的取证难的难题。对计算机调查取证有很大的帮助,可以作为计算机调查取证软件的一部分。

随着网络即时通讯技术的发展和变革,即时通讯软件对信息安全的保障也在不断提高。针对通过即时通讯软件进行的网络犯罪活动,要实现从聊天记录中提取证据信息,必须对即时通讯软件的聊天记录文件进行解析和技术跟踪。这是计算机调查取证技术的重要组成部分之一,也是计算机调查取证技术所待变革的一部分。

- 24 - 致谢语 基于QQ的DB文件格式解析

- 25 - 参考文献 基于QQ的DB文件格式解析

参考文献

[1] 林丽闽,楮尚军著 标准C++程序设计教程[M]. 北京:电子工业出版社, 2003.

[2] 孙鑫,余安萍著. VC++深入详解[M]. 北京: 电子工业出版社, 2006.

[3] 谭浩强著. C程序设计[M]. 北京:清华大学出版社, 1999.

[4] 姚领田著. 精通MFC程序设计[M]. 北京:人民邮电出版社, 2006.

[5] 唐克著.MFC程序设计:using Visual C++ 6.0[M]. 北京:希望电子出版社,2002.

[6] 乔林,杨志刚.Visual C++ 6.0高级编程技术:MFC与多线程篇[M].北京:中国铁道出版社,2000.

[7] Blowfish算法源代码[Z]. /

[8] Blowfish算法说明[Z] /cto/p72/

[9] MD5算法[Z]. /view/

[10]QQ介绍[Z]. /view/

- 26 -