KJava QQ 2005 1.6.1 分析

by trac on 8月 16, 2008

在阅读本文之前,我很想让您明白几件事。

第一,我这分析极不完整,也极不专业。仅仅是作为兴趣,写一写,消磨消磨时间。

第二,我并不想抢腾讯的饭碗。说实在的,如果让我设计一款 IM,特别是用在手机上的,我决不会使用 HTTP 协议,也决不会将所有的消息以明文发送。用户密码是 MD5 过的,但您听说过山东大学那位受人尊敬的王小云教授吗,她破解了 MD5。HTTP 的头部也太大,浪费流量。

第三,请您自重。计算机网络通讯协议分析,这本来就属于法律的灰色地带,搞得好那么你可以学习学习,设计出更优秀的协议,搞不好是什么下场我就不细说了。我可不希望看见谁谁谁收到一份包装精美的来自腾讯的律师函。

好了,客气话说完,我下面就不客气了,说说腾讯 KJava QQ 2005 版协议的几个特点:

1、使用 HTTP 1.1;

2、每个 Request / Response 都需要标明 Content-Length。很显然,HTTP 1.1 的 RFC 也要求我们这么做(小道消息,没验证过,我只知道 1.1 的协议要求 Host,这个是为虚拟主机设计的);

3、客户发送请求的时候,都是用 POST 方法,所有的参数都包含在 POST 数据里;

4、可以用代理,但最终必须是从中国移动/中国联通的 IP 访问登录服务器;

5、密码采用 MD5 加密;

6、每一次和服务器交换信息,都使用短连接,也就是说,在交换完了之后立即关闭连接(Connection: close);

7、全部采用 UTF-8 编码(String mystring(“this is it”, “UTF-8”););

8、每隔一段时间执行一次 GetMsgEx 命令;再隔一定时间执行 Query_Stat。多执行几遍 List 也没人管你,反正具体的时间间隔可以自己来决定;

9、SEQ,也就是 sequence number,初始值随便设,20,50,200。中间的呢,我试下来也是可以任意的,不过我不保证这一条在你这儿也适用;

10、更多的嘛,我也讲不完,大家自己拿 6230 模拟器一试就知道。对了,可别忘记将联通或者移动的 SIM 卡放进 GPRS modem 再用它拨号,否则你想啊,腾讯那么精明,怎么会让你登录呢。

GetMsgEx 是用来检查新消息的,CLTMSG 发送客户端消息,List 列出好友清单,Query_Stat 应该可以查询好友昵称。Login 跟 Logout 就不用解释了吧,一个登录,一个退出(离线)。

GetMsgEx 可以返回空,也就是没有新消息。如有,也别忘了,那是 UTF-8 编码的。

最重要的几个方法介绍过了。其它的呢,还是用模拟器运行一会儿再分析分析吧。我没多少时间了,也许开学之后会在 sourceforge.net 上面建立一个项目,今后呢随便写点代码,感兴趣就可以来看看。

6230 模拟器实际上是诺基亚的 S40 Developer Platform 2.0 SDK,大家去 Forum Nokia 下一个就行。最新版本:1.1。需要 J2SDK,我用的是 1.5.0_16。别忘了注册、登录,下载和使用诺基亚的 SDK 是需要注册的,注册信息会发送到你的 E-mail 收件箱里。当然了,全部免费。

http://www.forum.nokia.com/

(需要安装 World Languages Pack)

用到的QQ:
KJava QQ 2005 1.6.1

这 QQ 该怎么下载呢?答案是这样的,用你的手机或者 GPRS modem 拨号,在电脑的浏览器里输入 http://mp.qq.com/m78,回车就可以了。

最后是截获的数据包。记住,它可能代表什么,也可能不具备任何意义。仅供参考。要想获得自己的版本,可以打开模拟器的监控窗口,那里特别详细,不必在手机上安装 sniffer 了。

顺便鄙视一下中国联通的 GPRS,居然每小时给我硬切换一次,所有连接统统断开。

0.0.0.0:0
-> kconn.tencent.com:21001

POST / HTTP/1.1
Host: kconn.tencent.com:21001
Content-Type: text/plain
Connection: close
User-Agent: UNTRUSTED/1.0
Content-Length: 110

VER=1.3&CMD=Login&SEQ=237&UIN=xxxxxxxxx&PS=HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH&M5=1&LG=1&LC=F8B82763B810F34B&CKE=

kconn.tencent.com:21001
-> 0.0.0.0:0

HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Connection: close
Content-Type: text/plain; charset=UTF-8
Content-Length: 76

VER=1.1&CMD=Login&SEQ=237&UIN=xxxxxxxxx&RES=0&RS=2&SI=121.14.78.201&SP=14000

0.0.0.0:0 -> 121.14.78.201:14000

POST / HTTP/1.1
Host: 121.14.78.201:14000
Content-Type: text/plain
Connection: close
User-Agent: UNTRUSTED/1.0
Content-Length: 110

VER=1.3&CMD=Login&SEQ=238&UIN=xxxxxxxxx&PS=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&M5=1&LG=1&LC=XXXXXXXXXXXXXXXX&CKE=

121.14.78.201:14000 -> 0.0.0.0:0

HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Connection: close
Content-Type: text/plain; charset=UTF-8
set-cookie:HHHHHHHHHHHHHHHH
Content-Length: 85

VER=1.1&CMD=Login&SEQ=238&UIN=xxxxxxxxx&RES=0&RS=0&HI=60&LI=300&COMP=NOKIA1ABCF7B8D44

0.0.0.0:0 -> 121.14.78.201:14000

POST / HTTP/1.1
Host: 121.14.78.201:14000
Content-Type: text/plain
Connection: close
User-Agent: UNTRUSTED/1.0
Content-Length: 76

VER=1.3&CMD=List&SEQ=239&UIN=xxxxxxxxx&SID=&XP=HHHHHHHHHHHHHHHHH&TN=160&UN=0

121.14.78.201:14000 -> 0.0.0.0:0

HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Connection: close
Content-Type: text/plain; charset=UTF-8
Content-Length: 78

VER=1.1&CMD=LIST&SEQ=239&UIN=xxxxxxxxx&RES=0&FN=1&SN=2&UN=aaaaaaaaa,bbbbbbbbb,

0.0.0.0:0 -> 121.14.78.201:14000

POST / HTTP/1.1
Host: 121.14.78.201:14000
Content-Type: text/plain
Connection: close
User-Agent: UNTRUSTED/1.0
Content-Length: 80

VER=1.3&CMD=Query_Stat&SEQ=240&UIN=xxxxxxxxx&SID=&XP=HHHHHHHHHHHHHHHH&TN=50&UN=0

121.14.78.201:14000 -> 0.0.0.0:0

HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Connection: close
Content-Type: text/plain; charset=UTF-8
Content-Length: 95

VER=1.1&CMD=QUERY_STAT&SEQ=240&UIN=xxxxxxxxx&RES=0&FC=0,&FN=1&SN=1&ST=10,&UN=aaaaaaaaa,&NK=???,

0.0.0.0:0 -> 121.14.78.201:14000

POST / HTTP/1.1
Host: 121.14.78.201:14000
Content-Type: text/plain
Connection: close
User-Agent: UNTRUSTED/1.0
Content-Length: 65

VER=1.3&CMD=Logout&SEQ=241&UIN=xxxxxxxxx&SID=&XP=HHHHHHHHHHHHHHHH

121.14.78.201:14000 -> 0.0.0.0:0

HTTP/1.1 200 OK
Server: tencent imserver/1.0.0
Connection: close
Content-Type: text/plain; charset=UTF-8
Content-Length: 46

VER=1.1&CMD=LOGOUT&SEQ=241&UIN=xxxxxxxxx&RES=0

Leave your comment

Required.

Required. Not published.

If you have one.