网页抓取qq(登陆页面二维码图片登陆校验需要哪些参数(上)?)
优采云 发布时间: 2021-12-09 09:09网页抓取qq(登陆页面二维码图片登陆校验需要哪些参数(上)?)
一、背景:前几天收到一个请求:获取QQ好友、QQ群、QQ群好友的账号。可惜抓不到QQ程序的包。我觉得应该是QQ程序之间的通讯协议大部分不是HTTP或HTTPS,我用的Fillder所以找不到包,但不影响我完成需求。找了大部分QQ的相关应用,终于在QQ空间找到了可以满足这个需求的数据。于是我改变了思路和方法去Qzone抓数据。
二、分析:QQ空间一般采用两种登录方式:一种是账号密码登录,一种是扫码登录。领导要求扫码登录,所以我来做扫码登录。
反复抓包查资料,发现相关登录接口如下(注意后面文中用接口名代替连接):
登录页面
二维码图片
登录验证
首先我们分析一下登录验证需要哪些参数(因为它最容易找到,而且我们一进入就一直在等待验证):
经过反复抓包测试,发现需要的参数不定:ptqrtoken、action、login_sig。一看就知道action是一个时间戳拼接字段,另外两个字段应该是页面请求时设置的cookie值。通过全局搜索字段发现login_sig就是登录页面的pt_login_sig。
然后,到登录页面获取cookie中pt_login_sig对应的值。经过几次抓包,发现接口参数是固定的:
至于ptqrtoken全局搜索,会找到c_login_2.js的js文件。进入预览视图格式化js代码,搜索ptqrtoken,会发现如下一段代码:
很明显,他的意思是获取某个cookie中的qrsig字段,然后进行hash33加密,首先全局查找qrsig,发现二维码图片的cookie中有这个字段,同时保存二维码获得领域。这个接口是固定的,除了一个参数是0-1之间的随机数。
然后全局查找hash33加密过程,结果还是c_login_2.js文件中找到的如下代码片段:
将js代码转换为python代码:
<p> def __decrypt_qrsig(self, qrsig):
e = 0
for c in qrsig:
e += (e