DX滑块验证码别乱捅!一不小心就反爬了。

2023-11-12

​大家好,我是TheWeiJun,欢迎来到我的公众号。今天我们将探讨一个有趣的话题:逆向滑块验证码。在互联网时代,随着网络安全问题日益引起人们的关注,各种验证码技术被广泛应用于各种网站和应用程序中,其中包括了滑块验证码。尽管滑块验证码是一种流行的验证方式,但是我们可以使用逆向工程技术来破解它,并深入了解其背后的工作原理。接下来,我们将一步步揭示滑块验证码的流程,并通过实例演示如何逆向滑块验证码。

特别声明:本公众号文章只作为学术研究,不作为其他不法用途;如有侵权请联系作者删除。

立即加星标

每月看好文

 目录

一、前言介绍

二、网站分析

三、参数分析

四、算法还原

五、思路总结

公众号:逆向与爬虫的故事

专注于网络爬虫、JS逆向、APP逆向、安全攻防实战经验分享及总结。


一、前言介绍

滑块验证码(Slider Captcha),又称拼图验证码或滑动验证码,是一种常见的验证机制,旨在防止机器人和恶意攻击者对网站进行自动化操作。与传统验证码不同,滑块验证码需要用户通过将一个滑块拖动到正确的位置来完成验证。

通常,滑块验证码由两部分组成:一个背景图像和一个滑块。在验证过程中,用户需要按照提示将滑块拖动到正确的位置。为了防止针对验证码的攻击,滑块验证码会使用多种技术来检测用户的行为模式并确定是否存在异常行为,例如反复尝试拖动滑块或使用自动化脚本进行操作。

总之,滑块验证码是一种常见的验证机制,因其易于使用和安全性高而被广泛应用于各种网站和应用程序中。


二、网站分析

1、打开我们本次分析的DX定制版滑块网址,截图如下:

2、输入imei序列号,回车后即可触发滑块,截图如下:

3、接下来我们触发滑块,在network中捕获滑块的请求包,截图如下所示:

总结:观察上图中的请求接口,我们发现主要有两种xhr请求。一种是a?w=288开头的,另一种是v1开头的接口。接下来,我们一起进入参数分析环节去进行接口分析吧。


三、参数分析

1、先看看滑块背景的请求包(也就是a?w=288开头的),截图如下所示:

data参数分析如下:

    • ak      经过分析在不同的电脑和浏览器上,ak值固定不变。

    • c        在本机中也固定不变。

    • aid    时间戳+8位随机数拼接固定字符串组成。

    • sid    上一个滑块背景请求包返回的数据,字段为sid,同名。

    • t        cookie值。

    • r        一个17位随机数。

response参数分析如下:

    • sid     服务端返回,v1接口认证时会用到。

    • y        滑块的y轴坐标。

    • x        滑块的x轴坐标。

    • p1       滑块图片背景。

    • p2      滑块的缺口图片。

总结:我们再看一下返回数据,发现这个DX定制版最有意思的地方,他直接把识别距离给我们返回了。按照之前官网的流程,我们还需要还原一下底图再去识别得到X坐标。此刻什么cv2、ddddocr都可以不用了,我们也就更省事了。直觉告诉我,没有这么简单。先埋个伏笔,接下来直接滑动进行请求验证。

2、现在我们故意划错误一下,来看下v1接口的请求包。截图如下:

data参数分析如下:

    • ac     重要参数加密,滑块轨迹浏览器指纹等。

    • ak     固定不变,同a?w=288接口的值一致。

    • c       在本机中也固定不变。

    • jsv     js的版本号。

    • sid    a?w=288传回来的sid。

    • aid    时间戳+8位随机数拼接固定字符串组成。

    • x       滑块的x轴坐标。

    • y       滑块的y轴坐标。

总结:参数初判断到此就结束了,接下来我们进入跟栈和算法还原环节,突破滑块的层层验证吧。


四、算法还原

1、我们开始选择跟栈,找到ac的加密位置,在下一个断点我们可以看到这里就是他加密的地方了,但是很奇怪,我们发现这里已经有了部分密文值了。截图如下:

总结:我简单说一下这个密文值的来历,DX会在一开始加载的时候就会初始化,然后记录你的指纹跟一个固定值来生成的一个参数,我这里也不跟栈,大家直接搜window._dx.UA.init即可,然后下断就知道了。

2、搜window._dx.UA.init,定位到指定代码块,截图如下所示:

3、再接着往下走,既然我们知道x是他第一次的初始化,那么就把整个代码扣下来,本地去补一下环境,然后按照他的方式来进行即可。截图如下:

这里是我本地的导出方式,轨迹的话,我就不跟了,DX本身对轨迹检验不严格,大家稍微仔细一点就没啥问题。

总结了下,ua(ac)的生成主要分为以下三步:

  •     初始化传入图片token生成ua。
    • 滑动后传入事件生成ua。

    • 最后sendSA和sendTemp后生成最终的ua。

4、我们最终在node中模拟也遵循这三步就好了。扣代码后补环境,最后输出代码文件如下:

5、最后直接请求验证几个,唯一要注意的是,坐标x值要乘以1.2。基本就没啥问题。这个DX本身难度不大,对比vivo定制版少了好几步流程,验证截图如下:

总结:本篇文章分析到这里就结束了,我们已经能够还原DX滑块加密参数了。最后想说,感谢大家耐心观看❤️。


五、思路总结

回顾整个分析流程,本次难点主要概括为以下几点:

  • 如何识别滑动距离(有干扰项的情况下)

  • nodejs中如何模拟浏览器的监听事件机制

  • 验证我们生成ac的算法是否正确

  • Js代码补环境及运行成功

本篇分享到这里就结束了,欢迎大家关注下期,我们不见不散☀️☀️

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DX滑块验证码别乱捅!一不小心就反爬了。 的相关文章

  • Lighttpd 和 cgi python

    我正在尝试通过 lighttpd 执行一些 python 脚本 但是当我尝试运行它时 我只得到一个要求我下载的空白文件 lighttpd conf server modules mod access mod alias mod access
  • 是否有解决方法可以通过 CoinGecko API 安全检查?

    我在工作中运行我的代码 一切都很顺利 但在不同的网络 家庭 WiFi 上 我不断收到403访问时出错CoinGecko V3 API https www coingecko com api documentations v3 可以观察到 在
  • 与区域指示符字符类匹配的 python 正则表达式

    我在 Mac 上使用 python 2 7 10 表情符号中的标志由一对表示区域指示符号 https en wikipedia org wiki Regional Indicator Symbol 我想编写一个 python 正则表达式来在
  • 使用特定的类/函数预加载 Jupyter Notebook

    我想预加载一个笔记本 其中包含我在另一个文件中定义的特定类 函数 更具体地说 我想用 python 来做到这一点 比如加载一个配置文件 包含所有相关的类 函数 目前 我正在使用 python 生成笔记本并在服务器上自动启动它们 因为不同的
  • 元组有什么用?

    我现在正在学习 Python 课程 我们刚刚介绍了元组作为数据类型之一 我阅读了它的维基百科页面 但是 我无法弄清楚这种数据类型在实践中会有什么用处 我可以提供一些需要一组不可变数字的示例吗 也许是在 Python 中 这与列表有何不同 每
  • 在 django ORM 中查询时如何将 char 转换为整数?

    最近开始使用 Django ORM 我想执行这个查询 select student id from students where student id like 97318 order by CAST student id as UNSIG
  • Python 中的舍入浮点问题

    我遇到了 np round np around 的问题 它没有正确舍入 我无法包含代码 因为当我手动设置值 而不是使用我的数据 时 返回有效 但这是输出 In 177 a Out 177 0 0099999998 In 178 np rou
  • 删除flask中的一对一关系

    我目前正在使用 Flask 开发一个应用程序 并且在删除一对一关系中的项目时遇到了一个大问题 我的模型中有以下结构 class User db Model tablename user user id db Column db String
  • Python zmq SUB 套接字未接收 MQL5 Zmq PUB 套接字

    我正在尝试在 MQL5 中设置一个 PUB 套接字 并在 Python 中设置一个 SUB 套接字来接收消息 我在 MQL5 中有这个 include
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • Pandas Merge (pd.merge) 如何设置索引和连接

    我有两个 pandas 数据框 dfLeft 和 dfRight 以日期作为索引 dfLeft cusip factorL date 2012 01 03 XXXX 4 5 2012 01 03 YYYY 6 2 2012 01 04 XX
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • pyspark 将 twitter json 流式传输到 DF

    我正在从事集成工作spark streaming with twitter using pythonAPI 我看到的大多数示例或代码片段和博客是他们从Twitter JSON文件进行最终处理 但根据我的用例 我需要所有字段twitter J
  • 从 NumPy ndarray 中选择行

    我只想从 a 中选择某些行NumPy http en wikipedia org wiki NumPy基于第二列中的值的数组 例如 此测试数组的第二列包含从 1 到 10 的整数 gt gt gt test numpy array nump
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • 根据列 value_counts 过滤数据框(pandas)

    我是第一次尝试熊猫 我有一个包含两列的数据框 user id and string 每个 user id 可能有多个字符串 因此会多次出现在数据帧中 我想从中导出另一个数据框 一个只有那些user ids列出至少有 2 个或更多string
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • Pandas 每周计算重复值

    我有一个Dataframe包含按周分组的日期和 ID df date id 2022 02 07 1 3 5 4 2022 02 14 2 1 3 2022 02 21 9 10 1 2022 05 16 我想计算每周有多少 id 与上周重
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是

随机推荐

  • java根据模板生成world文件

    首先找一个world文件模板修改一下 类似如下图修改 修改完之后保存文件先保存xml文件之后修改ftl后缀名 保存成xml之后 有的时候改的有问题 需要使用文本查看器修改 手动的修改完整为 gongchenmingchen 这样的 所以需要
  • 虚拟机教程(一) 启用win10自带虚拟机

    由于本人电脑是win10 故尝试以下win10 自带的Hyper V虚拟机 特写教程如下 刚刚都写好了 不知道什么原因保存失败 刷新后整个都没了 草稿箱都找不到 重新写 一切从简 第一步 打开控制面板 gt 程序和功能 gt 启用windo
  • 浅谈Node中的模块化

    关于这篇文章早在去年年初的时候我就想写一片关于模块化的文章 但是推到现在才来完成也有很多好处 巩固之前对Node的理解 毕竟在我目前的项目中还没有一款项目是用到了Node开发 所以导致我对Node的一些基本知识已经忘记 一 什么是模块化 现
  • mac安装Golang开发环境及快速入门

    目录 一 Mac brew 安装go环境 1 1 安装步骤 1 2 设置GOPATH 及环境变量 1 3 编写第一个go程序 二 快速入门 2 1 快速入门需求 2 2 go学习 自用 2 2 1 go基础程序 2 2 2 变量声明 2 2
  • java递归和非递归实现快排

    Java递归和非递归实现快排 文章目录 Java递归和非递归实现快排 前言 一 快速排序基本逻辑 二 过程演示 三 实现代码 总结 前言 最近复习数据结构 顺便复习快速排序的过程 一 快速排序基本逻辑 快排以某个关键字为基准 将待排序序列分
  • Jenkins 构建打包

    Jenkins构建打包方便了开发人员冗余的打包操作 具体怎么使用呢 这里我们来了解一下 jenkins操作面板 这里有两个情况 1 如果打包配置里已经指定了打包分支 这里会显示 立即构建 2 如果配置了多个打包分支 这里会显示 Build
  • Qt relaease添加调试

    Qt relaease添加调试 设置Qt安装路径下mkspecs common msvc desktop conf里的内容 QMAKE CFLAGS RELEASE WITH DEBUGINFO QMAKE CFLAGS OPTIMIZE
  • AndroidManifest中activity属性参数设置大全

    activity属性设置大全 android alwaysRetainTaskState true false android clearTaskOnLaunch true false android configChanges mcc m
  • 多节锂电串联保护板ic_如何有效保护锂电池板,一款优质的MOS管就能解决

    锂电池几乎应用于我们日常接触到的各类电器之中 但如何保护锂电池 你又是否知道呢 其实在锂电池保护板 最主要的元器件是IC与MOS MOS对锂电池板的保护作用非常大 它可以检测过充电 检测过放电 检测充电时过电电流 检测放电时过电电流 检测短
  • 在vue项目中使用SockJS实现websocket通信

    1 引入SockJS 和Stomp npm install sockjs client npm install stompjs import SockJS from sockjs client import Stomp from stomp
  • python里面读取h5文件报错OSError: Can‘t read data (address of object past end of allocation)

    报错如下 File h5py objects pyx line 54 in h5py objects with phil wrapper File h5py objects pyx line 55 in h5py objects with
  • C#通过WEBREQUEST调用WEBSERVICE

    1 首先通过WSDL说明创建SOAP消息 XML 2 创建WEBREQUEST 将XML加入WEBREQUEST的RequestStream 3 通过WEBREQUEST的Write函数发起请求 4 通过WEBREQUEST的GetResp
  • C语言中的小数

    一个数字 是有默认类型的 对于整数 默认是 int 类型 对于小数 默认是 double 类型 小数分为两种类型 float 4字节 double 8字节 表现形式 十进制形式 4 023 75 0 0 27 指数形式 7 25 102 0
  • Python爬取个性签名

    coding utf 8 import tkinter from tkinter import from tkinter import messagebox import requests import re from PIL import
  • spyder的cell如何使用(未写)

    目前不知道如何使用 看不出不同的cell分界线在哪
  • 常用知识点总结-自用

    文章目录 1 nohup 2 tmux 3 计算程序运行时间 4 计算模型大小 1 nohup nohup python u 文件名 gt log log 2 tmux 启动会话 tmux new s name 从会话跳出 ctrl b d
  • Mysql安装

    压缩包安装参考 https baijiahao baidu com s id 1632332658294840653 wfr spider for pc 配置环境变量 把mysql的bin目录配置到path变量 新增my ini文件初始化配
  • 如何安装openmpi

    安装openmpi 官网下载tar gz文件 解压缩 tar zxvf cd 到文件目录下 configure prefix usr local openmpi 安装目录 make j4 sudo make install 4核编译 添加环
  • Java反射获取SuperClass中的字段

    包 org springframework util ReflectionUtils ReflectionUtils findField clazz fieldName public class ReflectionTest public
  • DX滑块验证码别乱捅!一不小心就反爬了。

    大家好 我是TheWeiJun 欢迎来到我的公众号 今天我们将探讨一个有趣的话题 逆向滑块验证码 在互联网时代 随着网络安全问题日益引起人们的关注 各种验证码技术被广泛应用于各种网站和应用程序中 其中包括了滑块验证码 尽管滑块验证码是一种流