图像识别练习(flash验证码)

野比 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

时间: 2024-10-05 04:00:03

图像识别练习(flash验证码)的相关文章

discuz2.5变量大全

<?php   /** * [Discuz!] (C)2001-2099 Comsenz Inc. * This is NOT a freeware, use is subject to license terms * * $Id: lang_admincp.php 31458 2012-08-30 03:39:40Z zhengqingpeng $ */   if(!defined('IN_DISCUZ')) { exit('Access Denied'); }     $lang = arr

Flask知识点

flask知识点:逻辑:indexfrom flask import *from flask_sqlalchemy import SQLAlchemy# 导入captcha 用于生成验证码from captcha.captcha import captchafrom flask_uploads import UploadSet, IMAGES, configure_uploadsimport sysimport osimport re app = Flask(__name__)app.secre

python 简单图像识别--验证码

python  简单图像识别--验证码 记录下,准备工作安装过程很是麻烦. 首先库:pytesseract,image,tesseract,PIL windows安装PIL,直接exe进行安装更方便(https://files.cnblogs.com/files/Oran9e/PILwin64.zip)(https://files.cnblogs.com/files/Oran9e/PILwin32.zip) 安装 image:pip install image 安装 pytesseract:pi

python 简单图像识别--验证码Ⅲ

python  简单图像识别--验证码Ⅲ 实现自动登陆网站 登录学校图书馆管理系统为例,做一个简单的例子.python识别简单的没有干扰的纯数字验证码还是可以的,但是识别字母数字再加上干扰因素,误报率很高,因此这个我是采用"人工识别",人工输入. 首先得明白cookie的作用,cookie是某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据.因此我们需要用Cookielib模块来保持网站的cookie. 登录学校图书馆管理系统登陆(http://122.207

利用Python进行简单的图像识别(验证码)

这是一个最简单的图像识别,将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract.image_to_string(image)识别后将结果存入到本地的txt文件中 1 #-*-encoding:utf-8-*- 2 import pytesseract 3 from PIL import Image 4 5 class GetImageDate(object): 6 def m(self): 7 image = Image.open(u"C:\\a.p

tesseract图像识别验证码:安装使用和避免坑

安装使用 https://blog.csdn.net/kk185800961/article/details/78747595 避免的坑 http://www.mamicode.com/info-detail-1893993.html 原文地址:https://www.cnblogs.com/andy9468/p/10907671.html

jsp实现验证码

在web开发领域里面,验证码是一个比较常见的功能,而归根到底,验证码其实就是一组随机数,或者是一个随机算术 一.基本知识 1.为什么需要验证码? 验证码,很多时候出现在注册页面或者登陆界面,在这些页面中有可能会出现恶意注册和暴力破解,这时候验证码可以有效防范这些攻击.所以,总的来说,验证码很多时候是为了防止不法分子对网站进行恶意的注册和攻击,是一种有效的拦截手段. 2.验证码的工作原理 首先,我们要明确一点就是,验证码实际是在服务器端产生的,因为如果在前端参数的话并不能有效拦截,因此很多时候,在

车牌识别及验证码识别的一般思路

http://www.pin5i.com/showtopic-22246.html 描述一下思路及算法. 全文分两部分,第一部分讲车牌识别及普通验证码这一类识别的普通方法,第二部分讲对类似QQ验证码,Gmail验证码这一类变态验证码的识别方法和思路. 一.车牌/验证码识别的普通方法 车牌.验证码识别的普通方法为: (1)      将图片灰度化与二值化 (2)      去噪,然后切割成一个一个的字符 (3)      提取每一个字符的特征,生成特征矢量或特征矩阵 (4)      分类与学习.

Python识别网站验证码

http://drops.wooyun.org/tips/6313 Python识别网站验证码 Manning · 2015/05/28 10:57 0x00 识别涉及技术 验证码识别涉及很多方面的内容.入手难度大,但是入手后,可拓展性又非常广泛,可玩性极强,成就感也很足. 验证码图像处理 验证码图像识别技术主要是操作图片内的像素点,通过对图片的像素点进行一系列的操作,最后输出验证码图像内的每个字符的文本矩阵. 读取图片 图片降噪 图片切割 图像文本输出 验证字符识别 验证码内的字符识别主要以机