如何用 js 模拟网页的滑动验证码? - V2EX
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 6573 次点击
    这是一个创建于 2959 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    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     Solana     2915 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 14:26 PVG 22:26 LAX 07:26 JFK 10:26
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86