验证码破解的方法,简单验证码破解演示

来源:互联网 发布:c语言长整型范围比实型 编辑:程序博客网 时间:2024/06/06 13:11

对于复杂的验证码,位置随机、扭曲、模糊、干扰项、gif验证码、汉字等。。。。

 

对于复杂背景的,但是字体是统一颜色的,我们可以统计每个像素点的值,然后统计出峰值的4个,之后把峰值之外的点全部转为白色,峰值的4种色转为黑色。(具体情况具体定)

 

大部分验证码都是可以用黑白的方法把底纹给去掉的,比如,这个大家常见的效验码,去了底纹之后的效果为上图,可以看到还是有一些干扰点,我们可以用代码把这些孤立的干扰点去掉(去的力度可以自己确定),去了干扰点的效果为上图,接下来这些字符都是很规整的字符了

  

看上图优化后的目标,这两个6是一样的,加上一些补偿,提取到模板,接下来就很容易破解了,可以看到左图的M有些模糊了,其实能达到90%的概率就可以了

 

 

如果遇到gif类型的效验码,忘记哪个网站了,但是我确定我见过,这种校验码其实也类似,关键就是从gif中提取到效验码图片,我们可以提取帧数最长的一张,取到之后过程就也一样了,去除干扰,提取模板或者学习,比对破解

 

 

由于生成图片对服务器来说是个“体力活”,并且效验码的访问量是很大的,并且有很多时候由于用户网速等原因会不停的请求效验码刷新,所以很多看起来很牛的效验码其实是固定生成好的,比如每天0点生成N个,然后供第二天使用,这类效验码就是每天不停的人工输入,然后供当天使用,听起来很雷,但是国内确实有这样的做法。

还有种更雷的做法,把效验码提取然后通过程序集中的发布出去,让一些想赚钱的人来输入,1分钱一张(或者更低)放心,肯定有人愿意做的。。。

 

 获取到去了噪点的图片之后(有些需要做补偿)找出模板,由于固定的位置直接去固定位置的图片即可

这里仅提供一种验证码破解的标准示例,共大家研究学习

这种做法仅对规则的效验码有效,复杂的效验码无效,但是总体的步骤是一致的。

 

通过这组验证码大家会看到一些规律,1。这种验证码字体很规则,2。每位数字的位置都是固定的。我们称之为标准效验码,所有的干扰项也就是背景颜色有不同的深灰色干扰纹。字体没有任何的扭曲、位置变换。

 

思路:截取每个位置上的10位数字图片,然后将图片都黑白化,然后用模板进行比对。

图片黑白化原理:

获取到RGB的值,然后根据黑白化的公式R*R +G*G +B*B < 3*128*128为黑色,否则为白色,这种方法对于绝大多数是有效的。

还有一种是根据灰度,然后在根据灰度来确定是黑还是白。

像素点灰度的公式:

1.浮点算法:Gray=R*0.3+G*0.59+B*0.11

  2.整数方法:Gray=(R*30+G*59+B*11)/100

  3.移位方法:Gray =(R*28+G*151+B*77)>>8;

  4.平均值法:Gray=R+G+B/3;

5.仅取绿色:Gray=G

参考:http://baike.baidu.com/view/1184366.html

可以根据需要做出微调

 

 

本例采用黑白化公式来黑白化。

 

 

然后根据获取到的模板,在每次比对的时候将图片净化,然后比对

结果如下

 

 其实这上面的验证码是支付宝之前的验证码,现在已经换了新的验证码了,所以老的验证码也无所谓了,我就公布出老的破解方法

 

具体的实现逻辑可以看下代码,文章中的两个例子都有涉及到,仅供学习讨论使用,禁止一切的非法活动

有对效验码有研究的朋友可以一块交流。

 

示例代码下载   ps:csdn上传的审核太慢了。等不及了就放javaeye了

CSDN的链接终于好了也放上来,CSDN下载

原创粉丝点击