[驗證碼識別技術]-初級的滑動式驗證圖片識別
初級的滑動式驗證圖片識別方案
1 abstract
驗證碼作為一種自然人的機器人的判別工具,被廣泛的用於各種防止程式做自動化的場景中。傳統的字元型驗證安全性已經名存實亡的情況下,各種新型的驗證碼如雨後春筍般湧現。目前最常見的一種形式就是“滑動拼圖式”
關鍵字:驗證碼,圖靈測試,影象識別,python,破解
2 內容概述
關於滑動式驗證,最早由國內某網路安全公司首次提出的行為式驗證,以滑動拼圖解鎖的方式呈現在世人面前。然後大概過了好幾年之後,各種各樣的滑動式驗證產品都出來了,那麼這些看似一樣的產品,它們的安全性到底如何呢?
本文特意挑選出了一些後來者的小廠商的滑動式驗證來做下實驗,僅從第一步的影象學上分析一下安全性。因為我的主技術路線是影象學,關於前端的js並不熟悉,所以就只在影象學上點到即止即可。僅供會一些自動化技術的同學提供一些知識補充吧。
由於研究的實驗物件實在是太簡單,所以本文涉及的一些影象學的知識也不難,基本上python的初級選手就可以跑通本程式。僅供大家學習學習。
3 研究物件
某小站點上由小廠商提供的“滑動式驗證”:
使用python寫一個簡單的爬蟲自動化指令碼,將此網站上的驗證碼資源多請求幾次,並儲存到本地,觀查圖片特點。
一般情況下,這一步是必須的,多下載一些圖片,很多規律是可以一眼看出的。比如,從公開的頁面中,連續請求此驗證的資源 100次,下載100張圖片後。
一眼看上去,此驗證的圖片素材都只有一種模式,那麼就放心了,因為這個問題就比較單一,而不是多模式下你必須要解決多個問題。
4 定性分析
將這種單一模式的圖片篩選一張出來,如下:
發現如下特點:
- 和前端展示相關的圖片有:方塊位置提示圖A,小方塊B,完整背景圖C。
- A圖完全是由B和C合成
顯然,設計這個驗證圖片的人沒啥安全方面的經驗,有如下兩個產品細節沒有注意:
- 對圖片沒做任何的特殊處理
- 對外公開提供了過多資訊
於是使得識別此圖片的位置變得極其簡單。
5 定量分析
在前面一小節中,我們只是直觀的看到了這些圖片的一些特別,但是要解答這個題目,還需要進行量化,量化後才能程式化,程式化後才能全自動化。
使用matplotlib工具開啟此圖片。量化得到如下引數:
- 圖片整體規格:w:240,h:450
- 由上到下分為三部分,每部分高度為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 擴充套件閱讀
可能有很多讀者會覺得本文的內容不夠幹,希望來點更刺激有趣的,請穩步下面的合輯文章,滿足你的好奇心。
相關推薦
[驗證碼識別技術]-初級的滑動式驗證圖片識別
初級的滑動式驗證圖片識別方案 1 abstract 驗證碼作為一種自然人的機器人的判別工具,被廣泛的用於各種防止程式做自動化的場景中。傳統的字元型驗證安全性已經名存實亡的情況下,各種新型的驗證碼如雨後春筍般湧現。目前最常見的一種形式就是“滑動拼圖式” 關鍵字:驗證碼,圖靈測試,影象識別,python
Flask實戰第40天:圖片驗證碼生成技術
all see pillow 字體大小 src print new line 訪問 安裝pillow pip install pillow 在utils下新建python package命名為captcha 把需要需要用到的字體放在captcha下 編輯
為什麼很多網站的驗證碼都設定得肉眼都很難識別?
歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 首先來談談驗證碼的機制,驗證碼作為一種人機識別手段,其終極目的,就是區分正常人和機器的操作。而對於沒有驗證碼的場景,比如使用者登陸,則機器可以同時、大批量的發起請求,一來系統可能扛不住,二來機器可以不斷變換密碼來嘗試破解使用者的密碼,實現盜號。 雖然,圖
JAVA驗證碼生成技術(上)
生成驗證碼的流程: 1.讀取成語資源包檔案裡面的成語 2.生成圖片 3.向session儲存圖片上的文字 4.把圖片輸出到頁面 流程如下: index.jsp <body> <table width="80%" border="0" cell
驗證碼破解技術四部曲之環境搭建篇(一)
前言 轉眼就變成大四狗了,大學期間做的比較深入的技術是爬蟲,但是爬蟲也有很多高階的技術沒有涉及,比如說驗證碼的破解便是其中之一,再加上我對其非常感興趣,於是乎,開始苦學影象處理、學習機器學習,驗證碼破解也有了些眉頭。 以下是我破解的幾種驗證碼。 1、最容易破解的
驗證碼處理技術
分析: 碼值:大寫字母&數字隨機選擇,位置居中,黑白隨機 背景:固定的背景圖片見隨機。 支援點選更換 CAPTCHA專案是Completely Automated Public Turing Test to Tell Computers and Humans Apa
【轉】前端驗證碼倒計時、後臺發送驗證碼、創藍短信接口
statistic pla use code arr 是否 fun utf nsf 前端代碼:倒計時 <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8"&
HP限制發送驗證碼條數(防刷驗證碼)
$_server tar ssa 需要 多賬號 路徑 num 驗證碼 clas 因為項目原因,最近在頻繁接觸短信驗證這一功能,前幾天剛接入了短信驗證碼的接口,現在又要準備做一個新功能上去,為了防止被刷,需要增加一個新的限制,限制每天用戶獲取驗證碼的條數。接入的接口是互億無線
jsp中生成的驗證碼和存在session裡面的驗證碼不一致的處理
今天在除錯專案的時候發現,在提交表單的時候的驗證碼有問題,問題是這樣的:就是通過debug模式檢視得知:jsp頁面生成的驗證碼和表單輸入的頁面輸入的一樣,但是到後臺執行的時候,你會發現他們是不一樣的,現在上圖看看: 1.這是表單提交的時候: 2.這是後臺得到的生成的驗證碼
js中 生成一個四位的隨機驗證碼字串,請使用者按照驗證碼反覆輸入,直到輸入正確,提示驗證通過。 隨機數範圍:a-z 0-9 A-Z
//取隨機數驗證碼//1.要隨機的值放入到陣列中var arr = [0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f','g','h','i''g','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','
防機器登入驗證碼的實現 與 輸入匹配驗證
程式碼: login.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLI
驗證碼實現方式-------(js實現驗證碼):
一.js實現驗證碼: 第一步:建一個login.htm,一個code.js檔案,一個code.css檔案,準備一張圖片code.jpg 第二步:編寫login.htm檔案,內容為: <html> <head> <script
『實踐』Android之簡訊驗證碼(用的Mob簡訊驗證)
1 package com.gxu.lepao.activity; 2 3 import android.Manifest; 4 import android.app.Dialog; 5 import android.content.DialogInterface; 6 impor
tornado 驗證碼生成+結合session進行登入驗證
第一、生成驗證碼圖片 生成驗證碼圖片需要兩個必須模組 1、python自帶的random(隨機模組) 2、Pillow()影象處理模組裡的PIL(影象庫),為第三方模組,需要安裝封裝驗證碼圖片生成外掛py在封裝檔案裡先匯入random(隨機模組),和Pillow()影象處
網頁驗證碼出不來,讀取驗證碼時出錯:javax.imageio.IIOException: Can't create cache file!
eight -s .cn span mage tps www. ctrl+c https 版權聲明:本文為博主原創文章,僅作為學習交流使用 轉載請註明出處 https://www.cnblogs.com/linck/p/10593053.html 今天打開項目時
人工智慧之Python人臉識別技術,人人都能做識別!
一、環境搭建 1.系統環境 Ubuntu 17.04 Python 2.7.14 pycharm 開發工具 2.開發環境,安裝各種系統包 人臉檢測基於dlib,dlib依賴Boost和cmake 在windows中如果要使用dlib還是比較麻煩的,如果想省時間可以在an
[Python][爬蟲]利用OCR技術識別圖形驗證碼
releases 查找表 方法 jpg threshold tex ima 輸出 sim ocr圖片識別通常可以利用tesserocr模塊,將圖片中內容識別出來並轉換為text並輸出 Tesserocr是python的一個OCR識別庫,是對tesseract做的一層pyth
Python網路爬蟲之極驗滑動驗證碼識別
驗證碼分析 使用程式碼完成極驗驗證碼的識別,需要了解一下幾點: 通過該驗證碼的識別動作為:點選並拖拽滑塊 - 滑動滑塊至缺口處 - 釋放滑鼠 該驗證碼增加了機器學習來識別拖動的軌跡,即:
JAVA爬蟲---驗證碼識別技術(一)
Python中有專門的影象處理技術比如說PIL,可以對驗證碼一類的圖片進行二值化處理,然後對圖片進行分割,進行畫素點比較得到圖片中的數字。這種方案對驗證碼的處理相對較少,運用相對普遍,很多驗證碼圖片可以通過這個方式得到識別,當然還需要一部分的降
圖片驗證碼識別教程技術原理分析
面對技術這片大海,我們都是一個漁民,三天打魚,兩天結網。我是把過去自己所掌握的所有技術總結成一張網,若一個技術乾貨分享的東西離我的網還太遠,我就會放棄去了解。因為如果不能連結到這張網中,