数美滑块逆向分析
数美滑块简介
数美滑块验证就是其中一种常见的反爬虫手段。它通过要求用户按照特定轨迹拖动滑块来完成验证,从而有效区分人类操作和自动化脚本。对于爬虫开发者来说,突破数美滑块验证是一个具有挑战性的任务。本文将深入探讨数美滑块的加密机制、轨迹分析以及如何通过Java进行动态JS参数分析,并实现API供外部程序调用。
数美滑块验证流程分析
在数美滑块验证中,关键参数如滑块ID、背景图片URL、验证接口等通常经过混淆和加密处理。这些参数在前端JS代码中动态生成,使得直接分析静态页面难以获取有效信息。此外,数美滑块验证还采用了JS代码动态执行的方式,即在运行时根据特定条件生成或修改代码,进一步增强了安全性。
抓包分析
获取图片接口
该接口用于获取验证码的图片和参数rid。
可以看到这个接口中有organization和captchaUuid两个参数。其中organization为场景标识,不同网站这个值不同。captchaUuid是当前时间(年月日时分秒)+ 随机字符,可以按其规则用随机数生成。
验证接口
可以看到这个接口用到了获取接口返回的rid,除此之外还有很多加密参数,这些参数名会动态更新,而我们只需要重点关注其中三个参数就行,因为其他参数的明文都是固定的。在这个版本中,我们需要重点关注的三个参数名分别为uk、gm、zg。其中最长的一个参数gm是轨迹加密,也是我们需要重点分析的关键参数。
代码实现
加密函数
通过chrome调试分析得知,加密采用的是des/ecb/pkcs5padding,用JAVA标准库实现即可。
坐标识别
采用opencv的matchTemplate函数进行模板匹配。
轨迹生成
private List<Double> getTracks(double distance) {
//移动轨迹
List<Double> track = new ArrayList<>();
double current = 0;
//减速阈值
double mid = distance * 4 / 5;
//计算间隔
double t = 2.5;
//初速度
double v = 5;
while (current < distance) {
int a;
if (current < mid) {
a = 5;
} else {
a = -4;
}
double v0 = v;
//当前速度
v = v0 + a * t;
//移动距离
double move = v0 * t + (a * t * t);
// 当前位移
current += move;
track.add(current);
}
track.add(current + 10);
return track;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】