[驗證碼識別技術]-初級的滑動式驗證圖片識別


初級的滑動式驗證圖片識別方案

1 abstract

驗證碼作為一種自然人的機器人的判別工具,被廣泛的用於各種防止程序做自動化的場景中。傳統的字符型驗證安全性已經名存實亡的情況下,各種新型的驗證碼如雨后春筍般涌現。目前最常見的一種形式就是“滑動拼圖式”

關鍵字:驗證碼,圖靈測試,圖像識別,python,破解

2 內容概述

 

關於滑動式驗證,最早由國內某網絡安全公司首次提出的行為式驗證,以滑動拼圖解鎖的方式呈現在世人面前。然后大概過了好幾年之后,各種各樣的滑動式驗證產品都出來了,那么這些看似一樣的產品,它們的安全性到底如何呢?

本文特意挑選出了一些后來者的小廠商的滑動式驗證來做下實驗,僅從第一步的圖像學上分析一下安全性。因為我的主技術路線是圖像學,關於前端的js並不熟悉,所以就只在圖像學上點到即止即可。僅供會一些自動化技術的同學提供一些知識補充吧。

由於研究的實驗對象實在是太簡單,所以本文涉及的一些圖像學的知識也不難,基本上python的初級選手就可以跑通本程序。僅供大家學習學習。

3 研究對象

 

某小站點上由小廠商提供的“滑動式驗證”:

使用python寫一個簡單的爬蟲自動化腳本,將此網站上的驗證碼資源多請求幾次,並保存到本地,觀查圖片特點。

 

一般情況下,這一步是必須的,多下載一些圖片,很多規律是可以一眼看出的。比如,從公開的頁面中,連續請求此驗證的資源 100次,下載100張圖片后。

一眼看上去,此驗證的圖片素材都只有一種模式,那么就放心了,因為這個問題就比較單一,而不是多模式下你必須要解決多個問題。

 

4 定性分析

 

將這種單一模式的圖片篩選一張出來,如下:

 

 

發現如下特點:

  1. 和前端展示相關的圖片有:方塊位置提示圖A,小方塊B,完整背景圖C。
  2. A圖完全是由B和C合成

 

顯然,設計這個驗證圖片的人沒啥安全方面的經驗,有如下兩個產品細節沒有注意:

  1. 對圖片沒做任何的特殊處理
  2. 對外公開提供了過多信息

於是使得識別此圖片的位置變得極其簡單

 

5 定量分析

在前面一小節中,我們只是直觀的看到了這些圖片的一些特別,但是要解答這個題目,還需要進行量化,量化后才能程序化,程序化后才能全自動化。

 

使用matplotlib工具打開此圖片。量化得到如下參數:

  1. 圖片整體規格:w:240,h:450
  2. 由上到下分為三部分,每部分高度為150

6 求解圖片

很明顯,只要將第一張圖和第三張圖相應的像素相減,神奇的事情就發生了:

 

 

“左上” 減去 “右下” 就得到 “左下”的結果。

這個時候,對x方向的R通道的像素點進行累加統計。

得到如下的統計圖:

 

然后對這個曲線求一階導數或者只要發現有個突變值超過最大像素值的某百分比時,即可得到最左邊的那個y方向突變點的位置。

到此為止,此圖片的位置已經成功解出。

下面是相應的python代碼:

 

import numpy as np
def get_boundary(mask, axis, ratio=0.6):
   """
   對灰度圖的某個channel做像素統計
   """
   sum_along_axis = np.sum(mask, axis=axis)
   max_value = np.max(sum_along_axis)
   bound_value = max_value * ratio
   bvalue = (sum_along_axis >= bound_value).astype('int8')
   return np.where(bvalue != 0)[0][0]

def get_predict_ans(img):
   """
   根據分類出來的圖像,找到相應的圖像位置
   傳入二進制的圖片,返回答案
   :param img:
   :return:
   """
   nd_img = np.array(img)
   w_pos = get_boundary(nd_img, 0)  # 根據分布圖找到邊界位置
   return w_pos

 

7 最后總結

由於我不會前端技術,所以我的工作就到此為止。

但是后來有位會前端的網友研究了一下那個網站的驗證碼前端代碼,據說其防護措施也只有圖片這一層,只需要把答案放到http的接口里面上傳,再加個時間標記就能穩穩的過了。然后借鑒本文解圖片答案的思路,基本上可以達到:1s通過60次,成功率大概70%吧

對滑動式驗證有興趣的同學,如果你們想練手的,可以多去找一些新入場這個領域的廠商試試,基本上新入場的團隊的都會犯一些非常低級的錯誤,但是請只是技術上在本地自己機器上跑跑試試,安全領域有風險,請自愛

 

同時告誡一些自己想現在開始做滑動式驗證碼的廠商,如果投入不夠還有相應的技術和產品積累不夠,進入這個領域的時候,請慎重,因為你的不成熟的工作只會成為本系統最大的漏洞。

8 擴展閱讀

可能有很多讀者會覺得本文的內容不夠干,希望來點更刺激有趣的,請穩步下面的合輯文章,滿足你的好奇心。

 

《驗證碼識別技術-文章合輯》https://zhuanlan.zhihu.com/p/30871712

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM