网站链接
这里就不放链接了,某手web端的滑块,清理下cookie就会出
滑块流程
在请求数据的接口内,result出现400002,就是出现滑块了,这里url就是滑块链接
然后取出滑块链接里的captchaSession,去请求config这个链接
就会得到滑块的各种信息,如下图
最后是,请求kSecretApiVerify接口,验证加密参数verifyParam
加密参数verifyParam逻辑
全局搜索verifyParam:,发现只有一处
进到文件内,观察verifyParam,发现是变量a赋值的,a值又是在e[Jt(“0x37”)]这里赋值的,并且值是我没最终想要的,那就好办了,开始看堆栈吧
经过分析,会发现,verifyParam就是根据这些参数加密得到的
{
"captchaSn": '上面config里的captchaSn',
"bgDisWidth": 316, # 可以写死,根据config里的值*0.46,四舍五入得来
"bgDisHeight": 184, # 同上,可以写死
"cutDisWidth": 56, # 同上,可以写死
"cutDisHeight": 56, # 同上,可以写死
"relativeX": '需要自己识别滑块的距离',
"relativeY": '同上config里的值*0.46,四舍五入,但不可以写死',
"trajectory": "滑块拖动轨迹",
"gpuInfo": '显卡信息,可以写死',
"captchaExtraParam": '浏览器信息和指纹什么的'
}
trajectory
综合而言,只有轨迹信息trajectory是需要知道怎么生成的,其实就是a.slice(1),a值是上方这里生成的
大致跟一下,其实逻辑不难,可以直接py还原下,代码如下。
def trajectory_calculation(trajectory: list):
"""
快手滑块轨迹计算算法
:param trajectory: 轨迹,上图c=n[Na("0x124")]的值
:return: 计算后的轨迹
"""
r = trajectory[0][2]
c = ''
for t in trajectory:
c += f',{t[0]}|{t[1]}|{t[2]-r}'
c = c[1:]
return c
verifyParam
verifyParam加密的入口在这里
主逻辑在这里,首先先把参数c处理下
py可以直接处理,代码如下
from urllib import parse
def 懒得起名了():
captcha_data = {
"captchaSn": '上面config里的captchaSn',
"bgDisWidth": 316, # 可以写死,根据config里的值*0.46,四舍五入得来
"bgDisHeight": 184, # 同上,可以写死
"cutDisWidth": 56, # 同上,可以写死
"cutDisHeight": 56, # 同上,可以写死
"relativeX": '需要自己识别滑块的距离',
"relativeY": '同上config里的值*0.46,四舍五入,但不可以写死',
"trajectory": "滑块拖动轨迹",
"gpuInfo": '显卡信息,可以写死',
"captchaExtraParam": '浏览器信息和指纹什么的'
}
captcha_str = ''
for k, v in captcha_data.items():
captcha_str += f'&{k}={parse.quote(str(v))}'
return captcha_str[1:].replace('/', '%2F')
还是这张图,看处理逻辑,i就是上面py处理过的captcha_str,先h(i)赋值给o,在x(o)
一个个看,先h(i),还是蛮简单的,扣下来运行或者py还原下都可以
处理好得到第一个大数组,赋值给o
再看x(o),e是刚才的o,l是一个固定值
往下跟,发现到了一个加密文件里,可以把这个文件直接拿出来
这里先暂停,回溯一下,看看Jose是什么,如图
搜下Jose,发现是在加密文件里的这个o()
然后根据逻辑处理下加密文件,删除一些无用的函数,和对node检测的代码,也就是上图的这一大行,改成如下
然后下方,自己写个函数照抄就好,这里注意js里的Promise是要用then接收值的,得到了第二个大数组,也是就上面的x(o)
最后就是加密结果了,u就是刚才的大数组,e.from(u).toString(‘base64’),就是最后的加密结果了
最后的加密结果想跟的可以跟一下,就是根据Uint8Array,ArrayBuffer的一些操作,和环境检测,不想跟的话,直接node里new Buffer.from(u).toString(‘base64’),结果是一样的
感兴趣的小伙伴,赠送全套Python学习资料,包含面试题、简历资料等具体看下方。
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照下面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
工具都帮大家整理好了,安装就可直接上手!
三、最新Python学习笔记
当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
四、Python视频合集
观看全面零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
纸上得来终觉浅,要学会跟着视频一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、面试宝典