python实现新浪微博模拟登录解析

本文详细介绍了使用Python实现新浪微博的模拟登录过程,包括预登陆模块、登录模块和重定向模块。通过分析登录过程中的加密参数,如servertime、nonce、su和sp,以及密码的SHA1加密和RSA公钥加密,最终成功构造POST表单并完成登录。
摘要由CSDN通过智能技术生成

新浪微博模拟登录解析

项目实现整体思路搭建:(WeiboLogin)

(1)通过预登陆POST表单获得加密参数(def prelogin)

(2)构造登录模块POST表单(def get_username def get_password def login_formdata)

(3)获得重定向url成功登录(def login)

一.预登陆模块

在登录页面https://weibo.com/输入账号并单击页面可以在开发者页面获得预登陆链接https://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=MTg1MTg2ODA4NjY%3D&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.19)&_=1563627851188,点击链接可以获得预登陆信息:

sinaSSOController.preloginCallBack({

"retcode":0,

"servertime":1563627850,

"pcid":"gz-5d8344de1dcf71332cbe56bdb47206f6247d",

"nonce":"B0F1YE",

"pubkey":"EB2A38568661887FA180BDDB5CABD5F21C7BFD59C090CB2D245A87AC253062882729293E5506350508E7F9AA3BB77F4333231490F915F6D63C55FE2F08A49B353F444AD3993CACC02DB784ABBB8E42A9B1BBFFFB38BE18D78E87A0E41B9B8F73A928EE0CCEE1F6739884B9777E4FE9E88A1BBE495927AC4A799B3181D6442443",

"rsakv":"1330428213",

"is_openlock":0,

"lm":1,

"smsurl":"https:\/\/login.sina.com.cn\/sso\/msglogin?entry=weibo&mobile=18518680866&s=48d9fe9ed7f02bd510c798677049cd5a",

"showpin":0,

"exectime":13})

从上述表单中,我们只需要提取两个实时变化的加密参数:servertime、nonce

二. 登录模块

在开发者页面上设置preserve log并且完成登录,在过滤url栏输入login,我们可以得到本次模拟登录需要所有的包,如下图:

                                                                                      图一

其中,我们需要着重注意几个包:按照顺序第一个预登陆包、第二个POST登录包、第五个ssologin.js加密包、倒数第二个302重定向包和最后一个重定向响应包。

本节详细分析POST登陆包,重点在于其参数模块,截图如下:

                                                                                       图二

此处的表单数据便是我们本次模拟登陆分析的重点,我们需要明确每次登陆时表单中哪些参数是变化的,分析其变化规则,以便接下来构造模拟登陆的表单数据。

经过多次登陆,我发现其中大部分参数是不变的,变化的参数只有su、servertime、nonce、和sp。其中servertime、nonce我们在预登陆表单中已经获得,唯有su和sp需要我们进一步的去分析。经过相关资料的调研,我怀疑su和sp或许是单词sina username和sina password的首字母缩写,但是可以确定的是su和sp便是我们登录微博时账号和密码的加密形式(下面有验证),因此,接下来我们需要做的便是搞清楚微博是如何对账号和密码进行加密的。

在上述截图中,我们可以发现当需要查询相关字符串时,我们可以去访问ssologin.js数据包,而这个数据包正是我着重强调的按顺序数第五个js加密包,截图如下:

                                                                                    图三

访问其请求网址,我们会得到一个充满代码的页面,我们在其中寻找和解析su和sp的加密规则。

首先,在页面上搜索username,我们可以发现一行语句:

request.su=sinaSSOEncoder.base64.encode(urlencode(username));

因此,su确实是账号的加密形式,并且其加密方式应该是先由url编码,再经过base64编码。

其次,搜索password,我们发现三行语句:

RSAKey.setPublic(me.rsaPubkey,"10001");

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值