汉语大全>计算机理论>探究QQ即时通讯软件的计算机取证

探究QQ即时通讯软件的计算机取证

详细内容

1 引 言基于 Java 语言的图示信息处理系统 204 QQ 作为国内主流的在线即时通讯软件,QQ 的用户数已经覆盖了我国网民的 90%之多。如此庞大的用户规模,一旦有不法分子混入,而广大网民又疏于防范的情况下,就很容易出现网络诈骗等犯罪现象横行的局面。针对通过 QQ 进行的网络犯罪,QQ 客户端的数据文件是调查取证的重要对象,尤其是对本地好友列表和聊天内容的取证极为重要,可以从中发现联系,进而挖掘、捕获直接的犯罪信息 [1] 。存储好友列表和聊天内容数据的文件是以.db 结尾的复合文档格式,并且其中的有效信息已经过加密处理。本文分别剖析了复合文档格式的内部逻辑结构和各种有效信息的加密及解密方法,最终全面地解析出好友列表和聊天内容,其中好友列表信息包括账号、昵称、备注、真实姓名、年龄、性别、国家 /地区、州/省、城市、个性签名、生肖、血型、职业、星座、生日、毕业院校、电子邮件、联系地址、邮政编码、手机号码、固定电话号码、个人主页、个人说明等信息,聊天内容包括好友信息、群组信息、临时会话信息等信息。

2 复合文档格式分析 2.1 db 文件的位置本地所有的 QQ 用户数据、聊天记录及其系统设置都存储在后缀名为 db 的数据文件中,文件大小不定。其 db 数据文件默认存放目录为 X:\Program Files\Tencent\QQ\用户 QQ 号码。其中 X 代表盘符,默认为 C 盘。该目录下默认的 db 数据格式文件有: Config.db、notes.db、User.db、ShareInfo.db、 ewh.db、MsgEx.db、CardMgr.db。其中,User.db 存储着好友列表信息,MsgEx.db 存储着聊天记录。 2.2 复合文档的格式分析复合文档是一种不仅包含文本而且包括图形、电子表格数据、声音、视频图像以及其它信息的文档。例如,Word、Excel、.db 文件等都是以这种格式存储的。复合文档的原理就像一个文件系统(文件系统:如 FAT 与 NTFS)。复合文档将数据分成许多流(streams),这些流又存储在不同的仓库(storages)里 [2] 。其结构原理如下图所示:图 1 复合文档原理图 Fig.1 Schematic of pound document 2.3 复合文档中有效数据的提取基于 Java 语言的图示信息处理系统 205 对于某个复合文档格式的文件,所需要的有效信息往往是根仓库下某个或某几个仓库下的某个或某几个流中。因此,就需要在充分了解了复合文档逻辑结构的基础上,编程实现特定流的提取。

3 好友列表的解析

3.1 定位 User.db 中有效数据存储好友列表信息的数据,实际是在 CQQ 仓库里的 UserData.dat 流中。有了这段数据流,就可以提取出此号码夹下所有好友的资料。

3.2 UserData.dat 中数据现将数据部分列举如下: 51 44 01 01 65 00 04 03 00 A9 B5 B2 04 00 00 00 56 EC 3B 00 06 04 00 B5 BA B6 BE 0A 00 00 00 D5 D5 D7 D529 39 61 AA D4 D5…… 数据段解读如下:51 44 —“QD”:是数据段标志;01 01—保留的数据结构;65 00—总数据段; 04—第一个数据段(简称 1D)的类型;03 00—1D 标志的长度;A9 B5 B2—1D 标志;04 00 00 00—1D 数据的长度;56 EC 3B 00—1D 数据。同理,06—第二个数据段的类型(简称 2D);04 00 —2D 标志的长度;B5 BA B6 BE—2D 标志;0A 00 00 00—2D 数据长度;D5 D5 D7 D529 39 61 AA D4 D5—2D 数据。

3.3 数据的解密分析数据段的类型有 0x01 到 0x0F 共 15 种,它们标志着 15 种不同的加密方式。通过大量的对比分析,获取 QQ 好友列表信息,只需要破解 0x04,0x05,0x06,0x02 共 4 种,即可得到好友个人资料里所包含的所有信息,例如账号、昵称、备注等等 23 种信息。下面详细说明 0x04, 0x05, 0x06 数据段类型的破解: 1)0x04 数据类型的破解将数据段的数据高位在前,将十六进制化为十进制,即是加密前的数据。例如:56 EC 3B 00—1D 数据,在高位之前为 0x003BEC56,将其化为十进制为 3927126,此处所得结果是好友的 QQ 账号。 2)0x05 数据类型的破解通过对二进制流的对比观察,得知 0x05 数据类型后对应的数据是有序的。针对不同的数据标志有不同的对应关系,根据观察得到的对应关系可以进一步得到所需信息。例如:表示血型的 05 09 00 B4 BA B9 B9 B2 A2 AF A6 B3 01 00 00 00 ** ,当**为 01、02、03、 04,则分别对应着 A 型、B 型、O 型、AB 型血。 3)0x06 数据类型的破解以某个昵称的数据段 06 04 00 B5 BA B6 BE 04 00 00 00 35 25 35 29 为例进行说明。其转换过程与数据段长度(即 04 00 00 00—2S 数据长度有关系):取第 1 个字节 0x000035(53)与 0x0000FB (255-2S 数据长度=251 ,即 0x0000F1)的值异或,得 206。进行判断如果所得数﹤160,则单字符值(单基于 Java 语言的图示信息处理系统 206 个可见字符的 ASC﹤160),如果所得值﹥160,表明应是 2 字节的字符(此处为“无”),所以取 0x00003525 (13605)与 0x00FBFB(64507)异或,得到 ASC 值:52958。然后将 ASC 码转换为字符,是“无”字。同样后面的 35 29 也是这样转换,得到的就是“我”了。即此账号的昵称是“无我”。 4)0x02 数据类型的破解类同 0x06 的破解。

3.4 各种信息的数据段归纳 1)0x02 解析方法分组名 02 06 00 B7 AC B4 BB BC AB…… 2)0x04 解析方法: QQ 账号 04 03 00 A9 B5 B2 …… 3)0x05 解析方法生肖 05 09 00 A5 BE B3 B8 B1 AE BF B7 B9 …… 血型 05 09 00 B4 BA B9 B9 A2 AF A6 B3 …… 年龄 05 03 00 BD BB B9 …… 星座 05 0D 00 B1 BD BC A1 A6 B7 BE BE B3 A6 BB BD BC …… 4)0x06 解析方法昵称 06 04 00 B5 BA B6 BE …… 性别 06 06 00 BE BC B7 BD BC AB …… 个性签名 06 0F 00 83 84 82 BC 9F 9E 97 BE 99 93 9B BE 91 9D 95 …… 姓名 06 08 00 A5 B2 B6 BB B9 B6 BA B2 …… 生日 06 0B 00 87 80 86 B6 9D 86 80 9C 90 95 8D …… 毕业院校 06 07 00 BB B7 B4 B4 BD BF BD …… 个人主页 06 08 00 BF B8 BA B2 A7 B6 B0 B2 …… 职业 06 0A BA B6 B6 A0 A5 B4 A1 BC BA BB …… 个人说明 06 0E 00 A1 B4 A3 A2 B8 BE BF B0 BD AE B5 B4 A2 B2 …… 国家/地区 06 07 00 BB B7 AD B6 AC AA A1 …… 州/省 06 08 00 A7 A5 B8 A1 BE B9 B4 B2 …… 城市 06 04 00 B8 B2 AF A2 …… 电子邮件 06 05 00 BF B7 BB B3 B6 …… 联系地址 06 07 00 B9 BC BC AA BD AB AB …… 电话号码 06 05 00 AA B2 B5 B4 BF …… 3.5 信息存储结构 UserData.dat 中每个好友的各种信息的存储是按照 QQ 账号、昵称、电子邮件、个人主页、国家/ 地区、年龄、性别、州/省、城市、联系地址、电话号码、职业、血型、生肖、星座、毕业院校、姓名、基于 Java 语言的图示信息处理系统 207 个性说明、备注等的顺序结构,接下来又是另一个好友的类似信息,直到检索结束。在每检索完一个好友的信息之后,还要检索该好友后面是否存储着好友分组的信息,如果有则将上一个好友分组名称后面这一个好友分组名称前面的所有好友归为一个分组,否则不做处理。(本论文由上海论文网://shlunwen.整理提供,如需转载,请注明出处或联系我们的客服人员)