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

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

 

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

 

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

 

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

  

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

 

 

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

 

 

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

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

 

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

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

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

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

 

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

图片黑白化原理:

获取到 R G B 的值,然后根据黑白化的公式 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

可以根据需要做出微调

 

 

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

  1. /**  
  2.      * 将一个像素点转为白色或者黑色。  
  3.      *   
  4.      * @param pixel  
  5.      * @return 转换后的像素点(黑/白)  
  6.      */   
  7.     public   static   int  pixelConvert( int  pixel) {  
  8.         int  result =  0 ;  
  9.   
  10.         //获取R/G/B   
  11.         int  r = (pixel >>  16 ) &  0xff ;  
  12.         int  g = (pixel >>  8 ) &  0xff ;  
  13.         int  b = (pixel) &  0xff ;  
  14.   
  15.         //默认黑色   
  16.         result = 0xff000000 ;  
  17.   
  18.         int  tmp = r * r + g * g + b * b;  
  19.         if  (tmp >  3  *  128  *  128 ) {  
  20.             //白色,全F   
  21.             result += 0x00ffffff ;  
  22.         }  
  23.   
  24.         return  result;  
  25.     }  

 

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

结果如下

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

 

 

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

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

 

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值