在登陆很多网站的时候,网站可以找寻到本机上已登录的QQ并进行快速登录,它们是如何与本机程序进行数据交互的?
既然网站和第三方程序可以获得本地的数据并进行快速登录,那岂不是任何一个程序都可以获取到本机上QQ的权限,想想还是很危险的。不过,如果本机上已经被植入了木马,获取一个QQ啥的,本身就是一件很简单的事情了……
分析
我们打开一个可以快速登录的地址的时候(例如https://xui.ptlogin2.qq.com/cgi-bin/xlogin?appid=636014201&s_url=http://www.qq.com/qq2012/loginSuccess.htm&style=20&border_radius=1&target=self&maskOpacity=40)能看到其中有这么一个请求:
我们可以看到,其中的远程地址,是127.0.0.1,端口是4301
此时我们查看自己本机的端口:
我们可以发现这个端口是由pid为264的程序管理的,此时我们再打开任务管理器查看:
可以看到,pid为264的就是我们的QQ程序。查看上述请求的响应,里面就是我们QQ的一些基本信息,如QQ号,昵称等。
而我们如果直接请求该地址,会发现请求会失败,这是因为改地址严格限制了Referer和Cookie,如果其中的数据不匹配,则请求不会成功。
我们查看我们的cookie:
可以发现url地址中的pt_local_tk和cookie中的pt_local_token是一样的,所以在构建一个新的请求的时候,要将后面的参数替换掉。而这其中的所有参数,都是第一次访问自动生成的,所以我们通过两次请求就可以获取到本机上已经登陆的QQ信息。
在postman上进行验证:
可以发现我们是可以请求成功并获得我们想要的数据的(至于cookie里的值是如何生成的,这些我暂时不去深究)。
代码实现
既然url,cookie,header都获得了,且能通过postman验证成功,那么代码实现就很简单了
1 | import requests |
运行输出的结果也能够和本机已登录的QQ对得上。