[验证码识别技术]-初级的滑动式验证图片识别

初级的滑动式验证图片识别方案

1 abstract

验证码作为一种自然人的机器人的判别工具,被广泛的用于各种防止程序做自动化的场景中。传统的字符型验证安全性已经名存实亡的情况下,各种新型的验证码如雨后春笋般涌现。目前最常见的一种形式就是“滑动拼图式”

关键字:验证码,图灵测试,图像识别,python,破解

2 内容概述

关于滑动式验证,最早由国内某网络安全公司首次提出的行为式验证,以滑动拼图解锁的方式呈现在世人面前。然后大概过了好几年之后,各种各样的滑动式验证产品都出来了,那么这些看似一样的产品,它们的安全性到底如何呢?

本文特意挑选出了一些后来者的小厂商的滑动式验证来做下实验,仅从第一步的图像学上分析一下安全性。因为我的主技术路线是图像学,关于前端的js并不熟悉,所以就只在图像学上点到即止即可。仅供会一些自动化技术的同学提供一些知识补充吧。

由于研究的实验对象实在是太简单,所以本文涉及的一些图像学的知识也不难,基本上python的初级选手就可以跑通本程序。仅供大家学习学习。

3 研究对象

某小站点上由小厂商提供的“滑动式验证”:

使用python写一个简单的爬虫自动化脚本,将此网站上的验证码资源多请求几次,并保存到本地,观查图片特点。

一般情况下,这一步是必须的,多下载一些图片,很多规律是可以一眼看出的。比如,从公开的页面中,连续请求此验证的资源 100次,下载100张图片后。

一眼看上去,此验证的图片素材都只有一种模式,那么就放心了,因为这个问题就比较单一,而不是多模式下你必须要解决多个问题。

4 定性分析

将这种单一模式的图片筛选一张出来,如下:

发现如下特点:

  1. 和前端展示相关的图片有:方块位置提示图A,小方块B,完整背景图C。
  2. A图完全是由B和C合成

显然,设计这个验证图片的人没啥安全方面的经验,有如下两个产品细节没有注意:

  1. 对图片没做任何的特殊处理
  2. 对外公开提供了过多信息

于是使得识别此图片的位置变得极其简单

5 定量分析

在前面一小节中,我们只是直观的看到了这些图片的一些特别,但是要解答这个题目,还需要进行量化,量化后才能程序化,程序化后才能全自动化。

使用matplotlib工具打开此图片。量化得到如下参数:

  1. 图片整体规格:w:240,h:450
  2. 由上到下分为三部分,每部分高度为150

6 求解图片

很明显,只要将第一张图和第三张图相应的像素相减,神奇的事情就发生了:

“左上” 减去 “右下” 就得到 “左下”的结果。

这个时候,对x方向的R通道的像素点进行累加统计。

得到如下的统计图:

然后对这个曲线求一阶导数或者只要发现有个突变值超过最大像素值的某百分比时,即可得到最左边的那个y方向突变点的位置。

到此为止,此图片的位置已经成功解出。

下面是相应的python代码:

import numpy as np
def get_boundary(mask, axis, ratio=0.6):
   """
   对灰度图的某个channel做像素统计
   """
   sum_along_axis = np.sum(mask, axis=axis)
   max_value = np.max(sum_along_axis)
   bound_value = max_value * ratio
   bvalue = (sum_along_axis >= bound_value).astype('int8')
   return np.where(bvalue != 0)[0][0]

def get_predict_ans(img):
   """
   根据分类出来的图像,找到相应的图像位置
   传入二进制的图片,返回答案
   :param img:
   :return:
   """
   nd_img = np.array(img)
   w_pos = get_boundary(nd_img, 0)  # 根据分布图找到边界位置
   return w_pos

7 最后总结

由于我不会前端技术,所以我的工作就到此为止。

但是后来有位会前端的网友研究了一下那个网站的验证码前端代码,据说其防护措施也只有图片这一层,只需要把答案放到http的接口里面上传,再加个时间标记就能稳稳的过了。然后借鉴本文解图片答案的思路,基本上可以达到:1s通过60次,成功率大概70%吧

对滑动式验证有兴趣的同学,如果你们想练手的,可以多去找一些新入场这个领域的厂商试试,基本上新入场的团队的都会犯一些非常低级的错误,但是请只是技术上在本地自己机器上跑跑试试,安全领域有风险,请自爱

同时告诫一些自己想现在开始做滑动式验证码的厂商,如果投入不够还有相应的技术和产品积累不够,进入这个领域的时候,请慎重,因为你的不成熟的工作只会成为本系统最大的漏洞。

8 扩展阅读

可能有很多读者会觉得本文的内容不够干,希望来点更刺激有趣的,请稳步下面的合辑文章,满足你的好奇心。

《验证码识别技术-文章合辑》https://zhuanlan.zhihu.com/p/30871712

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏北京马哥教育

Python实现图片滑动式验证识别

本文分享自 Linux 视野。滑动式验证码现在使用越来越广泛了,关于怎么攻克的文章之前看到的不多,这篇提供了一个思路。 作者:fantlam 来源:htt...

4285
来自专栏灯塔大数据

学神之路 —— Python数据科学全攻略

Python菜鸟到Python Kaggler 如果你梦想成为一名数据科学家,或者已然是数据科学家的你想扩展自己的工具库,那么,你找对地方啦。本文旨在为做数据分...

2967
来自专栏AI科技大本营的专栏

资源 | 10x Python开发者必读:本月Python文章TOP 10

翻译 | AI科技大本营 参与 | 刘畅 编辑 | Donna 【AI科技大本营导语】Medium热门博客Mybridge AI例行评出本月10篇有助于提升你职...

35815
来自专栏量子位

如何用Python从海量文本抽取主题?

作者:王树义 量子位 已获授权编辑发布 你在工作、学习中是否曾因信息过载叫苦不迭?有一种方法能够替你读海量文章,并将不同的主题和对应的关键词抽取出来,让你谈笑间...

5107
来自专栏AI科技大本营的专栏

整合PyTorch 0.4和Caffe 2,PyTorch 1.0能挑战TensorFlow吗?

【AI 科技大本营导读】5月2日,在加利福尼亚州举办的年度开发者 F8 大会上,Facebook 正式推出 PyTorch 1.0 。其实,早在 2017 年 ...

1703
来自专栏WOLFRAM

全新推出 SystemModeler 5:集符号式参数模拟、模块化可重构性和200个全新内置部件于一体

1705
来自专栏星流全栈

【两分钟论文#161】AI创建用户界面,前端将失业?神器pix2code!

1714
来自专栏目标检测和深度学习

SCI论文快速翻译,免费无限制!OCR识别,阅读文献必备!

科研人员在阅读外文文献时,经常会碰到看不懂的专业词汇或语句,需要将其复制到在线词典翻译。

2862
来自专栏新智元

【腾讯优图首度开源深度学习框架ncnn】主打手机端,同类cpu框架最快

【新智元导读】 腾讯 AI 三大支柱之一的腾讯优图实验室公布了成立以来的第一个开源项目ncnn,这是一个为手机端极致优化的高性能神经网络前向计算框架,无第三方依...

7179
来自专栏AI研习社

呵,我复现一篇深度强化学习论文容易吗

去年,OpenAI和DeepMind联手做了当时最酷的实验,不用经典的奖励信号来训练智能体,而是根据人类反馈进行强化学习的新方法。有篇博客专门讲了这个实验 Le...

1452

扫码关注云+社区