张彤的专栏

这两天一直在看网页版的微信,对网页微信登录原理进行了思考。网页版微信地址:https://wx.qq.com/

网页微信登录方法:

1.打开网页版微信地址,会看到一个二维码。

2.打开手机微信客户端,再点击界面上的如下按钮:

3.扫面二维码,手机客户端会提示是否登录,点击确定便可登录成功。

对于普通用户来说这中登录方式可能没太特别的地方,但是非常值得程序员去学习和研究。

以下是我的探究过程:

猜想:php.oil58.com (防止恶意转载)

1.微信网页上的二维码是经过腾讯公司特殊处理过的。所以别的二维码识别工具不能识别当中的一些特殊信息。

取证:我用该二维码识别工具:?keyword=%E4%BA%8C%E7%BB%B4%E7%A0%81 识别出二维码信息,然后再用识别出来的信息重新生成二维码。再用户微信手机客户端识别,同样成功了。所以排除微信对二维码特殊加工的可能,这样的话腾讯是如何保证登录安全的呢??

2.微信网页版获取微信帐号信息是在微信手机端出现登录按钮的时候。

取证:为了不受Cookies的干扰,我开启了chrome的隐身模式!!(ctrl+shift+N) 再用抓包工具抓包(F12)。抓包方法,请看这两篇文章,Chrome浏览器抓包 IE浏览器抓包 发现第一次出现微信ID是用户在手机微信端点击确定登录之后才出现,所以这样很大程度保证了用户帐号安全。

猜想结束之后,再通过抓包我知道了网页微信登录的大概方法,下面是结论:

1.加载部分js与css文件;php.oil58.com (防止恶意转载)

用到很多js控制,我没有分析js代码。

2.获取唯一的uuid;

获取方式:

https://login.weixin.qq.com/jslogin?appid=wx782c26e4c19acffb&redirect_uri=https%3A%2F%2Fwx.qq.com%2Fcgi-bin%2Fmmwebwx-bin%2Fwebwxnewloginpage&fun=new&lang=zh_CN&_=1365142128434

参数:

appid:wx782c26e4c19acffb //由js代码生成,对生成二维码有一定影响

redirect_uri:https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage

fun:new

lang:zh_CN

_:1365142128434 //数据包标识

返回值:

window.QRLogin.code = 200;

window.QRLogin.uuid = "CCmck8vxfGS5dN";

返回的状态码与之后都会用到的唯一uuid。

3.二维码地址:https://login.weixin.qq.com/qrcode/uuid?t=webwx

uuid就是通过前面代码获得的,我自己随意填写了几个字符,不能生成二维码。本来还想用这个接口做个二维码在线生成器的!!

4.网页客户端监控服务端,,获取返回值;

https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=CG2srY9sdBQNXI&tip=1&_=1365143032258

后面的数字是数据包标识。包会连续的发,返回201表示手机端识别成功了,返回408表示失败,接着发数据包。

tip=1是获取手机端识别命令,tip=0是获取登录命令;

5.手机端验证成功之后,网页端还会将type与uuid post到服务器,服务器会做标记,完成匹配验证。如果网页不存在就不能完成post命令,服务器端会标记为失败。登录会不成功。

等待登录:https://login.weixin.qq.com/cgi-bin/mmwebwx-bin/login?uuid=CJs2pPYTParnC1&tip=0&_=1365143806090

与第四步4类似,参考第四步的说明。php.oil58.com (防止恶意转载)

6.登录成功

window.code=200;

window.redirect_uri="https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=c48522c6-58f8-1031-80d0-50e54929056d&lang=zh_CN&scan=1365144020";

这个redirect_uri就是非常非常重要的信息,通过访问该url就能获取微信帐号,进而能获取好友信息了。与手机端微信实现同步也在于该帐号。这个ticket 32位的16进制字符,想破解太难了。

7.web访问传回的地址,https://wx.qq.com/cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=c48522c6-58f8-1031-80d0-50e54929056d&lang=zh_CN&scan=1365144020&fun=new

返回0OK就是成功啦,之后就是信息同步了。

8.微信帐号安全匹配成功,信息同步!

不知道这篇文章有没有参考价值,等我奉上时序图。php.oil58.com (防止恶意转载)

本文转自:%E7%BD%91%E9%A1%B5%E5%BE%AE%E4%BF%A1%E7%99%BB%E5%BD%95%E5%8E%9F%E7%90%86/

生活若剥去理想、梦想、幻想,那生命便只是一堆空架子

张彤的专栏

相关文章:

你感兴趣的文章:

标签云: