滑块验证码识别源码

来源:互联网 发布:看视频软件有卡顿 编辑:程序博客网 时间:2024/06/15 05:15

http://bbs.125.la/thread-13791887-1-1.html




发布截图http://bbs.125.la/thread-13791887-1-1.html
界面截图:是否带模块:调用了模块备注说明:-
本帖最后由 canfeng11 于 2015-4-26 21:30 编辑

最近做的一个网站的登陆,验证码改成了极验的滑块的验证码,以前都是用代答来解决验证码,本人对验证码识别这一块也是一知半解,废了一番周折总算是解决了识别问题,这个帖子主要给大家说下图片识别的思路,由于JS加密文件好像会随时更新,所以JS加密大家可以参考下 极验滑动验证码识别源码分享20150409
http://bbs.125.la/thread-13787327-1-1.html
首先说下思路:
所有这种非字符串操作,而是图片操作的验证码一定都是在服务器添加好了静态的底图,什么意思呢?就是不管验证的位置怎么变化,但是它的背景图片一定是固定的那几张,可能有几十,几百个,所以我们只需要把验证码图片和完整的底图进行比较就能获得修改过的区域,这个思路应该也可以用在旋转图片拼图的验证码。
下面说下具体步骤:
1、获取验证码:极验的验证码在读取时会先向服务器发送一个获取验证码信息的请求,请求返回的是一段JS,JS里包括了,验证图地址,底图地址等信息
 
其中 fullbg是完整的图片,imgurl 是验证图片,sliceurl是移动的滑块图片,打开地址后就可以得到验证码图片了
 2、验证码图片是被打乱了,用firbug查看页面元素发现时用css来还原的,都是简单的图片分割和移动,用易语言的位图很容易进行还原
 
还原后的效果:
 
3、处理图片进行识别,我用的最简单粗暴的方法,将两张图进行对比,相同点全部抹去,不同点全部变黑,当然这个验证码故意抠掉2个区域的图片来误导你,一块浅点的阴影,一块深,所以还要尽量排除掉另一个浅色部分,我的方法是 和同一点底图相比,浅色部分比深色部分的颜色相似度要高(色差低),所以我设定了一个色差的阀值,来排除一些点,对比处理图片后得到对比图1的效果
 
4、为了降低误差,再去掉杂点,将所有孤立的点(块)和垂直20像素内点数少于5个的点全部排除掉,获得了对比图2
 
5、计算距离:方法当然还是有很多,我用的方法是计算在一定区域内黑色点占的比例,比如40*40的区域内黑色点占的比例大于60%即认为这个区域左上的坐标是我们需要的坐标,坐标的Y就是我们要计算的距离,为了能直观的看到找到的位置,在计算的时候将找到的区域置为浅蓝色,浅蓝色左上角坐标的Y即距离。(注意:由于我们要找的是Y的距离,所以要纵向查找,这样才能找到最靠左边点的坐标)
最后的效果:
 
表达可能不是很清楚,大家谅解!不懂的可以看源码。
0 1
原创粉丝点击