博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
图像识别练习(flash图形验证码)
阅读量:2456 次
发布时间:2019-05-10

本文共 907 字,大约阅读时间需要 3 分钟。

© 野比 2012

由于破解可能给他人带来困扰,所以我只说大概的思路,不会提供源码。

-----------------

本次目标是www.iboling.com的flash验证码。

这个网站很新颖,用的是flash动画,随机给出大小球,然后让用户用鼠标点击相应的球,实现验证码输入。像这样

本来这是个很不错的思路,跳出了「干扰线」「扭曲字」等验证码的思维定势。但方式新颖并不代表能高枕无忧。

因为复杂度不够,所以反而容易破解。

有几个缺点:

1.颜色单一(很好识别)

2.下方候选球滚动缓慢(足够程序识别完再点击)

3.鼠标悬停(哪怕机器慢,只要控制鼠标悬停,就可以让候选球停止滚动)

4.不能加快速度或取消悬停(因为这样「人」就没法选了)

破解思路:

1.找到网页中验证码位置和大小(很容易)

2.截图采样(验证码图片和候选球图片)

3.分别从图像中提取全部色块及其对应的Rectangle(大约25x25),存入big和small

4.遍历对比候选球和验证码,颜色近似则可认为匹配

5.根据候选球的Rectangle,加上第2步里截图的offset,计算候选球在屏幕上的绝对位置

6.编程或用按键精灵在候选球上click一下

7.每次处理一个球,然后等等,给flash一个反应时间。

下面是破解样本(数字不准,因为有废弃识别被程序过滤掉了)

关于速度

速度的问题大家会很关心,但我可以说速度不是问题。

首先,因为候选区是鼠标悬停的。所以哪怕我机器再烂再慢,我可以先悬停,让它停止滚动,然后再慢慢「一百遍一百遍」。

其次,就算一直滚动,但因为要让人点击,所以不可能滚动太快。在我的i3机器上,没有优化的识别速度大约10fps,优化过后识别率提升到40~50fps,远远超过人的反应速度。也就说这个验证码只要人能点,机器就可以点。

改进意见

1.使用带图案,带纹理的小球

2.随机改变小球形状

3.验证码和候选球不需要完全一样,只需要人能看懂「相似」就行(比如验证码是数字「贰」,候选球是阿拉伯「2」),这样机器基本不太可能识别

4.增加背景复杂度,比如图片背景

暂时想到这么多,欢迎各位朋友

© 野比 2012

转载地址:http://cxdhb.baihongyu.com/

你可能感兴趣的文章
python入门测试教程_Python测试入门
查看>>
python概率编程_Python中的概率编程
查看>>
Python中的运算符和表达式
查看>>
读写csv文件python_用Python读写CSV文件
查看>>
python super_使用Python super()增强您的课程
查看>>
愚人节导入_愚人节Python恶作剧
查看>>
正则表达式科学计数法_数据科学家的正则表达式
查看>>
sql基础_SQL基础
查看>>
一个工作表可以有两个事件吗_你有两个工作
查看>>
Raul的新机器学习书!
查看>>
python制作可视化图表_可视化数据–用python覆盖图表
查看>>
双耳节拍 枕头_枕头3-0-0不在
查看>>
熊猫作弊表(通过yhat)
查看>>
将React Native升级到最新版本的最简单方法
查看>>
python 图像格式转换_如何用六行Python构建图像类型转换器
查看>>
url散列算法原理_如何列出与网站相关的所有URL
查看>>
如何在React Native中创建精美的动画加载器
查看>>
谷歌聊天机器人api_如何编写针对Google地图等网络应用量身定制的聊天机器人
查看>>
npm和angular_如何开发,使用和发布Angular库到NPM
查看>>
为什么要远离对日外包_远离魔法-或:为什么我不想再使用Laravel
查看>>