极验验证码的破解-开篇

 近几年有个拖动解锁的验证码风头很盛,用过12306的人就知道,它有段时间用的就是这个拖动解锁的验证码,据说就是极验验证码,虽然现在12306的验证码变成了看图识画,安全性和趣味性大大提高,但是也还是被万能的大神破了。由此看来天下没有破不了的验证码,只要功夫深,防火墙也能磨成针。

    好了,今天我们来探讨一下极验验证码的破解,这也是我最近一段时间的研究成果。首先声明一下:本博客所讨论的内容仅限于技术研究,请勿用于商业用途,否则后果自负。

    我打算分成几个章节来讨论极验验证码所采用的技术,以及一些破解方案:

1、极验验证码的破解1-破解思路探讨



本篇我将给大家介绍一下这个极验验证码是什么鬼,要想破解它我们应该分成几个步骤。

    首先打开网址:http://user.geetest.com/login?url=http:%2F%2Faccount.geetest.com%2Freport。应该感谢极验给我们提供了一个测试平台,如下图所示:

我们需要知道的事情:

1、极验验证码是以api的方式集成到不同的网站上的,这个api是一个js文件,上图中的“1”处就是这个js文件,我们下载下来看看:

image

我们需要注意的是:

1、极验验证码是采用api的方式与别的网站集成的,api就是上图中“1”所指的js文件,我们可以看看这个文件:

复制代码
(function () {
    var e = function () {
        var t, n = document.body.getElementsByTagName("script"), r = 'http://api.geetest.com/get.php?gt=a40fd3b0d712165c5d13e6f747e948d4&random=1466910819494';
        for (var o = 0; o < n.length; o++) {
            if (n[o].src == r) {
                t = n[o];
                if (window.Geetest) {
                    new Geetest({
                        "gt": "a40fd3b0d712165c5d13e6f747e948d4",
                        "feedback": "http://www.geetest.com/contact#report",
                        "hide_delay": 800,
                        "product": "float",
                        "height": 116,
                        "logo": true,
                        "theme_version": "3.0.21",
                        "id": "a7adbcccc6366d5a96a94aac6b6ad7518",
                        "slice": "pictures/gt/7ed8940e0/slice/89ead30a.png",//小滑块的图片
                        "theme": "golden",
                        "version": "5.5.16",
                        "https": false,
                        "type": "slide",
                        "show_delay": 250,
                        "xpos": 0,
                        "bg": "pictures/gt/7ed8940e0/bg/89ead30a.jpg",//带洞的背景图
                        "fullbg": "pictures/gt/7ed8940e0/7ed8940e0.jpg",//完整的背景图
                        "fullpage": false,
                        "benchmark": false,
                        "ypos": 16,
                        "link": "",
                        "staticservers": ["static.geetest.com/", "dn-staticdown.qbox.me/"],
                        "mobile": false,
                        "challenge": "7adbcccc6366d5a96a94aac6b6ad751837",
                        "apiserver": "http://api.geetest.com/",
                        "clean": false
                    }, true).appendTo(t, true)
                } else {
                    setTimeout(e, 100)
                }
                break
            }
        }
    };
 ……
})();
复制代码

可以看到这个文件包含了极验验证码的所有参数,页面上的验证码控件只不过是根据这个api的结果加上html渲染出来的而已。

2、验证码控件有两个背景图(一张完整的和一张带洞的)和一个滑块图片,滑块的位置就由图片来指示。值得注意的是,极验验证码的两个背景图并不是一张完整的图片,极验的api给的图片都是混乱的,界面上显示的完整的背景图都是在原图上抠出52个小图片拼接而成的,如下所示:

image

image

3、如果想知道滑块的位置,我们只有通过对比两张背景图的像素差异来找的,值得庆幸的是,极验验证码只能水平拖动,所以我们只要找出滑块目标位置的left坐标即可。

4、拿到滑块的目标位置后,我们就要进行验证码破解。目前存在两种方式:一种是研究极验的api,然后收集参数构造post请求到极验的后台进行验证;另一种就是模拟人的操作来拖动鼠标到目标位置来解锁验证码。这两种方式各有利弊,第一种方式需要自己构造参数发送请求,严重依赖于极验的api,如果api稍有变更,那么此方法就会失效;第二种方式需要一个一个模拟浏览器来渲染页面,然后触发鼠标事件来达到目的,它的优点是比较稳定,不用考虑更多的技术细节,再牛逼的验证码总是要让人能通过的,我们模拟人的行为,它估计也没办法不让我们过,它的缺点是需要模拟浏览器来渲染,因此破解时间比较长。为了稳定性,我选择的是第二种方法,以phantomJs作为浏览器引擎,编写js脚本进行交互。

综上所述,我们要想破解这个验证码,我们可以分成几个任务来完成:

1、图片还原:找出两张背景图的原图,根据页面上给的参数生成两张完整的图片。

2、求解滑块位置:对比上一步生成的两张背景图,求解滑块目标位置的left坐标,此坐标便是滑块的目标位移(暂时这么理解,实际有点偏差,后面会讲到)

3、编写js脚本:编写控制整个流程并移动滑块进行验证的js脚本文件

4、模拟器加载页面并执行js脚本进行破解

好了,这一章讲到这里,下一章我将介绍如何实现图片还原和求解滑块位置。

仅此而已

本文介绍了一个基于Spring Boot、Spring Cloud和Vue前后端分离的项目实战。这个项目是一个简单的在线商城,包含了用户注册、登录、商品展示、购物车、订单管理等功能。通过这个项目,读者可以深入理解前后端分离的架构模式和互联网应用的开发方式。 首先,文章介绍了前后端分离的基本概念和优势。前后端分离是将应用的前端和后端代码分开来开发,使得前端和后端具有独立的开发周期和技术栈,进而提高了开发效率和代码质量。同时,前后端分离还可以提供更好的用户体验和灵活性,对于互联网应用来说尤为重要。 接下来,文章介绍了项目的架构和技术栈。项目采用了Spring Boot和Spring Cloud框架来实现后端代码,采用MyBatis作为ORM框架和Redis作为缓存中间件。同时,项目还采用了Vue.js作为前端框架和Element UI组件库来实现前端页面。通过这些开源框架和组件,可以快速搭建一个前后端分离的互联网应用。 然后,文章介绍了项目的核心功能和代码实现。在用户注册和登录方面,项目采用了Spring Security框架和JWT令牌来实现用户认证和授权,保证了用户信息的安全性。在商品展示和购物车方面,项目采用了Vue.js来实现前端页面和事件处理。在订单管理方面,项目采用了MyBatis Plus来实现订单数据的持久化和分页查询。 最后,文章介绍了项目的测试和优化。通过对项目的压力测试和性能测试,文章发现项目还存在一些性能瓶颈和安全隐患,可以通过优化数据库查询、缓存配置和代码实现来提高应用的性能和安全性。 总之,这篇文章介绍了一个基于Spring Boot、Spring Cloud和Vue前后端分离的项目实战,通过实现一个在线商城的功能,展示了前后端分离的开发模式和互联网应用的开发技术栈。本文可以作为前后端分离开发的入门教程,也可以作为互联网应用开发的参考文档。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值