[转]正则表达式30分钟入门教程
那些“另类”的思想

QQ自定义表情的编码格式

Tiger Soldier posted @ 2008年7月03日 04:43 in 程序设计 with tags qq协议 , 4637 阅读

因为EVA单人聊天时无法使用自定义表情,用起来不爽,想Hack一下,因而稍微研究了下QQ里自定义表情的表示方法

在EVA代码的api/evahtmlparser.cpp中为EvaHtmlParser类实现了convertCustomizedPicture方法,就是用于解析消息中的自定义表情的

QQ所发送的消息完全使用纯文本格式,自定义表情也是。描述自定义表情的串格式如下:

[ZDY][<type>]<content>[/<type>][/ZDY]

很明显ZDY就是自定义的拼音缩写,TX你真有才= =0

<type>是表情的类型,用两位数字表示,根据EVA的代码判断,至少有32、33、34、36、37这6种,其中36应该是用于群内的自定义表情,33在我用TM2008发送自定义表情时遇到过,32也应该是单人的自定义表情,其余没有遇到,不好判断。

<content>是表情的文件名以及其他信息,对于不同类型的自定义表情各有不同,根据Eva的代码,各类型内容分别是:

32:图片文件名

33:前36位是图片文件名(32位Hash码+"."+3位扩展名),后面可能还有一些东西,也可能没有,目前不知道是什么

34:若一次发送了多个相同的自定义表情,那么除了第一次出现的之外其他的类型都是34,内容只有一位大写字母,将它的值减去'A'的值可得到该自定义表情首次出现的位置(重复的表情不占位置),从0算起。例如发送了表情WWXWX,那么第二个和第四个表情W的值就是A(0),最后一个表情X的值就是B(1)

36:36是群图片,比较复杂,先给个例子:

[ZDY][36]eG1A     411d505737c     1bbPjGaghe4VJQu8Ppp85FF46DE1590F5038FF567F2CFC8B317.gif5FF46DA[/36][/ZDY]

第一位e没有作用,忽略

第二位和34一样,是一个用字母表示的数字,表示末尾多余的字符长度ShortLen(似乎是文件名的一段,用意暂时不明),这里是G,代表长度为5

之后两位1A被EVA标记为SessionLen,会话长度,应该是从它开头到会话段的距离,不过未被EVA使用,而且似乎也不相符……

接下来的8位是会话标识,去掉空格后16位数字字符串,这里的是0x411

之后16位是图片服务器IP和端口,d505737c即是213.5.115.124,11b即为283端口

之后16位PjGaghe4VJQu8Ppp是文件代理密钥,应该是向图片服务器发包时要使用的

后面的东西除去最后ShortLen+1个字符就是图片文件名了。

37:同34,群消息中重复的自定义图片,但是却是三个同样的字母相连

  • 无匹配
  • 无匹配

登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter