12306 验证码识别源码

      最近12306订票助手之类的软件很火,搞得XX部“专家”很抓狂。搞技术的人都知道,实现一个自动订票其实并非难事,不过是几个HTTP(S)操作,提交几个表单罢了。

     但是最为关键的是表单中有一项是需要人工输入的,也就是验证码,验证码使用的初衷就是为了防止机器攻击。可惜XX部设计的验证码质量太差,攻破它实在不费多大劲。

【第一版本】    

 最开始XX部只设计了一种验证码,用于登录页面和订票页面,下面是笔者早期提取的样本:

  

 

   分析一下其弱点:

   1 背景太简单,可以轻易的二值化得到良好的二值图像

   2 字体单一,没有做任何变形,只是位置有些变化

   我们来看一下二值化的效果,固定阈值就够了:

  

 要破解它只需要先找到字体,然后到验证码图像上匹配,得到最佳匹配位置和对应字母即可,具体情况代码中有。

【第二版本】

后来XX部在背景上做了点文章,看上去复杂了一点:

 

背景上多了两条固定颜色的线,看上去情况麻烦了,其实不然,用photoshop观察一下发现其实线与字的亮度是有明显差异的,可以大致过滤掉。

当然这时候不像原来处理得那么干净了。

 

【第三版本】

再后来,XX部增加了一种新的字体,两种验证码交替使用,以期防御攻击。唉,拿这么多钱就知道偷懒,光换字体不升级算法是不行的。当我发现自己的自动登录失效后,只用了两小时更新字体,代码稍作修改就搞定了。

 

 

下面贴张识别效果,总体识别率 > 90%

 

源码下载地址:

1 CSDN :

                 http://download.csdn.net/detail/renyou_hust/5014935

2 Google code: 

       svn checkout http://hack-12306.googlecode.com/svn/trunk/

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值