一个人拥有此生此世是不够的,他还应该拥有诗意的世界。
1、流程分析
本文只作为技术分享,如有侵权请联系本人删除。
感谢b站up主留樱雅子的技术分享!
一、目标网站
aHR0cHM6Ly93ZWliby5jb20v
针对页面登陆入口分析
二、实现流程分析首先需要明确下登录的目的,是为了获取登录后的cookie,然后携带着cookie去请求页面采集资源。
为了达到这个目的,我们需要知道cookie是在哪里被设置的,w博的cookie可以直接搜索找到set-cookie的接口。
紧接着分析接口参数的来源,是加密生成,还是某一个接口的返回值。如果是接口返回值,那么就继续分析新接口的参数,依次向前推。
寻找接口也是一个逆向推理的过程,从目的处推导到入口处。
分析后的登陆流程如下:
- 账号加密
- 携带加密账号,调用prelogin接口,获取rsa的密钥和其他必要参数
- 密码rsa加密
- 携带加密密码和其他必要参数,调用login.php接口,获取通行证ticket
- 携带通行证调用login接口,获取成功登陆后的cookie
2、抓包分析
建议使用抓包工具,用chrom开发者模式查找接口,某些接口看不到返回信息,这就造成了一部分人卡死在抓包的位置。
清空cookie,清空cache,清空账号输入框的默认账号信息。
打开抓包工具,设置过滤出请求中含有login的接口。
1、登录框输入账号,鼠标点击其他地方,成功抓到prelogin接口,通过使用同一个账号多次触发prelogin接口,可以发现参数su就是账号的加密,响应信息中包含有密钥pubkey,rsakv,nonce,servertime必须信息。
2、直接输入正确密码,如下图,从新增的接口中,依次查看参数和响应,首先发现login.php接口,响应了一个通行证的url,请求参数有一部分来源与prelogin接口的响应,新增的参数为sp,而sp的值就是密码加密后的值(后面分析js会看到对密码加密的代码)
紧接着又请求了通行证的url,返回信息截图如下,里面包含ticket的值接着调动ssologin.js的接口,返回一个js文件,复制js内容到编辑器中,通过搜索参数可以确定生成的js文件就是后面分析加密要找的js文件。
继续向下查看新增的接口,wbsso/login接口处使用了通行证生成的ticket,响应信息为true,下方红框的name与自己首页的名字一样。
从接口处,看着像是登录成功的样子,不然怎么会显示自己的名称呢? 继续查看下cookie,如下图,请求成功后设置了大量的cookie,拿着cookie与成功页面的cookie对比,完全一致。ok,整个抓包的流程,相对来说比较简单,注意观察参数和响应,注意控制抓包的速度,留意新增的接口,逐个查看,大胆猜测。
3、加密逻辑分析
复制 ssologin.js接口生成的js到编辑器中,依次查看加密参数。 直接搜索参数su,外加一个空格。 可以看到加密方式,首先对username进行url编码,再base64编码。 搜索_:,可以看到_的值为13位时间戳继续搜索sp,可以看到sp是明文密码搭配其他参数,通过rsa加密后的值
其他参数均为借口返回的值,不涉及到加密。
4、代码实现
账号加密实现
重点需要注意的是rsa加密的python实现
另外需要知道的技巧是,在调用login.php接口生成通行证url的时候,修改returntype的值为TEXT,可以直接获取到ticket的值,减少一次请求,如下图。
完整代码请联系作者获取,代码中未涉及到验证码验证问题,尽量使用自己的账号密码登录测试。对你有帮助,请扫码关注!感谢!
公众号:逆向旅行
微信号:fzcoder888888
定期分享Python进阶技术,爬虫
str4表示client_ver