腾讯微博登录过程协议分析

一,腾讯网站登陆过程分析

 

腾讯网站包括qq.com为主域名的网站,包括t.qq.com,www.qq.com以及腾讯数不清的各个子域名,因为腾讯使用的sso登陆,所以登陆流程对于各个子域名都是一样的。下面我就以腾讯微博为例子来介绍一下:

 

第一步:

   当用户在浏览器输入:http://t.qq.com/login.php 的时候,浏览器下载页面,执行js检查用户是否qq登陆,如果QQ已经登陆的话,那么显示快速登陆界面,实现方式在ie为active object ,因为快速登陆和我们这次讨论的主题相关不大。所以不讨论。此步骤不影响输入用户名和密码的登陆方式。我们选择使用其他账号登陆。

第二步:

   当用户输入QQ账号后,浏览器通过js向登陆服务器发送获取验证码的请求,如下图:


下面我们对请求进行分析:

请求的url是http://check.ptlogin2.qq.com/check 传递四个参数uin, appid , r ptlang 

uin 用户的登陆账号即qq号码  

appid 微博应用的id 相对于统一登陆来说微博也是一个应用

r 随机数,避免缓存

ptlang 用户语言代码

 

服务器response如下:



设置登陆ptvfsession 的cookie 在域 ptlogin2.qq.com

 

返回|Response 内容如上,其实上面是一个js函数调用,此函数三个参数,由登陆服务器设置好了,每次请求都会变化,这次为“0”,‘!ZGI’,和“\x00...”。这几个参数的作用在后面介绍。我们记着有这个几个参数即可。

 

第三步:

  用户输入密码,点击登陆,请求过程如下:

 

分析如下:

请求的url: ptlogin2.qq.com/login 参数较多,我只找比较重要的说一说, u是QQ号码, p 是加密过的密码,verifycode 是验证码或者上一步骤服务器传递过来的参数,aid 是应用id 其他参数不太重要。

请求的cookie:带着上次得到的ptvsession



响应分析如下:

如果用户qq和密码正确的话,用户登录成功,响应的cookie值见上图,我勾选的skey和lkey是用户登录的凭证,有此cookie说明用户已经登录成功。  响应的代码如下:


这同样也是一个js函数。通过文字我们可以判断用户登录成功了。



至此,用户登录完毕。skey 和lkey   的cookie种在了qq.com域名下。所以用户可以在腾讯的各个子站之间漫游,不需要重新登录了。。

 

大致流程我概括如下:

  1,通过用户名称得到vercode

 2, 使用vercodemd5 加密密码 之后完成登录。

 

对登录过程了解之后,就可以使用使用用户名和密码用httpClient或者其他工具来模拟登录了,其中难点是密码的加密算法。算法并不是对用户输入的密码做简单的md5散列,我们下面对密码加密算法进行分析。

 

二,密码是如何加密的

     

登录使用的js是 login_div.js?1.2.1,下载之后结果如下图:


注意我勾选的ptui_checkVC(B,E,C),是不是感觉很熟悉,对,就是上面第一步中check之后返回的js函数。此js加载之后,首先执行pt.init()初始化函数。具体代码可以仔细分析。我先说重要部分,让我们使用上面的参数“0”,‘!ZGI’,和“\x00...” 进入 ptui_checkVC内部:此函数调用其实是:pt.checkVC(B, E, C);

再进入pt.checkVC内部: 具体看下面代码,注意我勾选的两个句子:pt.uin= "\x00..."

 

当用户点击登录按钮之后,执行的js其实是pt.submit() 代码如下:



我勾选的那端代码就是对密码的加密过程,让我们一句一句的分析:

var D = G.p.value;    //得到密码的值
var H = hexchar2bin(md5(D));    // 进行一次md5加密,之后转换为字符串
var F = md5(H + pt.uin);   //  用上一步的结果和 pt.uin 链接再进行一次md5加密,
var C = md5(F + G.verifycode.value.toUpperCase());     //  用上一步的结果和verifycode 大写 链接再进行一次md5加密

 

加密完成了。。

 

后记:

有了这个分析过程,我们可以使用任何语言来实现腾讯网站的登陆了。。。。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值