目录
1. 验证码原理
2. 常见验证码识别
2.1 图片验证码
2.2 滑动验证码
2.3 点触验证码
3. 实战
1. 验证码原理
验证码(CAPTCHA),“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自动区分计算机和人类的图灵测试),是一种区分用户是计算机还是人的公共全自动程序。
验证码被广泛用于用户登录以及注册的校验。主要原因是生成的验证码每次都不同,这就可以排除用其他病毒或者软件自动申请用户及自动登陆,从而防止别人进行恶意攻击。而且如果频繁发送验证码,系统会提示一段时间后再发送验证码,也可以减少恶意攻击。
2. 常见验证码识别
图片验证码活动验证码点触验证码宫格验证码2.1 图片验证码
图片验证码:由字符组合而成的图片,通常会加上干扰。
OCR技术
OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)检查纸上打印的字符,通过检测暗、亮的模式确定其形状,然后用字符识别方法将形状翻译成计算机文字的过程。针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式的技术。
OCR实例
pytesseract库 --- 识别图片
pytesseract.image_to_string(image)
import pytesseractfrom PIL import Imageimg = Image.open('checkcode.jpg')pytesseract.image_to_string(img)
可以自行下载一张验证码图像进行测试,不过pytesseract库的识别能力有限。仅作为了解即可,之后我们会使用超级鹰进行识别。
图像预处理
1.灰度化:将彩色图像转为灰度图像。
2.二值化:将灰度图像转为黑白图像。
灰度化:
将图像转为灰度图像,即一个像素只有一种色阶(单通道,有256种不同灰度),值为0表示像素最黑,值为255表示像素最白。
image.convert("L")
convert():用于不同模式图像之间的转换。
PIL中有九种不同模式,分别为1,L,P,RGB,RGBA,CMYK,YCbCr,I,F。
1)模式“1”:二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。
2)模式“L”:灰色图像,它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。
3)模式“P”:8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。
4)模式“RGB”:24位彩色图像,红、绿、蓝三个通道。
二值化:
将图像转为黑白图像,即一个像素只有黑白两种状态,没有灰色,0代表黑,1代表白。
image.convert(“1”):默认阈值是127,将灰度值在127以上的设置1(白色),其它设为0(黑色)。
自定义灰度阈值:
threshold = 135 #可调节大小127->135table = []for i in range(256):if i < threshold:table.append(0) # blackelse:table.append(1) # whiteimage = image.point(table, '1')
深度学习
深度学习(DeepLearning,DL)属于机器学习的子类,是利用深度神经网络来解决特征表达的一种学习过程。深度神经网络本身并非是一个全新的概念,可理解为包含多个隐含层的神经网络结构。为了提高深层神经网络的训练效果,人们对神经元的连接方法以及激活函数等方面做出了调整。其目的在于建立、模拟人脑进行分析学习的神经网络,模仿人脑的机制来解释数据,如文本、图像、声音。
深度学习主要应用于文字识别、人脸技术、语义分析、智能监控等领域。
2.2 滑动验证码
滑动图形验证码,主要由两个图片组成:抠块和带有抠块阴影的原图。
这里有两个重要特性保证被暴力破解的难度:
(1)抠块的形状随机
(2)抠块所在原图的位置随机
这样就可以在有限的图集中制造出随机的、无规律可寻的抠图和原图的配对。
生成滑动验证码
(1)后端随机生成抠图和带有抠图阴影的背景图片,后台保存随机抠图位置坐标;
(2)前端实现滑动交互,将抠图拼在抠图阴影之上,获取到用户滑动距离值;
(3)前端将用户滑动距离值传入后端,后端校验误差是否在容许范围内。
利用selenium来解决滑动验证码
(1)获取没有缺口的图片
(2)获取带缺口的图片
(3)对比两张图片的所有RBG像素点,得到不一样像素点的x值(即要移动的距离)
(4)模拟人的行为习惯(先匀加速拖动后匀减速拖动),把需要拖动的总距离分成一段一段小的轨迹
(5)按照轨迹拖动,完成验证
2.3 点触验证码
点触验证码最初是由杭州微触科技有限公司研发的互联网验证码,使用点击或者拖动的形式完成验证。采用专利的印刷算法以及加密算法,保证每次请求到的验证图具有极高的安全性。
1、点击区域可出现在指定区域内的任何位置,依次按提示点击即可完成验证。点击区域可以是图片和文字。
2、不同图标会随机出现在图标框内,按照提示点击单个或多个图标,即可完成验证。
难点
(1)文字识别—上图中的刘翔,该文字是变形处理之后的,OCR不易识别。
(2)图片识别—需要大量图片的标记数据,且图片清晰度不高,机器识别率非常低。
解决方法
使用验证码识别服务平台。超级鹰
识别类型:
3. 实战
破解滑动验证码使用selenium模拟登录bilibili网站。
完整项目
破解点触验证码
使用selenium模拟登录简书网站。
完整项目
图片验证码识别
使用selenium登录新浪微博。
完整项目