网络爬虫-数美滑块验证码

仅供研究学习使用。
今天带来的是数美滑块验证码的逆向

目标站 --> 传送门
在这里插入图片描述

解决此类验证码 首先要解决滑动距离的判定 无论是使用selenium还是使用协议的方式来破解 都绕不开滑动距离的识别
滑动距离可以参考以前我博客上的方式,或者找一找开源的一些算法,正常的opencv就可以搞定。

废话不多说我们直接进入正题。 先抓包分析接口

register接口
verify接口
其实所需要逆向的就两个接口

register 获取图片以及其他加密信息。

verify 验证是否成功。

我们来看看其中有哪些参数以及返回的参数


captchaUuid」:生成的UUID 32位随机字符串。

capchaUuID 的算法如下:

def getcapcha_uuid():
    total_string = "ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678"
    part = "".join([random.choice(total_string) for _ in range(18)])
    ctime = datetime.datetime.now().strftime("%Y%m%d%H%M%S")
    captcha_uuid = f"{ctime}{part}"
    return captcha_uuid

「register接口」

organization」:每个站点的「captchaUuid」是固定的,可以看成唯一标识ID。

其他参数」:model 为模式 模式分为:slide 滑块auto_slide 无感验证select 文字点选icon_select 图标点选seq_select 语序点选spatial_select 空间推理,我们今天处理的是slider滑块

bg」背景图片

fg」 滑块缺口地址 PS:这里如果是其他验证码 fg会变成order。order是提示信息。了解一下就行。本文不展示了。

k,l,rid」 接口返回的值 方便verify 参数调用。


「fverify接口」

这里我们看下请求参数

下文红框中的 12个加密值都是JS返回的。不包括之前的 「organization」以及「captchaUuid」。

其中gm为最长的参数。为轨迹加密。
在这里插入图片描述
再看看返回值。

根据riskLevelpass即通过
在这里插入图片描述


逆向分析部分

这里在逆向前需要做个准备。本文不涉及任何解混淆。就是干

这里要注意。数美这个滑块做了格式化检测。

你一旦替换或者格式化了,js 控制台就会卡死 。

这里要注意。只有当你替换完之后重新压缩代码才会成功。

这里直接断点打在下图位置。这个是请求传参。参数已经生成。往上找栈

在这里插入图片描述
在这里插入图片描述
已经很明显的 12个参数有8个就在这里能用。

看代码分析 后面这一段 有的是_0x27c7fb(0x46e) 这种函数传参(16进制)得到des的key值 也有的是直接就是明文des的key值,所以我们还要得到_0x27c7fb解密的函数。

然后这里getEncryptContent 函数可以自己扣。

也可以自己去python还原。

其实断点打在这里。可以明显看出

第一个值是加密的值。

第二个值是密钥。


ps : 这里有个小坑:gm参数是轨迹。在使用轨迹生成的时候。识别图片得到的距离需要 / 2 。至于为什么 请看下图

在这里插入图片描述


至此分析结束。
代码成品运行图:

在这里插入图片描述
其中 ‘riskLevel’: ‘REJECT’ 大概率就是轨迹被ban了导致校验不通过,这里可以自行优化轨迹代码,我这里贴一个自用的。

    def get_trajectory(self,distance):
        ge = []
        y = 0
        v = 0
        t = 1
        current = 0
        mid = distance * 3 / 4
        exceed = 20
        z = t

        ge.append([0, 0, 1])

        while current < (distance + exceed):
            if current < mid / 2:
                a = 15
            elif current < mid:
                a = 20
            else:
                a = -30
            a /= 2
            v0 = v
            s = v0 * t + 0.5 * a * (t * t)
            current += int(s)
            v = v0 + a * t

            y += random.randint(-5, 5)
            z += 100 + random.randint(0, 10)

            ge.append([min(current, (distance + exceed)), y, z])

        while exceed > 0:
            exceed -= random.randint(0, 5)
            y += random.randint(-5, 5)
            z += 100 + random.randint(0, 10)
            ge.append([min(current, (distance + exceed)), y, z])
        # print(ge)
        return ge

Ending

Github传送门

持续更新ing (欢迎各种star与fork)

联系q见个人简介

如有权益问题可以发私信联系我删除

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/892608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Collection 单列集合 List Set

集合概念 集合是一种特殊类 ,这些类可以存储任意类对象,并且长度可变, 这些集合类都位于java.util中,使用的话必须导包 按照存储结构可以分为两大类 单列集合 Collection 双列集合 Map 两种 区别如下 Collection 单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两…

Android:记录一个打包发布版的release包以后闪退的问题

个人感觉其实release闪退的问题挺难排查的&#xff0c;因为release包运行起来as捕获不到相应的应用程序进程&#xff0c;从而不易查看到日志&#xff0c;也是我玩得不溜&#xff0c;大家有不同的方法可以评论区探讨&#xff0c;我也定期回复一些评论一起讨论。以下是我遇到的情…

Scrapy | 使用Scrapy进行数据建模和请求

scrapy数据建模与请求 数据建模1.1 为什么建模1.2 如何建模1.3如何使用模板类1.4 开发流程总结 目标&#xff1a; 1.应用在scrapy项目中进行建模 2.应用构造Request对象&#xff0c;并发送请求 3.应用利用meta参数在不同的解析函数中传递数据 数据建模 | 通常在做项目的过程中…

标准IO练习及思维导图

1、完成标准io的单字符、字符串、格式化、模块化实现两个文件的拷贝&#xff1b; #include <myhead.h> typedef struct sockaddr_in addr_in_t; typedef struct sockaddr addr_t; typedef struct sockaddr_un addr_un_t; int main(int argc, const char *argv[]) {FILE*…

Kafka-设计思想-2

一、消息传递语义 现在我们对生产者和消费者的工作方式有了一些了解&#xff0c;让我们讨论一下Kafka在生产者和消费者之间提供的语义保证。 1、最多发送一次&#xff1a;会造成数据丢失 2、至少发送一次&#xff1a;会造成数据重复消费 3、只发送一次&#xff1a;我们想要的效…

docker 部署 vscode 远程开发环境(Go,Java)

1. 前言&#xff1a; 构建一个远程开发环境&#xff0c;一般来说开个linux云服务器是最好的&#xff0c;但是这里使用 docker 来搭建&#xff0c;docker 意味着更省资源&#xff0c;可以直接在一个 linux 主机上去设置 准备 一个安装了 docker 的主机&#xff0c;最好是linux&…

几何完备的3D分子生成/优化扩散模型 GCDM-SBDD - 评测

GCDM 是一个新的 3D 分子生成扩散模型&#xff0c;与之前的 EDM 相比&#xff0c;GCDM 优化了其中的图神神经网络部分&#xff0c;使用手性敏感的 SE3 等变神经网络 GCPNET 代替了 EDM 中的 EGNN&#xff0c;让节点间消息传递、聚合根据手性不同而进行。本文对 GCDM-SBDD&#…

制造企业数字化转型顶层规划案例(55页满分PPT)

基于集团的战略和运营特点&#xff0c;数字化转型应如何考虑&#xff1f; 在集团的战略和运营特点基础上进行数字化转型&#xff0c;需要实现业务多元化&#xff0c;整合资源和流程&#xff0c;推动国际化拓展&#xff0c;实施差异化战略&#xff0c;并通过数据驱动决策&#…

WPF开发一个语音转文字输入软件(一)

本文探索的Demo地址: https://gitee.com/lishuangquan1987/try_win32 https://github.com/lishuangquan1987/try_win32 后续会把他当做一个开源项目来维护 需求 开发一个软件&#xff0c;能够让用户说话来进行文字输入。具体如下&#xff1a; 像腾讯电脑管家那样的悬浮球悬浮…

Py之pygetwindow:pygetwindow的简介、安装和使用方法、案例应用之详细攻略

Py之pygetwindow&#xff1a;pygetwindow的简介、安装和使用方法、案例应用之详细攻略 目录 pygetwindow的简介 pygetwindow的安装和使用方法 pygetwindow的案例应用 1、使用了Windows系统打开了记事本应用程序&#xff0c;其窗口标题为“无标题 - 记事本” 2、Window对象…

STM32学习笔记---RTC

目录 一、什么是RTC 二、如何配置RTC 1、标准实时时钟部分(万年历部分) 1.1 时钟源分类 1.2 RTC时钟源的选择 1.3 精密校正 1.4 异步7位预分频器 1.5 粗略校正 1.6 同步15位分频 1.7 日历寄存器 1.8 RTC的初始化与配置 1.9 程序设计 2、闹钟部分 2.1 闹钟的初始化…

Python酷库之旅-第三方库Pandas(155)

目录 一、用法精讲 706、pandas.DatetimeTZDtype类 706-1、语法 706-2、参数 706-3、功能 706-4、返回值 706-5、说明 706-6、用法 706-6-1、数据准备 706-6-2、代码示例 706-6-3、结果输出 707、pandas.Timedelta.asm8属性 707-1、语法 707-2、参数 707-3、功能…

信息学CCF CSP-J/S 2024常见问题汇总,低年级考生重点关注

摘要 随着2024年CSP-J/S初赛的临近&#xff0c;各省报名要求细则陆续公布。为了帮助广大考生和家长准确了解各省政策&#xff0c;自主选拔在线团队特为汇总整理全国各省CSP-J/S2024认证相关问题&#xff0c;希望可以帮助各位考生更好的备考&#xff01; CCF CSP-J/S 2024 认证…

Android平台RTSP|RTMP播放器PK:VLC for Android还是SmartPlayer?

好多开发者&#xff0c;希望在Android端低延迟的播放RTMP或RTSP流&#xff0c;本文就目前市面上主流2个直播播放框架&#xff0c;做个简单的对比。 VLC for Android VLC for Android 是一款功能强大的多媒体播放器&#xff0c;具有以下特点和功能&#xff1a; 广泛的格式支持…

PDF-XChange PRO v10.4.2.390 x64 已授权中文特别版

PDF-XChange PRO是一款功能强大的PDF编辑和查看软件&#xff0c;PDF-XChange PRO 一个多合一的PDF解决方案。这是Tracker Software的三个最佳应用程序的套件&#xff1a;PDF-XChange Editor Plus&#xff0c;PDF-Tools和PDF-XChange Standard。使用 PDF-XChange Editor Plus&am…

vector的深入剖析与底层逻辑

前言&#xff1a; 上篇我们谈到vector的概念&#xff0c;使用&#xff0c;以及相关接口的具体应用&#xff0c;本文将对vector进行深入剖析&#xff0c;为读者分享其底层逻辑&#xff0c;讲解其核心细节。 上篇链接&#xff1a; 初始vector——数组的高级产物-CSDN博客 一.…

CDGA|数据治理:如何让传统行业实现数据智能

在当今这个数字化时代&#xff0c;数据已成为推动各行各业转型升级的关键力量。对于传统行业而言&#xff0c;如何从海量、复杂的数据中挖掘价值&#xff0c;实现“数据智能”&#xff0c;成为了提升竞争力、优化运营效率、创新业务模式的重要途径。本文将探讨数据治理如何助力…

【文献及模型、制图分享】干旱区山水林田湖草沙冰一体化保护与系统治理——基于土地退化平衡视角

文献介绍 目标明晰、统筹兼顾、干预适度是山水林田湖草沙冰一体化保护与系统治理的客观要求。基于土地退化平衡&#xff08;LDN&#xff09;视角&#xff0c;构建涵盖双重对象、双重法则、双重原则、指标体系、价值取向的理论框架&#xff0c;并以天山北坡城市群为例&#xff…

Flume抽取数据(包含自定义拦截器和时间戳拦截器)

flume参考网址&#xff1a;Flume 1.9用户手册中文版 — 可能是目前翻译最完整的版本了https://flume.liyifeng.org/?flagfromDoc#要求&#xff1a; 使用Flume将日志抽取到hdfs上&#xff1a;通过java代码编写一个拦截器&#xff0c;将日志中不是json数据的数据过滤掉&#xf…

模拟退火算法最常见知识点详解与原理简介控制策略

章节目录 模拟退火算法简介与原理 算法的基本流程与步骤 关键参数与控制策略 模拟退火算法的应用领域 如何学习模拟退火算法 资源简介与总结 一、模拟退火算法简介与原理 重点详细内容知识点总结 1. 模拟退火算法简介 模拟退火算法&#xff08;Simulated Annealing, SA&#x…