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


Posted in Python onNovember 09, 2017

1 abstract

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

2 内容概述

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

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

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

3 研究对象

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

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

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

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

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

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

4 定性分析

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

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

发现如下特点:

和前端展示相关的图片有:方块位置提示图A,小方块B,完整背景图C。

A图完全是由B和C合成

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

对图片没做任何的特殊处理

对外公开提供了过多信息

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

5 定量分析

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

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

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

图片整体规格:w:240,h:450

由上到下分为三部分,每部分高度为150

6 求解图片

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

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

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

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

得到如下的统计图:

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

然后对这个曲线求一阶导数或者只要发现有个突变值超过最大像素值的某百分比时,即可得到最左边的那个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

总结

以上所述是小编给大家介绍的Python实现图片滑动式验证识别方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
Pyramid Mako模板引入helper对象的步骤方法
Nov 27 Python
pymssql数据库操作MSSQL2005实例分析
May 25 Python
Python中工作日类库Busines Holiday的介绍与使用
Jul 06 Python
python 筛选数据集中列中value长度大于20的数据集方法
Jun 14 Python
使用Python处理BAM的方法
Sep 28 Python
Python----数据预处理代码实例
Mar 20 Python
Python3.5 Pandas模块之DataFrame用法实例分析
Apr 23 Python
用Python+OpenCV对比图像质量的几种方法
Jul 15 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
将数据集制作成VOC数据集格式的实例
Feb 17 Python
python GUI库图形界面开发之PyQt5多行文本框控件QTextEdit详细使用方法实例
Feb 28 Python
浅谈python3 构造函数和析构函数
Mar 12 Python
浅谈python中的占位符
Nov 09 #Python
速记Python布尔值
Nov 09 #Python
浅谈python jieba分词模块的基本用法
Nov 09 #Python
基于python中pygame模块的Linux下安装过程(详解)
Nov 09 #Python
python中Switch/Case实现的示例代码
Nov 09 #Python
在Python web中实现验证码图片代码分享
Nov 09 #Python
Python模糊查询本地文件夹去除文件后缀的实例(7行代码)
Nov 09 #Python
You might like
php更新修改excel中的内容实例代码
2014/02/26 PHP
PHP二维数组实现去除重复项的方法【保留各个键值】
2017/12/21 PHP
JS trim去空格的最佳实践
2011/10/30 Javascript
JavaScript中使用Substring删除字符串最后一个字符
2013/11/03 Javascript
javascript实现左右控制无缝滚动
2014/12/31 Javascript
javascript处理a标签超链接默认事件的方法
2015/06/29 Javascript
jQuery ui实现动感的圆角渐变网站导航菜单效果代码
2015/08/26 Javascript
JavaScript实现搜索框的自动完成功能(一)
2016/02/25 Javascript
jQuery 监控键盘一段时间没输入
2016/04/22 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
2016/04/27 Javascript
jQuery如何跳转到另一个网页 就这么简单
2016/12/28 Javascript
jQuery常见面试题之DOM操作详析
2017/07/05 jQuery
JQuery 选择器、DOM节点操作练习实例
2017/09/28 jQuery
Express进阶之log4js实用入门指南
2018/02/10 Javascript
vue.js父子组件通信动态绑定的实例
2018/09/28 Javascript
怎样在vue项目下添加ESLint的方法
2019/05/16 Javascript
node.js中process进程的概念和child_process子进程模块的使用方法示例
2020/02/11 Javascript
[33:33]完美世界DOTA2联赛PWL S2 FTD.C vs SZ 第二场 11.27
2020/11/30 DOTA
python turtle库画一个方格和圆实例
2019/06/27 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
python+opencv实现车道线检测
2021/02/19 Python
澳大利亚UGG工厂直销:Australian Ugg Boots
2017/10/14 全球购物
Skyscanner英国:苏格兰的全球三大领先航班搜索服务之一
2017/11/09 全球购物
澳大利亚家用电器在线商店:Billy Guyatts
2020/05/05 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
考试违纪检讨书
2014/02/02 职场文书
玲玲的画教学反思
2014/02/04 职场文书
美术国培研修感言
2014/02/12 职场文书
小学运动会班级口号
2014/06/09 职场文书
2014副镇长民主生活会个人对照检查材料思想汇报
2014/09/30 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
信用卡收入证明范本
2015/06/12 职场文书
在酒桌上的敬酒词
2015/08/12 职场文书
严以用权学习心得体会
2016/01/12 职场文书
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
css3新特性的应用示例分析
2022/03/16 HTML / CSS