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,居然每小时给我硬切换一次,所有连接统统断开。
-> 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=
-> 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
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=
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
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
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,
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
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=???,
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
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