`
touchmm
  • 浏览: 1041872 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

自动识别图形验证码

阅读更多
现在大多数网站都采用了验证码来防止暴力破解或恶意提交。但验证码真的就很安全吗?真的就不能被机器识别??
我先讲讲我是怎么实现站外提交留言到一个网站的程序。
这个网站的留言版大致如下:




我一看这种简单的4位数字验证码,马上就感觉到有戏了。直觉告诉我让电脑来识别这些图片验证码据对简单o(∩_∩)o...
首先我马上在这个页面用右键菜单看源代码


知道验证码获取页面后 你可以直接用 http://www.XXXX.com/imgchk/validatecode.asp 这样去访问你会发现你打开的就是一个验证码图片。




对的其实返回的就是图片文件的2进制流而已。接着先用右键保存一张验证码的图片。因为要开始分析这张图片了,什么用什么工具?PhotoShop????不用就一般的画图工具就可以了。我们要搞清楚的是 这几个数字分别占几个像素就可以了。




可以看出 一个数字5*9 也就是45个像素。恩 这就可以了 另外我们可以看出 默认区域就是白色
(姑且说是白色因为我们肉眼看就是白色)
那么我的程序识别原理就是固定去扫描这45个像素点。看每个点的颜色是不是和默认的颜色一致
一致的话就标记为0 ,不一致就标记为1 。
如一个数子是2 那么我的程序扫描出来的图像就应该是:
011110
100001
000001
000001
000010
000100
001000
010000
100000
111111
如果一个数字是7那么扫描出来的图像就是:
111111
100001
000010
000010
000100
000100
001000
001000
010000
010000

恩,就这么简单呵呵。下面给出图像 扫描的java类 (不好意思,在我会的语言里面除开java就剩sql了)



packagecom.util;

//~---JDKimports------------------------------------------------------------

importcom.sun.image.codec.jpeg.JPEGCodec;
importcom.sun.image.codec.jpeg.JPEGEncodeParam;
importcom.sun.image.codec.jpeg.JPEGImageEncoder;

importjava.awt.*;
importjava.awt.image.*;

importjava.io.*;
importjava.io.FileOutputStream;
importjava.io.OutputStream;

importjava.net.*;

importjavax.imageio.*;
importjavax.imageio.ImageIO;

/***//**
*登陆验证图片转换为数字
*
*
*
@version1.0,08/04/20
*
@author张健滢
*/

publicclassImgIdent...{

//数字字符比特表
privatefinallong[][]NUMERIC=...{
...{512104545,562436190},//'0'
...{148931080,136348222},//'1'
...{511971394,69273663},//'2'
...{511971406,17045598},//'3'
...{35168914,586948743},//'4'
...{1065486398,17045598},//'5'
...{239208494,830871646},//'6'
...{1065623684,69239824},//'7'
...{512104542,562436190},//'8'
...{512104547,486805660}
}
;//'9'

//字框高
privateintintCharHeight=10;

//字框横向间隙
privateintintCharSpaceH=5;

//字框纵向间隙
privateintintCharSpaceY=1;

//字框宽
privateintintCharWidth=5;
privateintIntImgHeight;
privateBufferedImageimg;
privateintintBgColor;
privateintintCharColor;
privateintintImgWith;
privateintintMaxX;
privateintintMaxY;
privateintintMinX;
privateintintMinY;

//座标原点
privatePointpOrigin;
privateStringstrNum;

/***//**
*Constructs...
*
*
*
@paramimg
*
*
@throwsIOException
*/

publicImgIdent(BufferedImageimg)throwsIOException...{
this.img=img;
init();
}


/***//**
*构造函数
*
@paramfile本地文件
*
@throwsIOException
*/

publicImgIdent(Filefile)throwsIOException...{
img
=ImageIO.read(file);
init();
}


/***//**
*构造函数
*
@paramurl远程文件
*
@throwsIOException
*/

publicImgIdent(URLurl)throwsIOException...{
img
=ImageIO.read(url);
init();
}


/***//**
*类初始工作
*/

privatevoidinit()...{

//得到图象的长度和宽度
intImgWith=img.getWidth();
IntImgHeight
=img.getHeight();

//得到图象的背景颜色
intBgColor=img.getRGB(7,4);

//System.out.println(intBgColor);

//初始化图象原点座标
pOrigin=newPoint(0,0);
}


/***//**
*Methoddescription
*
*/

privatevoidgetBaseInfo()...{
System.out.println(intBgColor
+"|"+intCharColor);
System.out.println(intMinX
+"|"+intMinY+"|"+intMaxX+"|"+intMaxY);
}


/***//**
*得到字符的左上右下点座标
*
@paramintNoint第n个字符
*
@returnint[]
*/

privatePoint[]getCharRange(intintNo)...{

//左上右下点座标
PointpTopLeft=newPoint(0,0);
PointpBottomRight
=newPoint(0,0);

//左上点
pTopLeft.x=pOrigin.x+intCharWidth*(intNo-1)+intCharSpaceH*(intNo-1);
pTopLeft.y
=pOrigin.y;

//右下点
pBottomRight.x=1+pOrigin.x+intCharWidth*intNo+intCharSpaceH*(intNo-1)-1;
pBottomRight.y
=pOrigin.y+intCharHeight-1;

returnnewPoint[]...{pTopLeft,pBottomRight};
}


/***//**
*与背景颜色比较返回相应的字符
*
@paramxint横座标
*
@paramyint纵座标
*
@returnchar返回字符
*/

privatechargetBit(intx,inty)...{
intintCurtColor;

intCurtColor
=img.getRGB(x,y);

//System.out.println("["+x+","+y+"]"+intCurtColor+"=="+intBgColor+"==>"+(Math.abs(intCurtColor)>7308252));
//return(Math.abs(intCurtColor)>=5689325)
//?'0'
//:'1';
return(intCurtColor==intBgColor)
?'0'
:
'1';

//56893256008535
}


/***//**
*得到第n个字符对应的字符串
*
@paramintNoint第n个字符
*
@returnString代表字符位的串
*/

privateStringgetCharString(intintNo)...{

//本字符的左上右下点座标
Point[]p=getCharRange(intNo);
PointpTopLeft
=p[0];
PointpBottomRight
=p[1];

//换算边界值
intintX1,intY1,intX2,intY2;

intX1
=pTopLeft.x;
intY1
=pTopLeft.y;
intX2
=pBottomRight.x;
http://images.csdn.n
分享到:
评论

相关推荐

    图形验证码识别测试工具

    【图形验证码识别测试工具】是一种专门用于自动化处理图形验证码的技术工具。在互联网安全领域,图形验证码被广泛应用于网站登录、注册、评论等场景,目的是为了防止恶意机器人或爬虫自动执行任务,保护用户账户安全...

    python识别图形验证码实现自动登陆

    要实现Python识别图形验证码,我们首先需要引入相关的库。PIL(Python Imaging Library)是Python中最常用的图像处理库,它提供了丰富的图像处理功能。此外,OpenCV库也是一个强大的计算机视觉库,也可以用于图像...

    reCAPTCHA:reCAPTCHA =识别CAPTCHA:一种Burp Suite扩展程序,可识别CAPTCHA并用于入侵者有效载荷自动识别图形验证码和使用burp intruder爆破模块的插件

    一个burp插件,自动识别图形验证码,并入侵者中的有效载荷。 使用 安装: 从下载插件。 如果没有遇到错误,您将看到一个新的称为“ reCAPTCHA”的标签。 准备: 通过burp代理访问目标网站的登录界面。 在代理中找到...

    使用python+robot framework识别图片验证码

    在IT行业中,自动化测试是提升效率的关键之一,特别是在网页应用中,验证码的识别是一个常见的挑战。本篇将详细讲解如何使用Python和Robot Framework相结合来识别图片验证码,以及如何利用PIL库进行图像处理,以及...

    通过OpenCV实现的全自动图形图片验证码识别软件

    然而,随着计算机视觉技术的发展,尤其是OpenCV库的广泛应用,现在可以通过算法来自动识别这些复杂的验证码。OpenCV(Open Source Computer Vision Library)是一个跨平台的计算机视觉库,提供了丰富的图像处理和...

    python+ocr识别图形验证码

    在本项目中,我们关注的是"python+ocr识别图形验证码",这涉及到Python编程和OCR(Optical Character Recognition,光学字符识别)技术的结合应用。OCR技术主要用于将图像中的文本转换为可编辑和搜索的数据。 首先...

    基于Java的简单图形验证码识别

    在IT领域,图形验证码识别是一项重要的技术,尤其在网络安全中起到防止自动化机器人攻击的作用。本项目专注于使用Java语言实现一个简单的图形验证码识别系统。通过理解并解析提供的代码,我们可以深入探讨其中涉及的...

    CV全自动图形图片验证码识别软件

    2、自动识别; 智能处理各种背景、边框、干扰等; 3、识别率达80%-100%(指不太复杂的验证码),正确率高,本地图片识别速度一般0.1秒以内,安全可靠。 4、丰富的、简单易用的接口;可供多种可调用动态链接库的...

    VBA_验证码识别

    识别图形验证码的算法源码,带实例,并可自动生成模板文件

    beego框架图形验证码实现

    总结起来,beego框架的图形验证码实现是通过Go语言的强大功能和灵活性实现的,它提供了高度定制化的选项,使得验证码更难被自动化程序破解,从而保护了Web应用的安全。通过深入理解和实践`gocaptcha-master`,开发者...

    基于 Java 的简单图形验证码识别.zip

    在本项目"基于 Java 的简单图形验证码识别.zip"中,我们关注的是如何使用 Java 编程语言实现一个基本的图形验证码识别系统。图形验证码是一种防止自动化程序(如机器人)进行非法操作的安全机制,通常用于网站登录、...

    图形验证码成功之后实现用户登录功能.zip

    在IT行业中,图形验证码是一种广泛应用于网络安全的重要技术,它的主要目的是防止自动化的恶意软件或机器人进行非法操作,如批量注册、频繁登录等。本项目"图形验证码成功之后实现用户登录功能.zip"着重于构建一个...

    ccb.zip_ccb.php_识别图形验证

    然而,值得注意的是,自动识别图形验证码的行为通常用于自动化测试或破解,而这些行为可能违反了服务提供商的使用条款。在实际开发中,更常见的情况是创建和使用图形验证码来保护自己的服务,而不是去破解别人的。 ...

    图形验证码生成合集

    简单图形验证码虽然相对容易被人类识别,但对自动化程序构成了一定的挑战。 4. **复杂条纹验证码**:这种验证码在图像中添加了复杂的条纹或干扰图案,增加了机器识别的难度。有时,这些条纹可能会与文字重叠,使得...

    图形验证码,实现简单的数字字母识别

    在IT领域,图形验证码(CAPTCHA)是一种广泛用于防止恶意自动化程序(如机器人)的验证机制,它要求用户输入图像中显示的特定字符或数字,以此来确认操作是由人类执行的。本主题聚焦于实现一个简单的图形验证码识别...

    Android生成图形验证码

    此外,为了提供良好的用户体验,图形验证码的生成应该快速并且易于用户辨认,同时又足够安全,难以被自动化程序破解。 最后,考虑到无障碍性,你可能还需要为视力障碍的用户提供替代方案,比如音频验证码。 综上所...

    Java简单验证码识别(附源码)

    验证码识别的任务就是让计算机自动识别并输入这些字符。 在Java中实现验证码识别,一般会经过以下几个步骤: 1. 图像预处理:这一步包括图像的灰度化、二值化、噪声去除等,目的是将复杂的彩色图像简化为易于分析...

    动网图形验证码识别源码

    在IT领域,图形验证码是一种广泛应用于网站以防止恶意自动化脚本(如机器人)进行操作的安全机制。它通常要求用户输入图片中显示的一组随机字符,以此来验证用户是人类而不是机器。"动网图形验证码识别源码"是专门...

    vue插件——使用canvas生成图形验证码

    在IT行业中,图形验证码是一种广泛应用于网站以防止恶意自动化脚本(如机器人)进行操作的安全机制。Vue.js作为一款流行的前端框架,它允许开发者构建高效、可复用的组件。而将canvas技术与Vue.js结合,可以创建动态...

    自动验证码识别软件2014绿色免费版

    自动验证码识别软件是一款全自动图形图片验证码识别工具【自动验证码识别软件基本介绍】 在以前的互联网是没有验证码的,后来随着一些自动程序的出现(如自动注册邮箱、自动发布信息等),对网络的正常使用产生...

Global site tag (gtag.js) - Google Analytics