数美滑块逆向分析

数美滑块简介

数美滑块验证就是其中一种常见的反爬虫手段。它通过要求用户按照特定轨迹拖动滑块来完成验证,从而有效区分人类操作和自动化脚本。对于爬虫开发者来说,突破数美滑块验证是一个具有挑战性的任务。本文将深入探讨数美滑块的加密机制、轨迹分析以及如何通过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;
    }

结果演示

posted @   playback6666  阅读(62)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示