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

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

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 条评论
登录 后参与评论

相关文章

来自专栏数据猿

【每周一本书】之《Microsoft Power BI 数据可视化与数据分析》

【数据猿导读】随着大数据研究热潮的兴起,各种数据可视化图表层出不穷,大数据生动呈现就成为了具有挑战性的工作,随之出现了大量的可视化软件 编辑 | abby 官网...

37711
来自专栏WOLFRAM

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

1885
来自专栏星流全栈

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

1824
来自专栏机器之心

从Pipenv到PyTorch,盘点2017年最受欢迎的十大机器学习Python库

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

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

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

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

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

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

37515
来自专栏新智元

【通用人工智能的新宇宙】OpenAI 重磅发布AGI测试训练平台Universe

【新智元导读】OpenAI 昨天发布 OpenAI Universe, 根据其官方博客的介绍,这是一个能在几乎所有环境中衡量和训练 AI 通用智能水平的开源平台...

3907
来自专栏PPV课数据科学社区

数据仓库术语一览

数据仓库:数据仓库是一个支持管理决策的数据集合。数据是面向主题的、集成的、不易丢失的并且是时间变量。数据仓库是所有操作环境和外部数据源的快照集合。它并不需要非常...

4437
来自专栏北京马哥教育

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

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

4985
来自专栏灯塔大数据

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

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

3077

扫码关注云+社区

领取腾讯云代金券