对火车票验证码检测的推测

李国帅 2018/1/26

自己对火车票验证码做了个简单的推测,也许对也许不对,提供大家共享。

我想大概有两个步骤:1、识别码的收集,2、识别码处理,3、识别码对比。

对火车票验证码检测的推测

1、识别码的收集

利用第三方买票工具收集,记录出现了那些登录或者购票验证码图像,用户又是如何选择的,这样慢慢建立起庞大全面的验证码数据库,当然这部分也可以直接向有关部门购买。

有了这么一个数据库,就有了验证码比对的基础,说不定还可以把数据库卖给别的做购票工具的人。


2、识别码处理

本以为每个识别图像都是单独的图片,后来发现整个图片组都是一个图像。这样就存在两种可能。

1、拆分模式

把整个图像组看作是分离的图像:关键字图像(“请点击下图中所有的”后面的文字),八个拆分的识别码图像。

关键字图像中最多包含两个关键字,组合关系较少,因此可以将整个一行图像作为一个关键字图像,建立索引。

八个识别码图像分别建立索引。

2、整图模式

把整个图片组作为一个识别图像建立索引。

采用第一种方式,将会需要对图像进行拆分,相对来说比第二种方式复杂,不过相对来说可能更加合理而高效。


3、识别码对比

关于图像的对比,可能有多种方法,使用opencv库,可能还要了解一下小波分析之类的概念,或者说直接使用像素对比。

不过也许这一切根本就不需要,因为用户对验证码进行了对比。最根本的原因是火车票验证码图片具有明显的特征:图像大小固定,色彩固定,文件大小固定。这个特征大大降低了识别码对比的难度,使得对比时不用做图像分析。

第一部分已经讲到,采用第三方购票工具,已经在收集了验证码图片和正确的选择方式,下一次只要知道上一次如何选择,本次就知道如何选择了

首先对每一张验证图片生成一个256位的MD5,以及对应的验证码选择。

如果第一种模式,根据关键字图像的MD5查询到库中关联识别图像的多个MD5图像,然后将组合图中的识别图MD5与库中的MD5图像对比,获取要选择的序号。

如果第二种模式,那么会简单一些,直接根据验证码的MD5查询出要选择的序号。