最近可能是和验证码杠上了 ...
项目地址: https://github.com/chxj1992/slide_captcha_cracker
Demo: http://slide-captcha.chxj.name
相比之前利用神经网络训练来破解普通验证码,这个可能更具通用性,因为不用依赖训练数据。
滑动验证码拼图的定位问题只是破解过程中的一个环节,代码主要采用 opencv 提供的一些函数对图片进行处理后来实现定位,在这里只是提供一个思路,抛砖引玉。
演示项目所用到的滑动验证码的实现相对简单,整个交互过程主要包含以下步骤:
x 坐标
,然后将拼好图片和单独的拼图图片返回给客户端x 坐标
数据并与之前保存的x 坐标
数据进行比较,允许小范围内的误差基于以上的验证码实现,本例子通过以下方式实现对验证码拼图在背景图中的定位(其他步骤较为简单,不做考虑):
opencv
库中提供的边界查找函数(cv2.findContours)提取单片拼图边缘轨迹并构造成一个二维矩阵(算子)高斯模糊算子
( cv2.GaussianBlur )和 Canny 边缘检测算子
( cv2.Canny )对背景图进行处理,凸显出拼图在图片中的边缘互相关操作
,所得最大(小)值的位置就是拼图在背景图中的坐标拼图的定位只是破解滑动验证码的一个中间环节,想要破解一个好的验证码产品除了定位拼图在整个图片中的位置外,可能还有以下几个问题需要考虑:
1
misaka19000 2017-06-29 17:58:35 +08:00
这种验证的核心是不是对滑动轨迹的坐标进行计算,以此来进行 robot 判断?
|
2
hanbing135 2017-06-29 18:07:32 +08:00 via Android
完全看不懂 这玩意不能用机器学习训练出来吗
|
3
chxj1992 OP @misaka19000 对,我觉得那个也是一个重点,但如果不是用第三方(极验那种)提供的实现,自己也比较难实现对轨迹的校验,所以这里只讨论了定位拼图位置的问题
|
4
chxj1992 OP @hanbing135 之前也想过,如果用深度学习的方法,首先需要大量的训练数据,并且如果以背景图的定位点作为输出结果来分类,训练难度也比较大。还有就是如果背景图会变化,深度学习的方式也很受影响。边缘检测在这些方面要好得多。对机器学习了解不多,说的不对请指正哈
|
5
NaVient 2017-06-30 09:46:31 +08:00
楼主的想法很赞,给人的启发也挺大的,Mark了改天试下
|