24 5月
最近摸了一下验证码的猜解,经过朋友的启发,才发现这个东西其实也并不困难,至于说到如何如何高深地去识别,那并不是我们要采取的手段.我们还是来摸一下简单的验证码吧.下面,我举一个例子来说一下:![]()
![]()
上图这个验证码,简单至极,它的输出格式是JPEG(JFIF),严格来说这种压缩算法会严重扰乱二进制段的规律,使猜解无从下手.如果转换成bmp的话,那背景中淡淡的干扰色就会产生不唯一性了.这个时候,其实也就是考验一个人对程序开发语言及工具的涉猎水平及广度的时候.我们使用PS或FW打开这个验证码的图片,放大到一定的倍数,很容易可以发现它的字符与字符间间隔是固定的,每个字符也有自己固定的宽度,每个字符的前景表现是完全一样的.而在这个字符的范围内,又很容易就能得到背景及前景色的RGB间隔值了,现在这个例子中,经过测试得到RGB均小于80的必定是前景色无疑了(越大越浅).然后,我们根据验证码上4个字符每个所占的像素点范围取出其中每点的RGB值,就可以得出此点是前景还是背景.由此,也就可以得出每个字符所占像素范围内的所有点的颜色特征(前景还是背景),我们把这些特征保存下来,下次直接获取验证码图片数据,然后再重复取一次特征,对比先前保存的特征,马上就可以辨认出来.剩下的过程中,你只需要提交这个识别出来的字符串即可了.这整个过程在很短的时间内就完成了
由此我们可以看出形状颜色深度不变的验证码实在是无法抵御有心的猜解的.所以,最基本的,验证码必须做到字符的形体特征重复性不大,字符范围方位变动频率不单一.至于干扰元素,我觉得如果做到了上述的两点后,干扰元素已经不是很必要了
2 评论 - "关于验证码的一点东西"
黑客防线出过篇文章是破百度帖吧的,用的都是xx高等数学来计算的。
留言评论