Article / 文章中心

旋转图片验证码防御能力到底有多高、人机校验现巨大漏洞?

发布时间:2020-10-31 点击数:3823

旋转图片验证码,一个为防止爬虫攻击的行为验证产品。它是由最初的字符验证码演变而来,与其相似的产品还有滑动拼图,文字点选,以及刮涂层等产品。

 

这些产品有很多共同点,它们的目标都是为了防止爬虫攻击,防止一些恶意的程序来爬取网站数据,或者恶意注册等等,它们都统称为人机校验程序。

 

当然这些所谓的人机校验程序都是反爬攻城狮们迫于无奈而想出的招数。对于爬虫攻城狮来讲破解也就是时间问题。而对于用户来讲这些产品反而是大大降低了用户体验。

 

那么问题来了,旋转图片验证码到底如何破解呢?

且先看一下破解后的结果

实现原理分析:

 

首先说下图片库,经过不断抓取图片发现,这里的图片库基本上由几十张样本图,各自旋转360°的部分结果。那我们就 按照他们生成图片库的方法来生成样本数据,首先我们要通过某种方式来得到正确的样本数据,就是的到一张图和它对 应滑动的距离。这样就可以将这张图的360°样本图全部计算得出,从而得到模型、匹配库。当样本库与他们的图片库数量 趋于一致时,基本上就可以达到95%以上的识别率了。

 

那么就有了以下几个问题:

 

如何得到正确的样本数据?

 

如何生成360°各个角度对应的模型图?

 

有了模型库如何与遇到的图片进行匹配?

 

1.第一个问题:如何得到正确的样本数据?

 

这里就不放代码的,说下具体思路吧:

 

先给一个初始的距离,然后每次都从那个位置开始尝试,成功则记录结果,失败则先记下失败,下一次给一个偏动距离再次尝试,直达所有距离都尝试过基本就有答案了,再没有就是这张图的问题了。本来想从左到右依次往上加的,但是 发现答案最多的地方基本都在正中间左右一点的位置,所以就改为从中间开始,向两边依次加减,左右轮回,这样更容 易得到正确结果。

这里补充一段计算图片唯一标识(Checksum)的Demo:

2.第二个问题:如何生成360°各个角度对应的模型图?

这里我们对样本图片进行处理,得到旋转360°的结果。

样本图:

生成模型图:

实现代码:

创建任意角度的旋转图像

获取四个角点旋转后Y方向坐标和X方向坐标

旋转生成图片

3.第三个问题:有了模型库如何与遇到的图片进行匹配?

这里用到了相似度匹配的算法,图片相似度匹配算法网上有很多,感兴趣的可以试一下,这里就不做过多的介绍了。

好了,相信你看完以后都会觉得,旋转图片验证码防御能力其实也不是太高,那么人机校验到底能不能防御住爬虫攻城狮呢,相信你都已经有了一个答案。