好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 ZydmxhZ 于 2023-8-14 15:46 编辑
PS: 侵删 侵删 侵删
1. 拿到验证码的url, 解析出request_code
2. 通过request_code, 请求ext_api/page_data接口, 拿到验证码基础信息. 主要包含session和sign两个长字符串
2.1 sign是一段加密过的 包含环境检测/控制流的/很长/很大的 一串js代码. 解密sign要用到session, 目前检测的环境不多, sign解密成js代码并且执行成功后可以拿到一个关键的变量 _f 的值.
3. 通过request_code, 请求ext_api/spiderindefence/info接口, 拿到验证码的两张图片信息, 以及一个很重要的hint值(乱码字符串, 解密九宫格图片的顺序时要用到)
4. 识别第一张图片文本, 拿到要连接哪个颜色; 识别第二张图片, 拿到 哪个坐标(位置)是哪个颜色
4.1 文本图片 可以考虑使用ddddocr, 可以勉强识别, 成功率较低
4.2 九宫格图片 识别
4.2.1 服务器下发的九宫格原图, 顺序/大小都是混淆过的. 页面最终显示的验证码 是在客户端 先用js解密出九宫格图片的排序顺序, 然后用canvas重新画出的一张图片.
4.2.2 需要扣一下 解密九宫格图片排序的js代码; canvas画图的代码用python的PIL库复现一下就行(一点儿也不难)
4.2.3 重组后的九宫格图片, 还要注意调整分辨率 (不然会导致下面4.2.4中坐标读取错误)
4.2.4 每个位置的球的颜色识别, 本质就是用PIL库读取固定点的RGB值就可以了, 判断RGB在哪个颜色范围, 就属于哪个颜色. (9个球的位置都是固定的)
4.2.5 参考 原图:
ball
重新排序以及重置分辨率后:
order_ball
5. 生成滑动轨迹. 手动收集, 每个位置的球都手动连一次, 要注意收集到的轨迹数组的长度, 太长不行, 太短也不行. (不然就得重新收集, 一点儿也不麻烦)
6. 加密各个参数, 提交验证(这部分有很多要注意的点, 先写还记得的)
6.1 behavior和_token, 使用的同一个加密算法, 加密两轮, 但是传入的参数有区别, 注意区分就好了. 加密结果要用到上面解出来的_f值
6.2 _token主要包含 两个重要的时间戳, 几段不完整的鼠标移动轨迹数组和一个点击事件生成的小数组, 以及一些简单的基础环境信息
6.3 behavior主要包含 九宫格图片与各个元素的相对位置坐标, 点击次数, 以及滑动轨迹(有长度限制)
6.3 时间戳部分, 在正确的位置生成正确的时间戳! 注意每个有关联的时间戳之间的差值. 多刷新几次浏览器, 拿到一个大概的差值, 在代码里随机生成一下
6.4 轨迹部分, 注意每个轨迹数组是怎么来的. 不同的轨迹数组, 但是可以相互印证, 对不上就鸡鸡!
图片顺序的解密, js代码的解密, 轨迹的加密代码 都不难. 扣完代码, 再加上补环境的代码, 也就400+行!
更多的是 每个节点生成的时间戳 和 各个轨迹数组的验证! |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|