一、登录过程以及联系人列表获取分析
1.1 163邮箱登录过程
登录邮箱可以分成如下步骤
1. 访问mail.163.com
2. 输入用户名和密码,点击登录
3. 163服务器端进行验证。若用户名或密码通过验证,客户端进行几次跳转,成功转入登录页面。若用户名或密码错误,则返回认证错误页面。
我们可以利用IE Http Analyzer或者HTTP Sniffer来分析163邮箱的登陆的登录全过程。IE Http Analyzer优于HTTP Sniffer之处在于,IE Http Analyzer可以监控HTTP请求和应答的整个过程,它可以详细的展示HTTP请求的头部,HTTP请求所消耗的时间,HTTP POST的各个变量已经HTTP 数据流等多项信息。但最重要的区别在于IE Http Analyzer可以监控HTTPS的POST请求,这样我们就更清晰的模拟整个登录过程。但IE Http Analyzer的观察窗口较小,使用不如HTTP Sniffer方便。
利用IE HTTP Analyzer可以获取登录全过程
由分析可以知道,登录过程可由具体的5个步骤组成:
(1) GET
(2) GET
http://adgeo.163.com/ad_cookies
(3) POST
(4) GET
(5) GET
附录一中详细给出了这5个步骤的请求和回复。
根据附录一的详细数据流分析步骤(2)至步骤(5)可以这几个步骤的Cookie设置如下
| 步骤 | 设置Cookie |
| (1) |
|
| (2) | Province=025 |
| (3) | NTES_SESS=NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF NETEASE_SSN=xjtujay NETEASE_ADV=11&23&1228200054655 URSJESSIONID=aGHZvw0enBrb |
| (4) |
|
| (5) | Coremail=TYlruaxjaLMaE%TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg |
步骤(3)中,URL是固定不变,这次是HTTP POST请求,而POST请求的体为
verifycookie=1&style=-1&product=mail163&username=xjtujay&password=jinjian&selType=-1&remUser=on&secure=on&%B5%C7%C2%BC%D3%CA%CF%E4=
这里username为xjtujay,而password为jinjian,仅仅这两个部分是可变的(即随用户名和密码不同而不同),其他参数是固定不变的。
步骤(4)中,首先来分析URL的由构成。步骤(4)的URL由当前的username和步骤(3)中设置的NTES_SESS值来决定。步骤(4)的URL可以看成是http://reg.163.com/crossdomain.jsp?username=后追加当前username(xjtujay),当前NTES_SESS (NYQeUfIIQZhT16_9RKAAz36JIgKh2aGz7IeDK8H.pFklFNEUgF1EKWkKAgAhPL.F30AmD5YMQLzsQ1CjkLkdLSsVF)和经过URL编码的固定字符串http://fm163.163.com/coremail/fcg/ntesdoor2?lightweight=1&verifycookie=1&language=-1&style=-1&username=以及当前username(xjtujay)构成。
此时URL可以由步骤(3)应答的头部来拼成步骤(4)所访问的具体地址。当然,还有一种简单的办法获取步骤(4)访问的URL。查询附录一,可知在步骤(3)的应答体内window.location.replace后面就是步骤(4)访问的URL。
步骤(5)中,最重要的是应答头部给出的Location参数的值 http://tg1a89.mail.163.com/a/j/js3/main.jsp?sid=TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg。这个值包括了2部分的重要信息:(1)当前登录的163服务器(tg 1a 89.mail.163.com)(2)sid值(TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg)。有了这两个值以及在(2)(3)(5)中设置的Cookie就可以获取邮件的联系人列表。
经过以上5个步骤,我们就完成了163邮箱的登录全过程。
1.2 163邮箱联系人列表获取
经过分析,获取163邮箱联系人列表的URL为
http://{1}/coremail/fcg/ldvcapp?funcid=address&sid={2}&tempname=address%2Faddress.htm&ifirstv=&listnum=0&showlist=all。 这里将要使用上节中步骤(5)中提及到重要的信息。在URL中需要设置{1}{2}两个参数,其中{1}为当前登录的163服务器(tg 1a 89.mail.163.com),{2}为SID值(TBrNkFKKhBjsxfeRvrKKnDlwogztEEjg)。当前访问邮箱的URL为
通过
GET
便可以获得联系人列表相关信息。
这里需要注意的是上面GET请求返回的应答Content-Encoding为gzip,我们不能直接获取返回的内容信息。我们首先要根据应答的Content-Length,读入对应长度的字节流。然后为了获取联系人列表相关信息,将读入的字节流按照gzip的格式进行解压。接着根据Content-Type指定的charset为gb2312读取内容,进行分析实际读入的字符。
上述过程得到的将是包含联系人列表的HTML信息。解析得到的HTML信息,便可以得到具体的联系人列表了。具体的HTML信息如附录二所示。
本文分析了163邮箱的登录过程,包括5个步骤:访问登录页、获取广告Cookies、POST登录信息、跨域跳转和最终进入邮箱。通过HTTP请求和响应,详细阐述了每个步骤的Cookie设置。此外,还介绍了如何利用登录后的服务器和SID信息获取163邮箱的联系人列表,涉及gzip压缩和HTML解析。
178





