声明
本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!
目标网站
aHR0cHM6Ly9hdXRob3IuYmFpZHUuY29tL2hvbWU/ZnJvbT1iamhfYXJ0aWNsZSZhcHBfaWQ9MTU2NTA5MjE0MjUwODY1OA==
前言
之前搞过一个某壳登录的文章里面有牵扯到百度的喵星人指纹。 今天来搞一下某度-某家号的旋转验证码。 说实话 我也不知道这个是v1旋转还是v2旋转。 只是刚好用到了。就研究了一下。
分析
通过代码或者自动化工具或是代理访问会出现验证码。 也可以通过无痕浏览器清除掉cookie 反复刷新两次也可以出现 如下图 刷新此页面 如图所示 列表中没有数据。我们网上看。 这里不卖关子了。
第一次的viewlog 请求。
请求参数如下
- ak是固定值。
- callback的生成逻辑如下(写死也可以)
- _ 是时间戳
js
function get_callback() {
page = 0
prefix = "__jsonp"
return "".concat(prefix).concat(page++).concat((new Date).getTime())
}
返回值 as 和 tk 以及as 在之后的请求参数会用到
getstyle获取图片
如图所示。这个请求呢就是获取图片的参数。 请求参数如下
- 其他参数同第一次参数一样
- tk 第一个请求的返回值里的值 返回值 backstr,以及img img就是需要识别的图片。
第三次请求第二次viewlog请求
如图所示。又是 viewlog请求 传参
- 其他参数同上。
- as 第一次接口返回
- tk 第一次接口返回
- fs 需要我们逆向的参数。
fs的生成逻辑
首先打开第二次viewlog参数生成的地方。我们跟栈进去 找到这个postData 往上走 ok 以及看到了fs的生成逻辑了。 就是这个
js
var i = JSON.stringify(o.rzData), r = o.encrypt(i)
这里牵扯到两个东西
- o.rzData
- o.encrypt
o.rzData
如上图所示 可以看到。分别有两个参数 backstr:上文请求获取到的backstr ac_c:识别的角度。仍需判断参数传递位置。 我们继续在代码中搜索 ac_c
最后锁定在这个位置。 然后我们继续找i.percentage
最后确定在这个位置。 ac_c的计算方式如下
js
var ac_c = parseFloat(angle / 360).toFixed(2)
angle是识别的角度。
o.encrypt
这个就很简单了。 断点进去一看 一目了然的AES。 唯一不清楚的点
js
t = this.store.nameL + this.store.nameR
- this.store.nameL: 第一次请求返回的 as
- 定值:"appsapi0"
识别验证码以及封装
这里呢 识别验证码。有一万种方法识别。我就不推荐了。毕竟也没有广告费。 获取的角度以及接口返回的backstr还有as当作传参生成fs 最后传给最后一次的viewlog请求。
最后op传参返回为1 代表返回成功。 然后再看数据接口 果然有数据。
结语
成功后 如图所示 本章说实话不难。但是需要的资料较多。而且要有耐心。识别验证码也需要找打码平台或者自己训练。 也算是不错的一个学习案例。 代码在星球 可自取