Python實(shí)現(xiàn)圖片滑動式驗(yàn)證識別方法
1 abstract
驗(yàn)證碼作為一種自然人的機(jī)器人的判別工具,被廣泛的用于各種防止程序做自動化的場景中。傳統(tǒng)的字符型驗(yàn)證安全性已經(jīng)名存實(shí)亡的情況下,各種新型的驗(yàn)證碼如雨后春筍般涌現(xiàn)。目前最常見的一種形式就是“滑動拼圖式”
2 內(nèi)容概述
關(guān)于滑動式驗(yàn)證,最早由國內(nèi)某網(wǎng)絡(luò)安全公司首次提出的行為式驗(yàn)證,以滑動拼圖解鎖的方式呈現(xiàn)在世人面前。然后大概過了好幾年之后,各種各樣的滑動式驗(yàn)證產(chǎn)品都出來了,那么這些看似一樣的產(chǎn)品,它們的安全性到底如何呢?
本文特意挑選出了一些后來者的小廠商的滑動式驗(yàn)證來做下實(shí)驗(yàn),僅從第一步的圖像學(xué)上分析一下安全性。因?yàn)槲业闹骷夹g(shù)路線是圖像學(xué),關(guān)于前端的js并不熟悉,所以就只在圖像學(xué)上點(diǎn)到即止即可。僅供會一些自動化技術(shù)的同學(xué)提供一些知識補(bǔ)充吧。
由于研究的實(shí)驗(yàn)對象實(shí)在是太簡單,所以本文涉及的一些圖像學(xué)的知識也不難,基本上python的初級選手就可以跑通本程序。僅供大家學(xué)習(xí)學(xué)習(xí)。
3 研究對象
某小站點(diǎn)上由小廠商提供的“滑動式驗(yàn)證”:
使用python寫一個(gè)簡單的爬蟲自動化腳本,將此網(wǎng)站上的驗(yàn)證碼資源多請求幾次,并保存到本地,觀查圖片特點(diǎn)。
一般情況下,這一步是必須的,多下載一些圖片,很多規(guī)律是可以一眼看出的。比如,從公開的頁面中,連續(xù)請求此驗(yàn)證的資源 100次,下載100張圖片后。
一眼看上去,此驗(yàn)證的圖片素材都只有一種模式,那么就放心了,因?yàn)檫@個(gè)問題就比較單一,而不是多模式下你必須要解決多個(gè)問題。
4 定性分析
將這種單一模式的圖片篩選一張出來,如下:
發(fā)現(xiàn)如下特點(diǎn):
和前端展示相關(guān)的圖片有:方塊位置提示圖A,小方塊B,完整背景圖C。
A圖完全是由B和C合成
顯然,設(shè)計(jì)這個(gè)驗(yàn)證圖片的人沒啥安全方面的經(jīng)驗(yàn),有如下兩個(gè)產(chǎn)品細(xì)節(jié)沒有注意:
對圖片沒做任何的特殊處理
對外公開提供了過多信息
于是使得識別此圖片的位置變得極其簡單。
5 定量分析
在前面一小節(jié)中,我們只是直觀的看到了這些圖片的一些特別,但是要解答這個(gè)題目,還需要進(jìn)行量化,量化后才能程序化,程序化后才能全自動化。
使用matplotlib工具打開此圖片。量化得到如下參數(shù):
圖片整體規(guī)格:w:240,h:450
由上到下分為三部分,每部分高度為150
6 求解圖片
很明顯,只要將第一張圖和第三張圖相應(yīng)的像素相減,神奇的事情就發(fā)生了:
“左上” 減去 “右下” 就得到 “左下”的結(jié)果。
這個(gè)時(shí)候,對x方向的R通道的像素點(diǎn)進(jìn)行累加統(tǒng)計(jì)。
得到如下的統(tǒng)計(jì)圖:
然后對這個(gè)曲線求一階導(dǎo)數(shù)或者只要發(fā)現(xiàn)有個(gè)突變值超過最大像素值的某百分比時(shí),即可得到最左邊的那個(gè)y方向突變點(diǎn)的位置。
到此為止,此圖片的位置已經(jīng)成功解出。
下面是相應(yīng)的python代碼:
import numpy as np ... def get_boundary(mask, axis, ratio=0.6): """ 對灰度圖的某個(gè)channel做像素統(tǒng)計(jì) """ 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): """ 根據(jù)分類出來的圖像,找到相應(yīng)的圖像位置 傳入二進(jìn)制的圖片,返回答案 :param img: :return: """ nd_img = np.array(img) w_pos = get_boundary(nd_img, 0) # 根據(jù)分布圖找到邊界位置 return w_pos
總結(jié)
以上所述是小編給大家介紹的Python實(shí)現(xiàn)圖片滑動式驗(yàn)證識別方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- python 模擬網(wǎng)站登錄——滑塊驗(yàn)證碼的識別
- Python破解BiliBili滑塊驗(yàn)證碼的思路詳解(完美避開人機(jī)識別)
- Python3爬蟲關(guān)于識別檢驗(yàn)滑動驗(yàn)證碼的實(shí)例
- Python3網(wǎng)絡(luò)爬蟲開發(fā)實(shí)戰(zhàn)之極驗(yàn)滑動驗(yàn)證碼的識別
- 使用Python的OpenCV模塊識別滑動驗(yàn)證碼的缺口(推薦)
- python爬蟲之驗(yàn)證碼篇3-滑動驗(yàn)證碼識別技術(shù)
- python驗(yàn)證碼識別教程之滑動驗(yàn)證碼
- 如何用python識別滑塊驗(yàn)證碼中的缺口
相關(guān)文章
基于Python實(shí)現(xiàn)文本文件轉(zhuǎn)Excel
Excel文件是我們常用的一種文件,在工作中使用非常頻繁。Excel中有許多強(qiáng)大工具,因此用Excel來處理文件會給我們帶來很多便捷。本文就來和大家分享一下Python實(shí)現(xiàn)文本文件轉(zhuǎn)Excel的方法,感興趣的可以了解一下2022-08-08關(guān)于Python常用模塊時(shí)間模塊time
這篇文章主要介紹了關(guān)于Python常用模塊時(shí)間模塊time,這個(gè)模塊是Python自帶的,我們不需要去下載,直接導(dǎo)入就可以使用,需要的朋友可以參考下2023-04-04python3+PyQt5實(shí)現(xiàn)拖放功能
這篇文章主要為大家詳細(xì)介紹了python3+PyQt5實(shí)現(xiàn)拖放功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-04-04通過Python模塊filecmp 對文件比較的實(shí)現(xiàn)方法
這篇文章主要介紹了通過Python模塊filecmp 對文件比較的實(shí)現(xiàn)方法,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-06-06Python實(shí)現(xiàn)的科學(xué)計(jì)算器功能示例
這篇文章主要介紹了Python實(shí)現(xiàn)的科學(xué)計(jì)算器功能,涉及Python基于數(shù)值運(yùn)算與事件響應(yīng)實(shí)現(xiàn)科學(xué)計(jì)算器功能相關(guān)操作技巧,需要的朋友可以參考下2017-08-08