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

server/2024/10/23 0:20:05/

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

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

解决此类验证码 首先要解决滑动距离的判定 无论是使用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/server/134031.html

相关文章

六、LogicFlow 自定义业务边 Edge

前言 经过前面的文章讲解&#xff0c;目前已经实现了节点拖拽到画布中&#xff0c;并且也实现了节点之间的基础连线&#xff0c;到这里也算是入了门&#xff0c;接下来继续探究新学习新的功能&#xff0c;以满足新的需求&#xff0c;那么这一章就会学习如何更改两节点之间的连…

云开发的力量:腾讯云产品在业务项目中的最佳实践分享

全文目录&#xff1a; &#x1f4a1; 前言&#xff1a;技术如何助力业务成功&#x1f31f; 目录&#x1f50d; 应用背景&#xff1a;业务痛点与挑战&#x1f4ca; 高并发场景中的挑战 &#x1f6e0; 腾讯云云开发解决方案&#xff1a;最佳实践与接入方式&#x1f310; 云开发如…

苍穹外卖--开发记录day08

目录 苍穹外卖day08一&#xff1a;导入地址簿代码二&#xff1a;用户下单三&#xff1a;微信支付 苍穹外卖day08 一&#xff1a;导入地址簿代码 很简单就是单表的增删改查&#xff0c;这里不做过多的赘述了&#xff1b; 二&#xff1a;用户下单 这里用户下单所涉及到的参数比较…

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(3)

1.问题描述&#xff1a; compatibleSdkVersion升级到5.0.0&#xff08;12&#xff09;之后&#xff0c;调用坐标系转换API&#xff1a;map.convertCoordinate(mapCommon.CoordinateType.WGS84, mapCommon.CoordinateType.GCJ02, { longitude: location.longitude, latitude:…

设计模式-模板方法

模板方法&#xff08;Template Method&#xff09;是行为型设计模式的一种&#xff0c;它在一个抽象类中定义了一个算法的骨架&#xff0c;而将算法的一些步骤延迟到子类中实现。通过这种方式&#xff0c;模板方法使得子类可以在不改变算法整体结构的情况下&#xff0c;重新定义…

最全面的Mac到手检查方向整理,新Mac如何自检

如果的Mac刚刚到手&#xff0c;那么一定要仔细检查&#xff0c;而不是直接就用&#xff0c;这样有问题也能及时返厂换新或者退款&#xff0c;不然时间长了发现问题后只能吃闷亏了 一、外观检查 1、整体外观 仔细查看 MacBook 的外壳是否有划痕、磕碰或凹陷。尤其注意机身的边…

PHP中的ReflectionClass常见用法

ReflectionClass是 PHP 中的一个类&#xff0c;它提供了有关类的信息的反射。 使用ReflectionClass可以在运行时获取关于类的各种信息&#xff0c;例如类的名称、方法、属性、注释等。 以下是一些常见的用法&#xff1a; 获取类的名称&#xff1a; $reflection new Reflec…

如何使用Java爬虫处理API接口返回的JSON数据?

处理API接口返回的JSON数据是Java爬虫开发中的一个常见任务。在Java中&#xff0c;有多个库可以帮助我们解析JSON数据&#xff0c;其中最流行的是Jackson和Gson。以下是使用这两个库处理JSON数据的基本步骤和示例代码。 使用Jackson处理JSON Jackson是一个功能强大的JSON处理…