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

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

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

解决此类验证码 首先要解决滑动距离的判定 无论是使用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见个人简介

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


http://www.niftyadmin.cn/n/5708613.html

相关文章

C++进阶 AVL树的讲解以及实现

你好&#xff0c;欢迎阅读我的文章~ 个人主页&#xff1a;Mike 所属专栏&#xff1a;C进阶 目录 1. AVL的概念 2.AVL树的实现 2.1AVL树的结构 2.2AVL树的插入 2.2.1 插入的过程 2.2.2 平衡因子的更新 2.2.3 更新停止的条件 插入节点以及更新平衡因子的源码 3.AVL的旋…

Unity3D模型消融方法(一)

系列文章目录 unity工具 文章目录 系列文章目录👉前言👉一、消融效果👉二、使用步骤👉2-1.交互代码2-2. 完整shader代码👉2-3 新建材质球👉壁纸分享👉总结👉前言 今天介绍一下模型消融效果(shader实现) 还有另外一种换shader实现 大家好,我是心疼你的一切,…

使用tgz包下载安装clickhouse低版本

1.下载安装包 官方下载地址&#xff1a;https://packages.clickhouse.com/tgz/stable 阿里云下载地址&#xff1a;clickhouse-tgz-stable安装包下载_开源镜像站-阿里云 共需要下载四个文件 clickhouse-common-static-20.3.10.75.tgz clickhouse-common-static-dbg-20.3.10.7…

大数据-174 Elasticsearch Query DSL - 全文检索 full-text query 匹配、短语、多字段 详细操作

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

【项目经验分享】Stable Diffusion生成式扩散模型毕业设计项目案例定制

关于Stable Diffusion生成式扩散模型的毕业设计题目&#xff0c;这些题目涵盖了该模型的应用、优化、创新以及与其他领域的结合&#xff1a; 基础应用与优化 Stable Diffusion生成效果与风格控制技术研究Stable Diffusion模型在图片去噪中的应用基于Stable Diffusion的高分辨…

人工智能学习框架

人工智能学习框架是指用于开发和训练机器学习和深度学习模型的软件库和工具集。这些框架帮助开发者更高效地构建、训练和部署模型&#xff0c;加速人工智能应用的开发进程。 常见的人工智能学习框架 TensorFlow 由Google开发&#xff0c;是一个开源的深度学习框架&#xff0c;…

python中else使用汇总

在 Python 中&#xff0c; else 有多种用法&#xff1a; 一、与 if 语句搭配 通常与 if 、 elif 一起使用&#xff0c;当所有条件都不满足时执行 else 中的代码块。 num 5 if num > 10: print("大于 10") elif num 5: print("等于 5") else…

构建 debug 版本的 openmpi with ucx; ucx with-CUDA

0&#xff0c;文件结构 ./repo$ ls build_openmpi.sh build_ucx.sh autoreconf: not foundsudo apt-get update sudo apt-get install autoconfsudo apt install libtoolsudo apt install valgrind valgrind-mpi valgrind-dbg 1, DEBUG UCX build_ucx.sh git clone https…