快手滑块验证码分析 2022/03/17

之前快手滑块看过一遍但是没做,前天突然接到任务,需要生成did,没办法只能动手搞了。

老文章: 《快手滑块验证码分析 2021-10-21》

重新看了一遍流程,发现官网有一些更新。

现在双验证接口,分别是 /rest/zt/captcha/sliding/kSecretApiVerify 和 /rest/zt/captcha/sliding/verify

不过这俩接口是独立校验的,二者目前没有关联关系。(无论过了哪一个API的校验,都可以使用)

本文主要说一下新的验证接口 kSecretApiVerify 。


kSecretApiVerify

kSecretApiVerify 近期是新加的,参数是verifyParam。
在这里插入图片描述
如何断点不再详细介绍,大家可以参考老文章。
在这里插入图片描述
c.a[i(“0x31”)](r) 的值是验证接口中,加密前的verifyParam。

c.a[i(“0x31”)] 等同于 urlencode。

可以在控制台输出 r 。
在这里插入图片描述

经过分析,这几个参数含义如下:

  • captchaSn 滑块验证码信息
  • bgPicWidth 原背景图 Width
  • bgPicHeight 原背景图 Height
  • cutPicWidth 原滑块图 Width
  • cutPicHeight 原滑块图 Height
  • captchaExtraParam 浏览器指纹信息
  • gpuInfo 浏览器GPU信息
  • trajectory 滑动轨迹
  • relativeX 滑块X轴拖动距离
  • relativeY 滑块Y轴高度

captchaSn 、bgPicWidth、bgPicHeight、cutPicWidth、cutPicHeight 是根据 captchaSession 获取的验证码配置信息。
获取接口是 /rest/zt/captcha/sliding/config

captchaExtraParam 、gpuInfo 可以设为定值

relativeY 在配置信息中有,relativeX 需要自行计算。

trajectory 我们处理时需要由拖动距离生成。


trajectory

有行为检测,代码生成的匀速轨迹并不能通过校验,手动去复制吧。

操作方法如文章所示:《快手本地轨迹库制作方法》
在这里插入图片描述


verifyParam

kSecretApiVerify接口提交的参数是加密的,也就是说需要对明文的verifyParam加密。
在这里插入图片描述
还是断点后往下调试就行,具体步骤我就不贴了。
在这里插入图片描述
总之,加密是先 o = l(a) ,再 d(x) , 不过需要注意 d(o) 是Promise 类型。

l 比较简单,d 是一段加密。
在这里插入图片描述
再具体就自己点进去看吧。
在这里插入图片描述
点进去,发现新大陆了。
在这里插入图片描述
加密在这个文件,拿出来自己测吧。
在这里插入图片描述


Verify

验证成功会返回 captchaToken。
在这里插入图片描述

一般验证参数错误,轨迹错误,返回350014 。


整体流程

在这里插入图片描述


欢迎关注《pythonlx》公众号,可获取群聊二维码!

有问题可私信或留言!

### 实现快手滑块验证码自动化处理的技术方案 对于滑块验证码的自动化处理,通常涉及模拟人类行为以欺骗检测机制。针对快手平台或其他网站上的滑块验证,一种常见方法是利用`pyppeteer`库来操作浏览器并执行必要的动作[^3]。 #### 使用 Pyppeteer 和 Asyncio 处理滑块验证码 为了实现这一目标,可以采用Python中的异步框架如`asyncio`配合`pyppeteer`来进行页面交互。下面是一个简单的例子展示如何设置环境: ```python import asyncio from pyppeteer import launch async def main(): browser = await launch() page = await browser.newPage() await page.goto('https://www.example.com') # 替换成实际的目标网址 # 执行特定的操作比如点击按钮触发验证码加载 await page.click('#some-button') # 获取到滑块元素的位置信息 slider_handle = await page.querySelector('.slider') # 计算移动距离和路径规划(这里简化为直接指定偏移量) offset_x, offset_y = calculate_offset() # 移动鼠标至起始位置并按住左键不放 await page.mouse.move(x_start_position, y_start_position) await page.mouse.down() # 模拟拖拽过程 await page.mouse.move(offset_x, offset_y) # 松开鼠标按键完成拖拽 await page.mouse.up() await browser.close() def calculate_offset(): """计算需要拖动的距离""" pass # 此处应加入具体逻辑判断所需位移长度 # 启动事件循环运行main函数 asyncio.get_event_loop().run_until_complete(main()) ``` 上述代码片段展示了基本流程,但是请注意,在真实环境中还需要考虑更多细节,例如更精确地模仿用户的随机化运动模式以及应对可能存在的反作弊措施。 另外值得注意的是,许多在线服务提供商都在不断改进其安全策略,因此任何试图规避这些保护的行为都应当谨慎行事,并始终遵循法律法规和服务条款的要求。
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

考古学家lx(李玺)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值