论坛: 编程破解 标题: QQ2003III表情文件格式分析[原创] 复制本贴地址    
作者: Frankiez [frankiez84]    论坛用户   登录
  QQ作为一款国产优秀网络即时通讯软件,它的功能之强大是毋庸置疑的。每次更新都为我们带来大的惊喜,比如这次QQ2003III build0115的更新,就加入了自定义表情的功能,使原本已经非常丰富的图片表情功能更贴合用户的需要。
  在测试过程中发现,虽然QQ允许使用自己的图片导入并生成表情文件,但此项功能只能在线使用,而且没有专用工具,不开QQ2003III Build0115就没法制作表情,而新版QQ占用资源之大实在使我的老机不堪重负,对于我们这种受过良好的DIY教育的网虫,这是不能容忍的。于是,我来到了腾讯官方网站,看到了有表情包下载,但都是些cfc文件,我莫名,cfc是什么文件?我想当然地把它和WINAMP的wsz文件联系到了一起,把扩展名改成zip,试着解压,失败。然后又试着在Google上搜索,未果。
  不甘心,便给Tencent的客服发了Email,请他们将此文件的结构发给我。发完信我就后悔了,以前我是QQ会员的时候,他们回个信也得几星期,而且还总是无关痛痒的自动回复,现在让他们透露文件格式?真是做梦,木子工作室和珊瑚虫工作室的修改早已经让Tencent把所以的外来DIY当成商业侵权。
  一日后,看信箱果然无信,不理我?好……便又打开了尘封已久的UltraEdit,打开那几个网上下载的表情包。嗯!?其中有一段文字是“GIF89a”,很明显是gif文件的头部,呵呵,看来图片没有加密,太好了。接着继续往下看,又发现了“bm?”,凭经验知道这是bmp文件头部,又连续看了其他几个cfc文件,发现内部的图片都是一个gif一个bmp的放,这就比较奇怪了。于是,把里面两个连续的gif和bmp采用二进制复制的方式分别导出,发现两个文件是同一幅图像,可是bmp的边缘色彩不同。查看0115版本的bug修正表,发现“修正了自定义表情边缘不透明的bug”。哈哈哈,同时又在cfc文件中发现了“fixed.bmp”的字段,凭我多年的游戏开发经验判断,bmp文件是掩模文件,使用掩模是为了使图片显示时边缘透明的一种方法,题关外话,不作详述。
  心中大爽,成功了一半,可是在每个gif,bmp组之前的那一段到底是什么,几个间隔的数字以及一大堆乱码,让我又陷入了沉思。试着算内部图片存储的偏移量,发现符合其中几个数字。闲来无聊,便将那几个cfc再次导入QQ,可是QQ提示“文件已存在”,嗯?他是怎么知道这个cfc已经导入过了呢!?顿时眼前一亮,作为一个程序员,判断文件是否唯一的最好方法就是使用MD5(信息-摘要算法)算法,马上将刚才导出的两个gif和bmp用MD5算出了唯一识别码。成功!是GIF的MD5码,经过分析得知,刚才使我极为头痛的那段乱码结构是“MD5 + 快捷键 + 表情名称 + MD5 + “.gif” + MD5 + “fixed.bmp””,为什么要存放三遍MD5我想可能是为了保证数据的完整性。只剩下最头上那三个间隔的数字了,第一个是20H,经过我分析n个cfc发现是固定的,估计是一对gif/bmp组的头部标志。另外两个每对gif/bmp组都不同,肯定是变量,最后通过反复的试验发现分别是表情名称和快捷键字段的长度,值得注意的是,两个字段都是以ANSI而非Unicode存放的,也就是说,中文每字两字节,英文每字一字节,在运算的时候需要多加注意。

现在给出整个文件的结构:
1.第一对GIF/BMP组
    1字节20H            头部标志,固定
    3字节00H
    1字节                快捷键字长
    3字节00H
    1字节                表情名称字长
    3字节00H
    1字节24H            文件长度变量开始标志,固定
    3字节00H
    2字节                GIF文件体长度(字节)
    2字节00H
    1字节29H            GIF/BMP长度字段分隔标志位
    3字节00H
    2字节                BMP掩模文件体长度(字节)
    2字节00H
    1字节                未知标志位,一般为01H,修改后发现不影响导入
    3字节00H
    32字节                GIF文件的MD5码
    不定长                快捷键ASC码(依先前定义字长决定)
    不定长                表情名称ASC码(依先前定义字长决定)
    32字节                GIF文件的MD5码
    4字节 “.gif”            “.gif”的ASC码
    32字节                GIF文件的MD5码
    9字节 “fixed.bmp”        “fixed.bmp”的ASC码
    不定长                GIF文件体
    不定长                BMP掩模文件体
2.第二对GIF/BMP组
3.……

  从一名程序员的角度讲,这种文件结构存在着很多不合理之处,另外此功能的系统资源占用也十分严重,可能和这是一项新功能有关,相信Tencent会在不久后推出更先进的结构。我也将在不久后推出我的QQ自定义表情包制作工具,希望Tencent能在我的软件开发完以前将不能离线制作表情包的bug修正或发布独立的制作工具。
  如果有疑问,请到我的BBS提出,或加我QQ,我愿与各位高手共同讨论。

BBS:    http://bbs.ee67.com
QQ:    13454071

地主 发表时间: 04-02-02 19:33

回复: 真爱有限 [afan271314]   论坛用户   登录
速度  有点慢

B1层 发表时间: 04-02-02 20:31

回复: 真爱有限 [afan271314]   论坛用户   登录
你那是原创吗 你多大了

B2层 发表时间: 04-02-02 20:41

回复: Frankiez [frankiez84]   论坛用户   登录
100%原创,晚上用ultraedit分析的结果
我大二

B3层 发表时间: 04-02-03 10:56

回复: NetDemon [netdemon]   ADMIN   登录
很好很好,值得鼓励,支持和学习

B4层 发表时间: 04-02-04 02:40

回复: 真爱有限 [afan271314]   论坛用户   登录
吓死我了 可是你主页上怎么写的初二啊    如果初二能达到你这个水平 啥都不说了

B5层 发表时间: 04-02-04 11:07

回复: 真爱有限 [afan271314]   论坛用户   登录
楼主有ultraedit汉化版的吗  我E文太菜了 

B6层 发表时间: 04-02-04 11:10

回复: Frankiez [frankiez84]   论坛用户   登录
谢谢大家鼓励!:>
那不是我的主页,只不过我的那个朋友拜托我管理BBS,所以我常去
我的主页是www2.vipbuy.net

B7层 发表时间: 04-02-04 18:36

回复: 收破烂的 [k101]   论坛用户   登录
凭我多年的游戏开发经验判断
???
有点怀疑,你会开发游戏还是破解游戏?

B8层 发表时间: 04-02-09 00:51

论坛: 编程破解

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号