专栏首页FreeBuf中文点选验证码之自动识别

中文点选验证码之自动识别

某次测试中遇到了汉字点选的验证码,看着很简单,尝试了一下发现有两种简单的识别方法,终于有空给重新整理一下,分享出来。

0x01 验证码的获取

首先获取验证码。由于网站比较特殊,就不以他们的为例,自己生成验证码吧。这个不是重点,这里直接贴代码了。

运行后生成这样两张图片。

ap_XXXXX.png

mp_XXXXX.png

ap_XXXXX.png是说明需要点击的文字,mp_XXXXX.png是需要点击的图片。

0x02 验证码识别

对于这种简单的点选验证码,可以有两种很容易的识别方式(机器学习算麻烦的,这里就不列出了。嗯,对,我也不会)。一种是opencv的图像模板匹配,另外一种是OCR识别。

1. opencv的图像模板匹配

第一种方式,使用opencv的图像模板匹配。模板匹配是一种在较大图像中搜索和查找模板图像位置的方法,opencv2和opencv3中提供了一个专门用于模板匹配的函数matchTemplate()。它是在输入图像上滑动模板图像(如在2D卷积中),并比较模板图像下的输入图像的模板和补丁。在OpenCV中实现了六种比较方法(这里用到的是cv2.TM_CCOEFF_NORMED),它返回一个灰度图像,其中每个像素表示该像素的邻域与模板匹配的程度。

获得结果后,可以使用cv.minMaxLoc()函数查找最大/最小值的位置。将其作为矩形的左上角,并将(w,h)作为矩形的宽度和高度,那个矩形就是模板区域。

我们进行使用模板匹配来识别这种验证码时,首先先将“模板”找出来,这里我们需要匹配的是“猎”、“户”、“室”这三个字。将这三个字所在的图片进行截取,然后使用matchTemplate()函数在mp中进行匹配。

首先截取第一个字“猎”。

截取之后,就可以在mp中进行匹配。

这里得到了最大和最小位置。我们使用最大位置,然后将最大值作为阈值。获取模板的尺寸,然后在 mp 中用矩形(红色区域)画出匹配的区域。如下所示。

同理,用黄色和蓝色矩形将“户”、“室”所在的区域画出来。

点选时发送所选区域中间的坐标即可,这里就不再给出实例了。这种方法虽然简单,但是对于字体不一的就不能很正确的标记出来。

修改生成图片的代码,将mp中的文字的字体设置为随机。修改的代码如下:

ap生成的结果还是和之前一样, mp 的图片如下:

使用同样的代码来匹配。

此时匹配的结果就有些惨不忍睹了。所以就换另外一种识别方式-ocr 识别。

2.OCR识别

这里采用的是腾讯云的OCR-通用印刷体识别(https://cloud.tencent.com/document/product/866/17600)。

参考文档。输入mp图片,返回的是json。

查看json内容,发现包含了图片中的文字、位置和大小等。

同理ap中内容也可以获取。

此时匹配的时候直接就是匹配文字了。首先获取ap中后三个文字,然后与mp中返回的内容匹配,获取其位置和大小,然后再画矩形即可。

由于比较简单,这里直接贴结果。

匹配相当完美。

0X03 总结

本文用了两种方法来自动识别汉字点选验证码,第一种采用的是opencv的模板匹配,这种方法虽然也可以匹配到,但这种方法缺点就是对于字体形状差异较大的验证码识别率较低。而第二种方法就比较快捷方便了,而且识别度高,比较推荐第二种方法。

当然这两种方法对于简单、“正规”的验证码可以,遇到复杂的、“扭曲的”验证码就不行了。这时候就要用到机器学习了,而本文只是简单的“识别”,将机器学习用到这里,就有些大材小用了。

相关代码:

https://github.com/fupinglee/MyPython/tree/master/captcha/Pointselection

0x04 参考

[1]http://bluewhale.cc/2017-09-22/use-python-opencv-for-image-template-matching-match-template.html [2]https://cloud.tencent.com/document/product/866/17600

*本文作者:江南天安猎户攻防实验室,转载请注明来自FreeBuf.COM

本文分享自微信公众号 - FreeBuf(freebuf)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-09-12

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 电脑、手机都断网了,还会被黑客入侵吗?

    无论是电脑、智能手机、或者是其他的可联网设备,只要连了网络,就意味着已经暴露在安全威胁之中了。尤其是最近几年,间谍技术和各类间谍工具发展迅速,导致黑客组织、情报...

    FB客服
  • 浅谈情报信息收集方式

    情报收集是情报机构获取可靠、高价值信息资源的一种重要方式。本文介绍情报信息收集的主要分类,重点介绍国外情报机构常用的第四方收集是什么及其细节描述。 据卡巴斯基资...

    FB客服
  • WPA2 安全协议惊现高危漏洞,几乎涉及所有 WiFi 设备(附固件升级列表)

    近日,鲁汶大学的研究人员 Mathy Vanhoef 在 WPA2 协议中发现了严重的安全漏洞,这对无线网络的安全造成了极大的考验。本文简要介绍了此次攻击的技术...

    FB客服
  • 前端基础-正则语法(元字符)

    限定符(量词)用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

    cwl_java
  • React创建build生产构建,使用Nginx服务器部署及报500错误的解决方法

    今天尝试使用 Nginx 服务器跑 React build 生产构建,结果报错“500 Internal Server Error”。查了些资料,最后解决了,顺...

    德顺
  • R语言入门之偏度(skewness)与峰度(kurtosis)

    偏度(skewness),是统计数据分布偏斜方向和程度的度量,是统计数据分布非对称程度的数字特征。在定义上,偏度是样本的三阶标准化矩:

    生信与临床
  • Nginx学习之location匹配规则

    介绍 location指令是http模块当中最核心的一项配置,根据预先定义的URL匹配规则来接收用户发送的请求,根据匹配结果,将请求转发到后台服务器、非法的请求...

    小柒2012
  • EMNLP2019 | 领域自适应的人岗匹配研究

    求职招聘市场长期存在着职位类别分布不均衡、新兴职类不断涌现的现象,这一定程度上会造成某些职类下的训练数据不够充分,从而难以获得较好的人岗匹配模型,影响推荐匹配效...

    AI科技评论
  • 谁说中国出不了Echo?那是因为DuerOS开放平台还没发布

    “Echo这么火,为什么迄今为止却没有中国版的Echo?”这是许多互联网行业人士和媒体同仁们爱讨论的问题,得出的原因有很多。今天百度AI开发者大会上推出的“Du...

    罗超频道
  • 最好奇的Top5连问:你是怎么踏入深度学习大门的?

    今天是一年一度的11.11 突然觉得抢不到最心水的便宜货了 还有发现自己的solo魔咒也打不破了 放弃治疗,保持围笑 也许还是有up自己英文段位 和技术大拿一起...

    AI研习社

扫码关注云+社区

领取腾讯云代金券