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

这是「进击的Coder」的第 827 篇技术分享

作者:TheWeiJun

来源:逆向与爬虫的故事

阅读本文大概需要 6 分钟。

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

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

eb74aa8d919eb3c4a616d8da98af7783.gif

立即加星标

da8559174726e2294ba66cbf180c7ea4.png

每月看好文

 目录


一、前言介绍

二、网站分析

三、参数分析

四、算法还原

五、思路总结

0bc58ec2e0b32786c7987f1f62022b9a.gif


一、前言介绍

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

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

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


二、网站分析

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

27def3672ce25cf04c22c0f2fb92c2d9.png

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

0a052a805e9b55fcac809219ddb2d647.png

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

cc4c2fa06f57ac667a4251f8464fc358.png

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


三、参数分析

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

a4db2ced2e7bef33eade6440d9f32269.png

5106824cef891888d3f7ce1950e23a74.png

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 接口的请求包。截图如下:

bbdf8742959e22474252dd967427ca7f.png

data参数分析如下:

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

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

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

    • jsv     js 的版本号。

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

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

    • x       滑块的x轴坐标。

    • y       滑块的y轴坐标。

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


四、算法还原

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

d135a848d8b041ae61ac145400632a69.png

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

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

433217bc6799e610d3c5a63a9a677a10.png

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

70beef4a3fb825ad1ebdb62349068f4a.png

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

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

    • 初始化传入图片 token 生成 ua。

    • 滑动后传入事件生成 ua。

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

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

a40be788d3fd470b91b7f4e1fca203fc.png

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

7b41b8e382a6542f38a8c6aaff86f4e2.png

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


五、思路总结

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

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

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

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

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

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

最近ChatGPT爆火,推荐一个干货满满的知识星球:

54f96c520f010d075cc9b7caa851d8ba.jpeg


aae4cb39e551ec0abccc0662b57ed694.png

END

1db73f8513f238b769b62a9c3dfb13b8.png

作者简介

我是TheWeiJun,有着执着的追求,信奉终身成长,不定义自己,热爱技术但不拘泥于技术,爱好分享,喜欢读书和乐于结交朋友,欢迎扫我微信与我交朋友💕

分享日常学习中关于爬虫及逆向分析的一些思路,文中若有错误的地方,欢迎大家多多交流指正💕

f8a7261aedb1eee9a1b15d7b3b6e215f.jpeg

1e0187a3dc23ca7bd0ff21afe05096f1.png


8f1414ff09fb0b60468ad425360d768b.png

点个在看你最好看

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值