BMP格式验证码图片的破解。

  • Post author:
  • Post category:其他


前几天饭总在采集某网站数据时候被它的验证码拦住了,在范总自己折腾了一个晚上未果后问我有没做过类似事情。之前自己也很少去研究验证码东西,都是找一个顶着用就是,从来没去搞过破解什么的。Google一番,原来BMP图像直接可以读取,一个像素是对应着一个数据的。因此思路出来了。BMP图像的来源及介绍看

这里

,而用C同学想研究它的数据存储结构的看

这里

BMP图像包括这几类数据:文件头、位图信息头、颜色信息和位图数据四部分组成。既然位图数据即图形数据能读取出来,那么任何一张验证码图片里面的某一个Code也就能读出了,因为它本身也是由程序生成,那么我们就一定也能从图片反过来分割图片后找出图片里各个字符以及他们在BMP图像里面的一些参数出来。比如我找到的如下:

上面这些数据除了BMP图片本身的高度和宽度可以程序读出来以外,其他的都必须自己去分析需要破解的验证图片得出,而且所有参数单位为像素(px)。比如我做的图片分析如下:

有上面这张图片的分析我想大家应该大体都知道怎么去做验证了。我的思路步骤为下:

1.收集某验证码BMP图片若干,然后仔细用PS或者其他图片处理工具打开,做我上面这样分析,得到该图像的。

2.有了以上分析得到的图片特征数据,我们就可以很快的写出以下功能函数。我是写了一个类,包含方法接口如下:

3.我们现在能得到一个BMP图片里的所有某个元素图像的数据了,我们得到的位图数据是这样的:每个像素的数据都是存储着他的RGB颜色值。比如255255255白色。有这些数据,我们经过处理就可以做匹配认证了。首先这一步我们需得到验证码图片的所有元素的数据模板。比如某套验证码图片的有5个字符图像,包括0-9 A-Z这么多,那么我们可以先用getIndex(n)读某一张上某一个index的元素图像数据,因此我们还得先收集满若干原始图片,并保证这些图片里元素图片全部都出现过,这样我们就能采集到一个完整的元素图像数据库。这里提醒下,一般验证码图片都有些干扰像素啊什么的,我们可以这样处理,根据不同的BMP图像里面防干扰的条文来做,设置一个中间点,低于的全设置为0,而高于的都设置为1.那么我们最终一个像素的数据将是(111、110、001、101…)。采集元素位图数据库是一个体力活,要用到眼睛、N张图片、手、以及不断去修改读取图片的路劲、参数等O(∩_∩)O~

4.有的元素图像数据库,我们现在就可以高调的接受破解某张验证图片了,读取图片,然后一个循环读取它的元素图像,并与元素图像数据库里面的去对比,判断是否相同或者高深点算法判断下有多大相似度,并果断认定它是哪一个Code,一次循环下来就出结果啦,呵呵!


上完整代码


readerFile.class.php

其中readFile.class.php里面的$keyLib属性为上面提到的元素图像数据库。为自己动手收集的数据!这里是我要验证的图片的数据库。可以另外做成配置文件形式。


do.php

晕。。!CSDN不能上传BMP格式的,于是我把后缀改下,你们懂的!



版权声明:本文为wohewei3原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。