专栏首页python开发者[验证码识别技术]-初级的滑动式验证图片识别

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

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

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

相关文章

  • 安全防范:nginx下git引发的隐私泄露问题

    安全防范:nginx下git引发的隐私泄露问题 1   安全事件 最近阿里云服务器后台管理系统中收到一条安全提示消息,系统配置信息泄露: http://my.d...

    用户1170933
  • "用户增长"--快速身份认证实现用户增长的技术和产品方案

    "用户增长"--快速身份认证实现用户增长的技术和产品方案 1   引言 作为一个互联网产品,用户量的增长是一个非常重要的衡量指标。 这是一个集合了销售,市场,运...

    用户1170933
  • openwrt-智能路由器hack技术(2)---"网路信息监控和窃取"

    PS:之前写的一个文章,现在发现结构内容排版不是太好,导致阅读体验太差,影响传播和SEO,所以现在整理拆分一下,从小处写起,

    用户1170933
  • 解析:云服务市场狼烟遍地,谷歌拥有几分战力?

    镁客网
  • 用efibootmgr管理UEFI启动项

    工作需要安装了多系统(先后安装了Windows、Kali、CentOS),采用UEFI来引导操作系统。UEFI全称为:Unified Extensible Fi...

    技术训练营
  • AngularJS基础入门初探

      (2)由Misko Hevery 等人创建,2009年被Google所收购,用于其多款产品

    Edison Zhou
  • Centos中root密码重置的实现及步骤详解

    在虚拟机安装了Centos,今天要开机却忘记了密码,于是开始上网查找重新设置的方法,经过实验操作,确实有效,现将方法记录如下:

    砸漏
  • 机器学习入门 11-4 scikit-learn中的SVM

    本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍如何通过sklearn封装的SVM算法实现分类任务,并且设置不同的超参数C的值,通过绘图的方式直观...

    触摸壹缕阳光
  • 数据分析师会被算法取代么?

    今日头条丨一点资讯丨腾讯丨搜狐丨网易丨凤凰丨阿里UC大鱼丨新浪微博丨新浪看点丨百度百家丨博客中国丨趣头条丨腾讯云·云+社区

    数据猿
  • 面对极度复杂的前后端业务场景,使用 GraphQL 正确的姿势

    本次演讲主要介绍如何使用GraphQL,分别从前后端两个角度分析GraphQL的优劣势,对比Restful又能够给前后端协同开发带来哪些好处。

    IT大咖说

扫码关注云+社区

领取腾讯云代金券