APP下载

基于Python3 的极验验证码识别的研究

2019-10-31冯军军王海沛陈新华

电脑知识与技术 2019年22期
关键词:模拟识别

冯军军 王海沛 陈新华

摘要:随着网络的发展,验证码(CAPTCHA)在解决web安全问题中,具有重要作用。极验验证码是当前常见的一种验证码,本文针对极验验证码的本质特性、生成机制级运行原理等方面的问题进行深入研究,发掘其存在的漏洞。利用python编程语言,通过网页分析,图像识别,模拟拖动,实现模拟登陆。通过该研究,给大家提出一直模拟登陆极验验证码的方法。

关键词:python3;极验验证;识别;模拟

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2019)22-0037-03

开放科学(资源服务)标识码(OSID):

Research on Geetest Recognition Based on Python3

FENG Jun-jun, WANG Hai-pei,CHEN Xin-hua

(Sichuan Information Technology College, Guanyuan 628017, China)

Absrtact: With the development of the network, Completely Automated Public Turing test to tell Computers and Humans Apart(CAPTCHA),plays an important role in solving the problem of web security. Geetest is one of CAPTCHA, and focusing on the problem of essential characteristics,operational mechanism and generative mechanism of Geetest,the Geetest system was explored out existing a bypass vulnerability. Through web page analysis, image recognition, simulation drag, we use python programming language to achieve simulation landing. From this researching, we propose a method of identifying the Geetest.

Key words: Python3; Geetest; recognition

随着网络的发展,当前的网站上出来大量的问题,例如恶意破解密码,利用工具刷火车票,在贴吧论坛灌水,暴力破解特定程序等事件[1]。验证码机制是解决上述问题的一种方法。验证码(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试)的缩写,是一种区分用户是计算机还是人的公共全自动程序[2-3]。虽然验证码给我们带来了信息安全的提升,但是对于从事计算机方面的信息采集工作者来说带来了巨大的挑战[4]。

验证码识别是网络攻击者和防卫者的一场博弈,同时也是如今大数据时代并不可绕过的一座围墙,识别技术的发展,一方面促使网站建设者发展更有意义的防护手段,另一方面意味着机器学习水平的发展又上新台阶[5]。验证码是一种辅助解决web安全的方法,然而,如果验证码处存在着不安全,或者说可以绕过验证码,从手动输入变成自动化处理,那么这种辅助解决web安全的方法,也会造成web的不安全。道高一尺魔高一丈,验证码就像计算机安全中的攻与防,生活中的矛与盾,有验证码的产生,就有其破解[6]。

本文对极验验证码[7]设计思路和实现原理进行分析,提出基于python3和selenium、PIL、requests等模块的验证码识别的方法,给大家提供一直极验验证码识别的方法[8]。

1 极验验证码概述

近几年,驗证码技术日新月异。web验证码,有数字识别、字母识别、图像识别、图片拖动等,各有千秋。比如说,12306购票网站的图片识别的验证码,实现太复杂,成本高,识别率低,不可大力推广。淘宝随后推出滑动式验证码,滑动验证码,根据提示把鼠标拖动到指定位置而实现验证。由于人工智能的发展,滑动式验证码很容易被模拟识别。淘宝随后推出极验验证码。

极验验证码,通过简单的集成方式首先产生一个拼图,然后通过分析用户完成拼图验证的过程的行为特征,判断区分人和机器。与滑动验证码相比,在识别中,被模拟的难度提高。与图像识别的验证码项目,在识别中,用户不必面对复杂的汉字和数字英文字符,相对简单。同样,极验验证码,采用拼图的方法,使整个验证过程有趣简单,极易吸引大众。

1.1 极验验证码工作原理

极验验证码的工作原理:验证码程序是在web开发中,是一个专门负责产生和评估验证码校验的程序。该程序通常部署在服务器端。例如,用户注册时遇到的验证码,在注册时候,服务器端生成验证码,生成后发送到客户端的用户。验证码在用户客户端显示,用户根据验证码的图形,拖动验证码,然后提交数据信息。提交后,服务器端进行校验,如果校验成功就返回注册成功,否则返回注册失败[9]。同样,在验证码的产生和评估的程序,也有客户端,通过js布置的,但是其设计原理上不安全,可以通过禁用js或者修改数据包来进行干扰。从而,当前大部分验证码程序还是部署在服务器端。

1.2 极验验证码设计原则

验证码使用的目的是,正确区分是否是人的操作。在验证码的设计中,既要求其防止被破解能力强,不能轻易地被计算机程序自动识别,同时又要要求容易被人类使用,操作方便。不仅要识别容易,并且要识别时间短,比如说12306网站的验证码,一直遭受到批判。为了保证验证码的识别,不影响用户使用,又要满足网络需求,在验证码设计中,一般要遵循以下原则[4]:

1)计算机程序能够方便、快速、自动产生验证码,并校验验证码。

2)用户能够理解验证码,并且能够快速通过测试。也就是说,生成的验证码,用户可以简单、方便的理解并完成测试。

3)驗证码测试能够自动抵御计算机程序的识别,特别是随着机器学习的发展,在设计验证码时候,要求用户测试的通过率高于90%,而计算机的通过率低于0.001%。

4)验证码的库要足够大,以保证测试能够抵抗机器学习的攻击。

5)此外,在设计验证码的时候,还要考虑语言、自然环境、计算机软硬件环境等方面的差异。

2 实验与结果分析

在极验滑动验证码识别过程中,首先要分析网页情况,根据网页信息,找到滑块滑动前和滑动后的源代码的变化;然后获取验证码的图片,通过图片处理定位缺口,实现识别;最后模拟滑动,成功识别[10]。

2.1 网页分析

在极验验证码识别中,首先要开带有极验验证码页,通过F12,获得以下信息:验证码图片宽度,滑块宽度,轨迹长度理论上阴影可以出现的范围,最小的开始距离,最大的距离等信息。

第一步,打开测试目标,并且通过源码了解滑块按钮与源码内容的关系情况。

第二步,填写表单信息(比如说注册时候的表格信息),判断源代码的变化,定位表单信息的源代码。

第三步,拖动滑块,判断源代码的变化,定位滑块的源代码。

第四步,对验证码的图片进行处理,获取极验滑动验证码的完整图片与缺口图片,并存储,如图1所示,验证码的完整图片,图2验证码的缺口图片。

2.2 图像处理

由于计算机肯定不能直接识别图片,我们需要对获取的图片进行处理。首先使用size() 方法,获取需要处理的图像的宽度与高度,以便用于遍历像素点比对。两张图片有两处明显不同的地方:一个待拼合的滑块,一个是缺口。滑块的位置出现左侧,缺口与滑块出现在同一水平位置。由图3可见,滑块大小约为图像宽度的1/5,因此起始横坐标设为60,从滑块的右侧开始识别。

通过image的方法load()返回一个用于读取和修改像素的像素访问对象,以此方法进行图像像素遍历,且设定图像的阈值,经测试阈值为60左右较为合适,设定阈值为60。经过试验,获取到缺口横坐标位置,为144。

2.3 模拟滑动

如果直接把计算的144这个缺口位置放在代码中,当我们执行时,即使移动的位置是争取的,但是还是验证不通过,如图4所示,缺口吻合,但是验证不通过。

在极验验证码识别中,服务器端会识别出这个动作是不是人的行为。人类在拖动时候,肯定不会匀速,准确的拖动到缺口位置,一定存在先快后慢的拖动轨迹。拖动轨迹的代码设计中,假设前段滑块做匀加速运动,后段做匀减速运动,滑块滑动的加速度用a来表示,当前速度用v表示,初速度用v0表示,位移用x表示,所需时间为t表示,满足如下关系式:

X = v0 * t + 0.5 * a * t * t

V = v0 + a * t

核心代码如下:

button1=wait.until(EC.element_to_be_clickable(By.CSS_SELECTOR))

ActionChains(brower).click_and_hold(button1).perform()

for x in get_track():

ActionChains(brower).move_by_offset(x,0).perform()#向左移动

time.sleep(0.5)

ActionChains(brower).release().perform()

成功验证如图5所示:

3 总结

验证码与验证码识别是个长久的问题,两者的不断发展不断较量,代表着计算机技术水平的不断成长,同时也在警惕我们信息社会的不安全因素较多,需要提高安全意识。在极验验证码识别中,最后的模拟登陆,如果登陆此说过多,登陆的思路也会被机器学习到,需要重新设置轨迹。总之,验证码与其识别,道高一尺魔高一丈,相互促进其发展。

参考文献:

[1] 吕霁.基于神经网络的验证码识别技术研究[D].华侨大学,2015:1-67.

[2] Carnegie MeHon University. The official CAPTCHA site [EB/OL].[2015-03-1]. http://captcha.net.

[3] Zhang Jiayao.CAPTCHA recognition using machine learning[EB/OL].[2016-01-06].http://hdl.handle.net/ 2031/8227.

[4] 胡健,柳青,王海林.验证码安全与验证码绕过技术[J].计算机应用,2016,36(S1):37-41,57.

[5] 刘欢,邵蔚元,郭跃飞.卷积神经网络在验证码识别上的应用与研究[J].计算机工程与应用,2016, 52(18):1-7.

[6] 汪洋,许映秋,彭艳兵.基于KNN技术的校内网验证码识别[J].计算机与现代化,2017,(2):93-97.

[7] 张铮,王顺帆,董雷.基于深度学习的验证码识别[J].湖北工业大学学报,2018(2).5-8,25.

[8] 基于Python语言和支持向量机的字符验证码识别[J].数字技术与应用,2017,(4):72-74.

[9] 魏冬梅,何忠秀,唐建梅.基于Python的Web信息获取方法研究[J].软件导刊,2018(1):41-43.

[10] 蔺佳哲,王茜,谢楠.基于WEB开发技术的新型验证码的设计研究[J].石家庄学院学报, 2016, 18(3):38-41.

【通联编辑:唐一东】

猜你喜欢

模拟识别
让学引思:让学生做主
法学意义上的弱者识别问题研究
青岛市中山公园园林树木易混淆品种识别