这是「进击的Coder」的第 827 篇技术分享
作者:TheWeiJun
来源:逆向与爬虫的故事
“
阅读本文大概需要 6 分钟。
”大家好,我是 TheWeiJun。今天我们将探讨一个有趣的话题:逆向滑块验证码。在互联网时代,随着网络安全问题日益引起人们的关注,各种验证码技术被广泛应用于各种网站和应用程序中,其中包括了滑块验证码。尽管滑块验证码是一种流行的验证方式,但是我们可以使用逆向工程技术来破解它,并深入了解其背后的工作原理。接下来,我们将一步步揭示滑块验证码的流程,并通过实例演示如何逆向滑块验证码。
特别声明:本公众号文章只作为学术研究,不作为其他不法用途;如有侵权请联系作者删除。
立即加星标
每月看好文
目录
一、前言介绍
二、网站分析
三、参数分析
四、算法还原
五、思路总结
一、前言介绍
滑块验证码(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代码补环境及运行成功
本篇分享到这里就结束了,欢迎大家关注下期,我们不见不散☀️☀️😊
最近ChatGPT爆火,推荐一个干货满满的知识星球:
END
作者简介
我是TheWeiJun,有着执着的追求,信奉终身成长,不定义自己,热爱技术但不拘泥于技术,爱好分享,喜欢读书和乐于结交朋友,欢迎扫我微信与我交朋友💕
分享日常学习中关于爬虫及逆向分析的一些思路,文中若有错误的地方,欢迎大家多多交流指正💕
点个在看你最好看