旋轉(zhuǎn)圖片驗證碼防御能力到底有多高、人機校驗現(xiàn)巨大漏洞?
旋轉(zhuǎn)圖片驗證碼,一個為防止爬蟲攻擊的行為驗證產(chǎn)品。它是由最初的字符驗證碼演變而來,與其相似的產(chǎn)品還有滑動拼圖,文字點選,以及刮涂層等產(chǎn)品。
這些產(chǎn)品有很多共同點,它們的目標都是為了防止爬蟲攻擊,防止一些惡意的程序來爬取網(wǎng)站數(shù)據(jù),或者惡意注冊等等,它們都統(tǒng)稱為人機校驗程序。
當然這些所謂的人機校驗程序都是反爬攻城獅們迫于無奈而想出的招數(shù)。對于爬蟲攻城獅來講破解也就是時間問題。而對于用戶來講這些產(chǎn)品反而是大大降低了用戶體驗。
那么問題來了,旋轉(zhuǎn)圖片驗證碼到底如何破解呢?
且先看一下破解后的結(jié)果
實現(xiàn)原理分析:
首先說下圖片庫,經(jīng)過不斷抓取圖片發(fā)現(xiàn),這里的圖片庫基本上由幾十張樣本圖,各自旋轉(zhuǎn)360°的部分結(jié)果。那我們就 按照他們生成圖片庫的方法來生成樣本數(shù)據(jù),首先我們要通過某種方式來得到正確的樣本數(shù)據(jù),就是的到一張圖和它對 應滑動的距離。這樣就可以將這張圖的360°樣本圖全部計算得出,從而得到模型、匹配庫。當樣本庫與他們的圖片庫數(shù)量 趨于一致時,基本上就可以達到95%以上的識別率了。
那么就有了以下幾個問題:
如何得到正確的樣本數(shù)據(jù)?
如何生成360°各個角度對應的模型圖?
有了模型庫如何與遇到的圖片進行匹配?
1.第一個問題:如何得到正確的樣本數(shù)據(jù)?
這里就不放代碼的,說下具體思路吧:
先給一個初始的距離,然后每次都從那個位置開始嘗試,成功則記錄結(jié)果,失敗則先記下失敗,下一次給一個偏動距離再次嘗試,直達所有距離都嘗試過基本就有答案了,再沒有就是這張圖的問題了。本來想從左到右依次往上加的,但是 發(fā)現(xiàn)答案最多的地方基本都在正中間左右一點的位置,所以就改為從中間開始,向兩邊依次加減,左右輪回,這樣更容 易得到正確結(jié)果。
這里補充一段計算圖片唯一標識(Checksum)的Demo:
2.第二個問題:如何生成360°各個角度對應的模型圖?
這里我們對樣本圖片進行處理,得到旋轉(zhuǎn)360°的結(jié)果。
樣本圖:
生成模型圖:
實現(xiàn)代碼:
創(chuàng)建任意角度的旋轉(zhuǎn)圖像
獲取四個角點旋轉(zhuǎn)后Y方向坐標和X方向坐標
旋轉(zhuǎn)生成圖片
3.第三個問題:有了模型庫如何與遇到的圖片進行匹配?
這里用到了相似度匹配的算法,圖片相似度匹配算法網(wǎng)上有很多,感興趣的可以試一下,這里就不做過多的介紹了。
好了,相信你看完以后都會覺得,旋轉(zhuǎn)圖片驗證碼防御能力其實也不是太高,那么人機校驗到底能不能防御住爬蟲攻城獅呢,相信你都已經(jīng)有了一個答案。