admin管理员组文章数量:1531666
网站链接
这里就不放链接了,某手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爬虫逆向|某手网页滑块逆向分析 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dongtai/1725776791a1041930.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论