最近在分析QQ和微信的登陆过程中,发现存在了二维码登陆这个东西,比较疑惑其实现,作了一下简单的分析。

二维码说的直白一点就是包含二进制数据的黑白图片。当进行登录时,服务器生成一条二维码信息,发送给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网页微信二维码登陆原理分析相关推荐

  1. QQ网页微信、QQ二维码登录原理分析(整理)

    QQ和微信的登录过程中,使用二维码登录,这里根据网上的一些资料简单总结: 二维码是包含二进制数据的黑白图片.当进行登录时,服务器生成一条二维码信息,发送给PC客户端.这时,手机终端(已经存在指定账号登 ...

  2. 二维码支付原理分析及安全性的探究

    "二维码支付"安全么? 1   引言 随时支付宝和微信的线下不断推广,目前使用手机进行二维码支付已经逐渐成为一种时尚了. 但是大家有没有思考过:这种便捷的支付方式到底安不安全呢?今 ...

  3. 微信QQ的二维码登录原理js代码解析

    这篇文章主要大家详细解析了微信QQ的二维码登录原理js代码, 具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在很多地方就是都出现了使用二维码登录,二维码付款,二维码账户等应用(这里的二维码种马,诈 ...

  4. 微信扫描二维码登陆的实现原理

    作者:程序员自由之路 https://www.cnblogs.com/54chensongxia/p/12530268.html 随着微信的普及,我们可以通过微信扫描设备二维码来实现IoT物联网场景中 ...

  5. 微信QQ支付宝三合一收款二维码实现原理

    大家可以先看看我网站的效果: 收款吧 - 三合一收款码在线生成 收款码三合一大致原理如下: 第一步.解析用户上传的微信支付.QQ钱包.支付宝收款二维码,获取收款链接地址. 第二步.用自己的网站程序生成 ...

  6. 网页分享功能 支持 微信二维码 qq空间 qq好友 新浪微博 百度贴吧 豆瓣 人人...

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. 网页版微信和微信公共号扫码登陆原理分析

    看到知乎上有关于微信扫码登陆原理的讨论.现将自己的分析结果写出来,供大家参考,不正确的地方望指正. 用户打开网页版微信: https://wx.qq.com/,微信为用户生成了一张包含uuid的二维码 ...

  8. HTML 5 手机扫描二维码登陆网页

    首先声明我不是专业做前端的,只是一个java开发者,最近要做一个手机版的网站,但是需求要做类似于微信,扫描网页上的二维码登陆网页版微信,以当时认为这东西必须要APP才能支持,因为所有扫描二维码都是必须 ...

  9. 微信二维码1-服务号推广(将网页存储为图片存储到服务器)

    本周预告了将会推出一个「将会讲讲项目中关于微信二维码生成和传播的事儿」的系列,现在我们就来开始讲讲: 首先本篇不会将会怎么调用二维码接口,因为该接口已经在上个月就写好了,在实际项目中,不过这个是微信二 ...

  10. 一行代码制作自己的QQ/微信二维码,还可以制作动态的哟~(小白再也不用去求别人了)

    今天,我们要用Python制作一个炫酷的二维码,还可以是动得哟 废话少说,我们开始制作吧~ 文章目录 安装MyQR CMD生成图片二维码 用Python来生成(生成失败的朋友看过来) 做一个动图二维码 ...

最新文章

  1. 1.JSONObject与JSONArray的使用
  2. webconfig中配置各种数据库的连接字符串(转)
  3. 索引键的唯一性(2/4):唯一与非唯一聚集索引
  4. 数字IC设计bilibili-Designer Compiler的理论笔记+实操
  5. 全面解读数据中台,让企业实现数字化转型
  6. 2013\Province_Java_B\1.世纪末的星期
  7. Java Maven项目打包成可执行jar文件
  8. 帆软:像阿甘一样,奔跑在商业智能的赛道上!
  9. 共轭梯度(CG)算法
  10. 学习笔记|Pytorch使用教程22(hook函数与CAM可视化)
  11. linux中的set ff=unix是什么意思?dos2unix什么意思?
  12. 转换到coff期间_fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏 | Lellansin's 冰森...
  13. raize控件的安装注意
  14. 分式求二阶导数_第12讲 典型例题与练习参考解答:导数的基本运算法则与高阶导数...
  15. 开学季,如何申请免费学生云服务器
  16. 修改select2未搜索到数据时的提示语
  17. 树模型与python实现
  18. 什么是jdk,jre?
  19. 京东数科java咋样_校招|京东数科 Java 实习 一面
  20. 计算机网络用户名及密码如何查询,用wifi连接电脑的怎么查看宽带账号密码

热门文章

  1. spfa - 黑暗城堡 - 一本通 3.1 例 1
  2. 链家混三个月底薪_应届毕业生入职链家,到离职
  3. Jasmine JavaScript测试 - toBe vs toEqual
  4. 智能枕头里究竟藏有什么“智能”故事?
  5. mysql高级查询之性能分析explain和日志查看
  6. DevOps工具图谱分析(一)
  7. matlab高斯公式求值,高斯求积公式 matlab
  8. 资本资产定价模型CAPM
  9. 杭电计网实验15 ACL网络访问控制 (球球、球球,可以点个赞吗)
  10. 史上最详细Proof处理教程--Elsevier平台(一)~