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

news/2024/10/17 9:53:39/

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

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

解决此类验证码 首先要解决滑动距离的判定 无论是使用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 = 0v = 0t = 1current = 0mid = distance * 3 / 4exceed = 20z = tge.append([0, 0, 1])while current < (distance + exceed):if current < mid / 2:a = 15elif current < mid:a = 20else:a = -30a /= 2v0 = vs = v0 * t + 0.5 * a * (t * t)current += int(s)v = v0 + a * ty += 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.ppmy.cn/news/1539676.html

相关文章

第四届计算建模、仿真与数据分析国际学术会议(CMSDA 2024)

大会简介 第四届计算建模、仿真与数据分析国际学术会议(CMSDA 2024)将于2024年12月6-8日即将在中国浙江省杭州市召开。计算建模、仿真与数据分析国际学术会议至今已成功举办三届&#xff0c;吸引了近300名计算机与大数据等领域的专家学者参会&#xff0c;多所国内外高等院校、…

QT--单选按钮(QRadioButton)和复选按钮(QCheckBox)

在Qt中&#xff0c;单选按钮&#xff08;QRadioButton&#xff09;和复选按钮&#xff08;QCheckBox&#xff09;是两种常用的用户界面控件&#xff0c;它们的主要区别在于选择行为和用途&#xff1a; QRadioButton&#xff08;单选按钮&#xff09; 选择行为&#xff1a;单选…

Android Jetpack Compose中UI刷新的几种方式

Android Jetpack Compose中UI刷新的几种方式 在 Jetpack Compose 中,如果你想强制刷新 UI,可以使用 remember 和 mutableStateOf 来创建一个可观察的状态。当这个状态变化时,Compose 会自动重组 UI。以下是一些常见的方法来实现这一点: 1. 使用 mutableStateOf 你可以使…

视频网站后端技术:Spring Boot的创新实践

摘 要 使用旧方法对视频信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在视频信息的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。 这次开发的视频网站系统管理员功能有…

什么是CPC认证 儿童产品CPC认证如何申请

CPC认证&#xff0c;全称为Childrens Product Certificate&#xff0c;是美国针对儿童产品安全性的强制性认证。它是由进口商或美国&#xff08;国内&#xff09;制造商颁发的文件&#xff0c;证明该产品符合所有CPSIA&#xff08;美国消费品安全改进法案&#xff09;要求。CPC…

Apache Doris介绍

Apache Doris 的发展 Apache Doris 是一款基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以高效、简单、统一的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的…

C#基于Winform实现透明悬浮球的源代码

前文解释了思路&#xff0c;这里直接贴一下代码。 c#透明悬浮球实现 从零开始用C#写一个桌面应用程序&#xff08;三&#xff09;_c# 悬浮窗-CSDN博客 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Draw…

远翔原厂芯片设计开发软件:降压恒流共阳极无频闪调光芯片FP7126/7127/7128,舞台灯磁吸轨道灯智能家居应用方案

FP7126 FP7127 FP7128是平均电流模式控制的 LED 驱动 IC&#xff0c;具有稳定输出恒流的能力&#xff0c;优秀的负载调整率与高精度的电流控制。不用额外增加外部补偿元件&#xff0c;简化 PCB 板设计。FP7126 FP7127 FP7128可接受 PWM 数位调光&#xff0c;建议调光频率 0.1kH…