V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
Vkin
V2EX  ›  JavaScript

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

  •  
  •   Vkin · 2017-09-06 15:48:50 +08:00 · 5847 次点击
    这是一个创建于 2395 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    以上事情 150 行以内 python

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

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

    这事完了之后就剩下只需要应付数天一变化的轨迹加密算法了。。。
    (这事怎么想都是模拟点击比较简单)
    mchl
        10
    mchl  
       2017-09-06 17:16:12 +08:00   ❤️ 1
    这种验证码应该会用到 Event.isTrusted,用 js 无法作弊
    standbill
        11
    standbill  
       2017-09-06 17:24:35 +08:00   ❤️ 1
    手机端滑动,有 touch 事件。电脑端有 mousedown mouseup。
    getconputedStyle,可以获得计算属性。
    q8164305
        12
    q8164305  
       2017-09-06 19:34:26 +08:00   ❤️ 1
    @moult 如果 js 可以实现滑动,那么实现来回滑动又有什么难度呢
    flowfire
        13
    flowfire  
       2017-09-07 00:20:27 +08:00 via Android
    @mchl 我跳过 js 直接向后端 post 数据不就行了………
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5581 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 01:40 · PVG 09:40 · LAX 18:40 · JFK 21:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.