|
![]() | 作者: 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 [afan271314] ![]() |
登录 |
速度 有点慢 |
B1层 发表时间: 04-02-02 20:31 |
![]() | 回复: afan271314 [afan271314] ![]() |
登录 |
你那是原创吗 你多大了 |
B2层 发表时间: 04-02-02 20:41 |
![]() | 回复: Frankiez [frankiez84] ![]() |
登录 |
100%原创,晚上用ultraedit分析的结果 我大二 |
B3层 发表时间: 04-02-03 10:56 |
![]() | 回复: NetDemon [netdemon] ![]() |
登录 |
很好很好,值得鼓励,支持和学习 |
B4层 发表时间: 04-02-04 02:40 |
![]() | 回复: afan271314 [afan271314] ![]() |
登录 |
吓死我了 可是你主页上怎么写的初二啊 如果初二能达到你这个水平 啥都不说了 |
B5层 发表时间: 04-02-04 11:07 |
![]() | 回复: afan271314 [afan271314] ![]() |
登录 |
楼主有ultraedit汉化版的吗 我E文太菜了 |
B6层 发表时间: 04-02-04 11:10 |
![]() | 回复: Frankiez [frankiez84] ![]() |
登录 |
谢谢大家鼓励!:> 那不是我的主页,只不过我的那个朋友拜托我管理BBS,所以我常去 我的主页是www2.vipbuy.net |
B7层 发表时间: 04-02-04 18:36 |
![]() | 回复: k101 [k101] ![]() |
登录 |
凭我多年的游戏开发经验判断 ??? 有点怀疑,你会开发游戏还是破解游戏? |
B8层 发表时间: 04-02-09 00:51 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号