对火车票验证码检测的推测
李国帅 2018/1/26
自己对火车票验证码做了个简单的推测,也许对也许不对,提供大家共享。
我想大概有两个步骤:1、识别码的收集,2、识别码处理,3、识别码对比。
1、识别码的收集
利用第三方买票工具收集,记录出现了那些登录或者购票验证码图像,用户又是如何选择的,这样慢慢建立起庞大全面的验证码数据库,当然这部分也可以直接向有关部门购买。
有了这么一个数据库,就有了验证码比对的基础,说不定还可以把数据库卖给别的做购票工具的人。
2、识别码处理
本以为每个识别图像都是单独的图片,后来发现整个图片组都是一个图像。这样就存在两种可能。
1、拆分模式
把整个图像组看作是分离的图像:关键字图像(“请点击下图中所有的”后面的文字),八个拆分的识别码图像。
关键字图像中最多包含两个关键字,组合关系较少,因此可以将整个一行图像作为一个关键字图像,建立索引。
八个识别码图像分别建立索引。
2、整图模式
把整个图片组作为一个识别图像建立索引。
采用第一种方式,将会需要对图像进行拆分,相对来说比第二种方式复杂,不过相对来说可能更加合理而高效。
3、识别码对比
关于图像的对比,可能有多种方法,使用opencv库,可能还要了解一下小波分析之类的概念,或者说直接使用像素对比。
不过也许这一切根本就不需要,因为用户对验证码进行了对比。最根本的原因是火车票验证码图片具有明显的特征:图像大小固定,色彩固定,文件大小固定。这个特征大大降低了识别码对比的难度,使得对比时不用做图像分析。
第一部分已经讲到,采用第三方购票工具,已经在收集了验证码图片和正确的选择方式,下一次只要知道上一次如何选择,本次就知道如何选择了。
首先对每一张验证图片生成一个256位的MD5,以及对应的验证码选择。
如果第一种模式,根据关键字图像的MD5查询到库中关联识别图像的多个MD5图像,然后将组合图中的识别图MD5与库中的MD5图像对比,获取要选择的序号。
如果第二种模式,那么会简单一些,直接根据验证码的MD5查询出要选择的序号。