QQ网页微信二维码登陆原理分析
2013-09-04 10:58
344 查看
最近在分析QQ和微信的登陆过程中,发现存在了二维码登陆这个东西,比较疑惑其实现,作了一下简单的分析。
二维码说的直白一点就是包含二进制数据的黑白图片。当进行登录时,服务器生成一条二维码信息,发送给PC客户端。这时,手机终端(已经存在指定账号登录信息)扫描二维码,会将这条二维码信息与自身登录账户的相关信息发送至服务器,服务器就授权接收二维码的PC客户端进行登录。比如网页微信:打开wx.qq.com网页(https形式),就是一个二维码登陆页面,通过手机终端登陆的微信进行扫描,然后就能自动登陆了。这里和一些朋友推送方面的猜想不同,保持的是一个短连接。
通过分析数据包发现在网页存在的情况下,客户端会不间断的向服务器发起https连接,并且传输很少的数据之后就断开连接了。在网页的源代码中,找到了一个js文件“login18002b.js”。其中的代码
很清晰的说明了接下来的处理方式:网页客户端每500毫秒就向服务器发起ssl请求,请求当前二维码的登陆信息,如果返回结果201,则说明已经获取扫描二维码终端相同的账号登陆授权,再其它一部分情况下,将在500毫秒之后继续发起请求。
最后,对qq二维码登陆也做了一个简单的分析,QQ二维码登陆将会通过udp 8000端口频繁的向服务器发送询问请求,一直到二维码被扫描正确登陆或者二维码超时为止。
二维码说的直白一点就是包含二进制数据的黑白图片。当进行登录时,服务器生成一条二维码信息,发送给PC客户端。这时,手机终端(已经存在指定账号登录信息)扫描二维码,会将这条二维码信息与自身登录账户的相关信息发送至服务器,服务器就授权接收二维码的PC客户端进行登录。比如网页微信:打开wx.qq.com网页(https形式),就是一个二维码登陆页面,通过手机终端登陆的微信进行扫描,然后就能自动登陆了。这里和一些朋友推送方面的猜想不同,保持的是一个短连接。
通过分析数据包发现在网页存在的情况下,客户端会不间断的向服务器发起https连接,并且传输很少的数据之后就断开连接了。在网页的源代码中,找到了一个js文件“login18002b.js”。其中的代码
function _poll(_asUUID) { var _self = arguments.callee, _nTime = 0; _sCurUUId = _asUUID; _logInPage("_poll Request Start, time: " + new Date().getTime()); _nTime = new Date().getTime(); $.ajax({ type: "GET", url: "https://login." + _sBaseHost + "/cgi-bin/mmwebwx-bin/login?uuid=" + _asUUID + "&tip=" + show_tip, dataType: "script", cache: false, timeout: _nAjaxTimeout, success: function(data, textStatus, jqXHR) { _logInPage("_poll Request Success, code: " + window.code + ", time: " + (new Date().getTime() - _nTime) + "ms"); switch (_aoWin.code) { case 200: _sSecondRequestTime = new Date().getTime() - _sSecondRequestTime; _logInPage("Second Request Success, time: " + _sSecondRequestTime + "ms"); clearTimeout(_oResetTimeout); $.get(_aoWin.redirect_uri + "&fun=new", function(msg) { _logInPage("new func reponse, reponseMsg: " + msg); _reportNow("new func reponse, reponseMsg: " + msg); var code = msg.match(/<script>(.*)<\/script>/); if(code){ eval(code[1]); }else{ $("#container").show(); $("#login_container").hide(); } }); _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Success, uuid: " + _asUUID + ", time: " + _sSecondRequestTime + "ms"); break; case 201: clearTimeout(_oResetTimeout); show_tip = 0; $('.errorMsg').hide(); $('.normlDesc').hide(); $('.successMsg').show(); _logInPage("First Request Success"); _reportNow("/cgi-bin/mmwebwx-bin/login, First Request Success, uuid: " + _asUUID); // setTimeout(function(){ _logInPage("Second Request Start"); _reportNow("/cgi-bin/mmwebwx-bin/login, Second Request Start, uuid: " + _asUUID); _sSecondRequestTime = new Date().getTime(); _nAjaxTimeout = 5 * 1000; _self(_asUUID); // }, 500); break; case 408: setTimeout(function(){ _self(_asUUID); }, 500); break; case 400: case 500: _reset(); _afterLoadWebMMDo(function(){ _aoWin.Log.d("500, Login Poll Svr Exception"); }); break; } }, error: function(jqXHR, textStatus, errorThrown) { if (textStatus == 'timeout') { setTimeout(function(){ _self(_asUUID); }, 500); } else { setTimeout(function(){ _self(_asUUID); }, 5000); _logInPage("_poll Request Error:" + textStatus); _afterLoadWebMMDo(function(){ _aoWin.Log.e("Login Poll Error:" + textStatus); }); } } }); }
很清晰的说明了接下来的处理方式:网页客户端每500毫秒就向服务器发起ssl请求,请求当前二维码的登陆信息,如果返回结果201,则说明已经获取扫描二维码终端相同的账号登陆授权,再其它一部分情况下,将在500毫秒之后继续发起请求。
最后,对qq二维码登陆也做了一个简单的分析,QQ二维码登陆将会通过udp 8000端口频繁的向服务器发送询问请求,一直到二维码被扫描正确登陆或者二维码超时为止。
相关文章推荐
- QQ网页微信、QQ二维码登录原理分析(整理)
- SmartQQ二维码登陆接口分析
- 微信QQ的二维码登录原理js代码解析
- 微信QQ的二维码登录原理js代码解析
- 微信QQ的二维码登录原理js代码解析
- game.weixin.qq.com微信游戏圈二维码浏览器网页跳转ticket实现方法
- 微信扫描二维码登录网页原理
- QQ登陆实现原理分析
- 微信QQ的二维码登录原理浅析
- 微信扫描二维码登陆的原理
- 【转】微信扫描二维码登录网页是什么原理?
- 微信QQ的二维码登录原理浅析
- 网页版微信和微信公共号扫码登陆原理分析
- 网页分享功能 支持 微信二维码 qq空间 qq好友 新浪微博 百度贴吧 豆瓣 人人
- 万能收钱码-多合一收款二维码原理及源码-支持支付宝、微信、QQ
- 微信扫描二维码登录网页是什么原理?
- iOS开发 - 微信扫描二维码登录网页的原理
- 微信网页二维码授权登陆
- 网页版微信和微信公共号扫码登陆原理分析
- 网页调用唤起微信app跳转到二维码的生成平台原理解析