如何用 js 模拟网页的滑动验证码?

2017-09-06 15:48:50 +08:00
 Vkin

这种滑块验证码,如何用 js 来模拟或者绕过?

http://ww3.sinaimg.cn/large/45aca4bbgw1f2gh4nl5lyj209701n3yd.jpg

这里之前有 V 友提问,不过好像没解决。

https://www.v2ex.com/t/267755

5896 次点击
所在节点    JavaScript
13 条回复
msputup
2017-09-06 15:59:01 +08:00
这里有行为判断的。
你在滑动的时候,会实时提交服务器进行判断,包括对你的环境等,如果判断你不是人或者不确定,会给你一个点击验证码的,淘宝这个有点难度了的,你可以先了解下极验,这个 v2 里有人破解过。
Vkin
2017-09-06 16:00:54 +08:00
@msputup 不是淘宝的,就是很普通的小网站的滑块,貌似没有提交服务器实时验证,只需要用 js 实现从左拖到右,然后释放
msputup
2017-09-06 16:07:30 +08:00
@Vkin JS 怎么拖动实现不清楚,如果 POST 提交的话,抓包,找到相关 JS 代码,直接生成相关数据就好了
zulwfryk
2017-09-06 16:08:53 +08:00
No fucking way.
Vkin
2017-09-06 16:19:28 +08:00
@msputup 我试试先
noe132
2017-09-06 16:32:42 +08:00
行为判断+1。
而且一般会有深度学习来进行分类。

但也不是无解,一般来说就是个鼠标轨迹,只要你能模拟出真实用户的鼠标轨迹就能过了
moult
2017-09-06 16:41:00 +08:00
这类验证码,只要能阅读一遍前端的逻辑,基本是很好破解的,其实最大的矛盾就是代码压缩混淆之后难以阅读。
做后端的都明白,前段发出的所有 http 请求都是不可信的。
举个例子,最基本的一个验证,就是看滑动的轨迹,鼠标滑的 Y 肯定会有少许上下浮动,但是机器滑的 Y 很固定。
cszhiyue
2017-09-06 16:56:37 +08:00
gan
mhycy
2017-09-06 17:07:04 +08:00
这类验证码我折腾过。

大致思路:
首先验证码的图片是乱序切片,切片还原成实际的位图需要逆向工程抽出部分逻辑
获得图片以后那么那个小滑块的分片也有了,依据特定体积灰度化后切片判断,即可判断 X 轴的具体坐标

以上事情 150 行以内 python

剩下就是难点,这类验证码看上去是一个 X 轴坐标的判断,而实际上正如楼上所说的,是鼠标轨迹的行为判断。
鼠标轨迹除了 XY 轴坐标以外,还有一个很重要的参数——时间
结合时间以后可以得知鼠标移动过程中的加速度,这也是判断是否为人类用户的基准之一。

可以试试生成一个拥有圆润加速度曲线的鼠标轨迹。。。

这事完了之后就剩下只需要应付数天一变化的轨迹加密算法了。。。
(这事怎么想都是模拟点击比较简单)
mchl
2017-09-06 17:16:12 +08:00
这种验证码应该会用到 Event.isTrusted,用 js 无法作弊
standbill
2017-09-06 17:24:35 +08:00
手机端滑动,有 touch 事件。电脑端有 mousedown mouseup。
getconputedStyle,可以获得计算属性。
q8164305
2017-09-06 19:34:26 +08:00
@moult 如果 js 可以实现滑动,那么实现来回滑动又有什么难度呢
flowfire
2017-09-07 00:20:27 +08:00
@mchl 我跳过 js 直接向后端 post 数据不就行了………

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/388647

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX