1. 程式人生 > >15分鐘破解網站驗證碼

15分鐘破解網站驗證碼

概述

  http://www.bugcode.cn/break_captcha.html

    很多開發者都討厭網站的驗證碼,特別是寫網路爬蟲的程式設計師,而網站之所以設定驗證碼,是為了防止機器人訪問網站,造成不必要的損失。現在好了,隨著機器學習技術的發展,機器識別驗證碼的問題比較好解決了。

樣本採集工具

  這裡我們採用wordpress的Really Simple CAPTCHA生成驗證碼的外掛,之所以選擇這個外掛,一個是它的安裝量很大,二個是因為它是開源的,我們可以利用它批量的生成驗證碼圖片。

目標估計

  我們通過demo網站得知,Really Simple CAPTCHA生成的是包含4個數字或者字母的圖片,通過閱讀原始碼得知,這個外掛還遮蔽了O和I這兩個比較容易混淆的字母,也就是說,還剩下32個字元,看來可以完成。  目前花費了兩分鐘。

依賴

  我們要用到以下的工具和庫。

  • python3
  • opencv
  • keras
  • tensorflow

建立樣本集

  為了達到目的,我們首先要準備樣本集,樣本如下:樣本

使用Really Simple CAPTCHA外掛的原始碼,我們很方便的批量生成10000個驗證碼圖片和對應的結果,待我們生成完成後,大概如下:樣本集

這地方大家可以根據自己的實際情況修改Really Simple CAPTCHA外掛的原始碼,來生成自己想要的樣本集。如果你覺著麻煩,也可以下載我生成好的。

  目前為止,我們花了五分鐘。

如何訓練

  我們現在有了樣本集了,我們可以直接那圖片和對應的結果直接進行神經網路的訓練。訓練只要我們的樣本夠多,最終也能達到我們想要的效果。

  但我們也可以採用更好的訓練方法,這個訓練方法使用更少的樣本資料,但是結果要比直接訓練的方法好很多,我想你已經猜到了,這個方法就是把圖片中的四個字元切割開,形成四個樣本。這方法之所以可行,是因為所有的驗證碼圖片都是4個字元的。split

  10000張圖片,一張一張手動用PS去切割,肯定不現實,而且由於圖片的橫向排列並不是等間距的,字元間的距離大小不一致,手動切割肯定不可能了。split2

  其實我們只要畫出一個矩形,保證矩形框裡只有字元就可以,然後從圖片中切出這樣的一個矩形,就形成了一個單個字元的圖片樣本。幸運的是,這個操作opencv已經幫我們實現了,opencv有個函式叫做findContours(),可以按照同樣色值的區域裁剪我們想要的矩形。- 首先準備一個圖片:

- 轉換圖片為黑白色。這樣有字元的地方為黑色,空白為白色,便於opencv裁剪。-接下來我們用opencv的findContours函式切割圖片。

  接下來,我們就把圖片從左到右進行切割,並存儲切割後的圖片,以及圖片對應的字元。但是實際操作的過程中,我發現一個問題,就是有時候兩個字元靠的太近,導致opencv在切割的時候,把兩個字元切割刀一個圖片裡了,比如:切割完的效果是:如果不解決這個問題,我們的樣本集就不準了,那訓練出來的模型也就不可能正確了。我的解決方法是,首先設定一個字元寬最大的畫素,如果超過這個畫素,則認為一個圖片中包含了兩個字元,然後我們選擇把這個圖片對半切割,分成兩個字元。例如:好,我們現在得到了一個驗證碼圖片對應的4個字元的圖片,現在我們把所有的樣本圖片都切割好,然後,把相同的字元對應的圖片放到一個資料夾,這麼做的目的是儘量多的找出同一個字元的多種樣式。結果如下:  到目前為止,我花了10分鐘。

訓練模型

  因為我們只是識別圖片對應的數字或者字母,所以我們不需要特別複雜的神經網路演算法。識別字符比識別小貓小狗的簡單多了。  我這地方使用卷積神經網路,two convolutional layers and two fully-connected layers。這地方對卷積神經網路演算法就不做詳細介紹,感興趣的同學,可以google學習一下。  訓練完成後,我們需要測試一下。15分鐘花完。

總結

整個過程看起來很簡單:- 從使用我們上述提到的外掛的wordpress網站上下載驗證碼圖片- 把圖片切割成包含單個字元的小圖片- 使用神經網路演算法訓練模型- 預測新的驗證碼圖片對應的字元

下面是我的測試:

程式碼

你可以從這得到完整的程式碼和示例圖片,你可以參照README來執行相關的程式。

轉載自我的部落格捕蛇者說

相關推薦

15分鐘破解網站驗證

概述   http://www.bugcode.cn/break_captcha.html     很多開發者都討厭網站的驗證碼,特別是寫網路爬蟲的程式設計師,而網站之所以設定驗證碼,是為了防止機器人訪問網站,造成不必要的損失。現在好了,隨著機器學習技術的發展,機器識別驗證碼的問題比較好解決了。 樣本採集

keras入門(三)搭建CNN模型破解網站驗證

專案介紹   在文章CNN大戰驗證碼中,我們利用TensorFlow搭建了簡單的CNN模型來破解某個網站的驗證碼。驗證碼如下: 在本文中,我們將會用Keras來搭建一個稍微複雜的CNN模型來破解以上的驗證碼。 資料集   對於驗證碼圖片的處理過程在本文中將不再具體敘

搭建CNN模型破解網站驗證!Python大法真的好!

專案介紹 在文章CNN大戰驗證碼中,我們利用TensorFlow搭建了簡單的CNN模型來破解某個網站的驗證碼。驗證碼如下:   網站驗證碼 在本文中,我們將會用Keras來搭建一個稍微複雜的CNN模型來破解以上的驗證碼。 資料集 對於驗證碼圖片的處理過程在本文

15 分鐘用 ML 破解一個驗證系統

人人都恨驗證碼——那些惱人的圖片,顯示著你在登陸某網站前得輸入的文字。設計驗證碼的目的是,通過驗證你是真實的人來避免電腦自動填充表格。但是隨著深度學習和計算機視覺的興起,現在驗證碼常常易被攻破。 我拜讀了 Adrian Rosebrock 寫的《Deep Learning fo

破解驗證登入網站~ing

何謂驗證碼? 驗證碼就是以圖片格式將文字、數字、符號表示出來,在登入網站、發表評論時,同時將這些資訊輸入,以防止某些程式惡意登入、刷貼等,但也影響了某些情況下的正常程式訪問。這些符號人眼很容易識別,但對計算機來說卻非常不易,從而達到防範惡意程式的目的。 驗證碼的原理 驗證碼無

【精華】PHP網站驗證不顯示的終結解決方案

brief 重新 pad enter 批量 list 展開 href lis PHP網站驗證碼不顯示,這個是個很基礎的PHP問題了,不過有點時候會比較讓開發者比較頭疼了。很多解決方案僅僅考慮到gd2,卻忽略了另外一個很重要的因素了,相信在了解本教程之後,驗證碼不顯示

picturebox加載圖片的三種方法與網站驗證的抓取

地址 ins 狀態機 加載 put itl title eof ner 第一種:(此方法比較笨) 在頁面上隱藏幾個需要改變頁面上圖片的picturebox,比如下面的picFrom 在需要改變圖片的方法處先定義: System.Resources.ResourceMa

python下調用pytesseract識別某網站驗證

XA odi cep targe string HR cas pen 就是 轉自:https://www.cnblogs.com/zhongtang/p/5560361.html 一、pytesseract介紹 1、pytesseract說明 pytessera

使用深度學習的CNN神經網路破解Captcha驗證

樣本資料的生成與處理: 我們先來看看mnist(一個手寫體數字圖片的資料集,有55000張0-9的手寫體數字的圖片)中圖片和圖片標籤的資料形式: 已知mnist資料集中的每張圖片是28x28畫素的灰度影象。每張圖片上是一個單獨的手寫體數字。 程式碼如下: from tensorf

破解滑動驗證(極驗)

from selenium.webdriver import ActionChains from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.support.ui im

python selenium接入打平臺破解豆瓣驗證登入

from selenium import webdriverimport requestsimport timeimport refrom chaojiying import Chaojiying_Clientfrom selenium.common.exceptions import NoSuchEleme

【Java分享】3分鐘接入簡訊驗證介面的全過程,只需3步。

簡訊驗證碼是目前使用者身份驗證最有效的手段,具有便捷和唯一性,是識別使用者身份最快速的方式。其實接入簡訊驗證碼也不是很麻煩和費時間的事情,按照我說的做,只需要大約3分鐘、3個步驟就輕鬆完成。 首先去簡訊平臺申請賬號,獲取介面地址和介面文件以及返回值。這都是接入簡訊驗證碼前的準備。

[TensorFlow深度學習深入]實戰二·使用CNN網路識別破解數字驗證

[TensorFlow深度學習深入]實戰二·使用CNN網路識別破解數字驗證碼 參考部落格。 在此基礎上做了小修改。 其中CNN網路部分仿照我們入門實戰六的內容,如果不太清楚CNN可以再去回顧一下。 本博文資料集。 程式碼部分 import os os.environ["KMP_D

網站驗證不顯示,報錯:無法向會話狀態伺服器發出會話狀態請求請。確保 ASP.NET State Service (ASP.NET 狀態服務)已啟動

解決方法:  在服務中啟用"ASP.NET State service"   解決步驟: 1.我的電腦》管理》服務和應用程式》服務》 2.找到 ASP.NET State service 或者 ASP.NET 狀態服務 設定為啟用 &

使用深度學習破解字元驗證(轉)

驗證碼是根據隨機字元生成一幅圖片,然後在圖片中加入干擾象素,使用者必須手動填入,防止有人利用機器人自動批量註冊、灌水、發垃圾廣告等等 。 驗證碼的作用是驗證使用者是真人還是機器人;設計理念是對人友好,對機器難。 上圖是常見的字元驗證碼,還有一些驗證碼使用提問的方式。

Python指令碼破解圖形驗證(tesserocr和pytesseract)

在學習之前,我們先了解OCR、tesseract、tesserocr、pytesseract和opencv這幾個跟圖片處理有關的庫。 OCR(Optical Character Recognition)光學字元識別,是指通過掃描字元,然後通過其形狀將其翻譯成電子文字的過程。 tesserac

呼叫第三方打平臺破解圖片驗證

雲打碼平臺處理驗證碼的實現流程: 對攜帶驗證碼的頁面資料進行抓取 可以將頁面資料中驗證碼進行解析,驗證碼圖片下載到本地 可以將驗證碼圖片提交給三方平臺進行識別,返回驗證碼圖片上的資料值 # 雲打碼平臺api import http.client, mimetypes, urllib, j

Python應用(一) 識別網站驗證以及識別演算法

00 識別涉及技術 驗證碼識別涉及很多方面的內容。入手難度大,但是入手後,可拓展性又非常廣泛,可玩性極強,成就感也很足。 驗證碼影象處理 驗證碼影象識別技術主要是操作圖片內的畫素點,通過對圖片的畫素點進行一系列的操作,最後輸出驗證碼影象內的每個字元的文字矩

如何使用reCaptcha(2.0版本)來做網站驗證

reCaptcha是Google開發的驗證碼工具。使用十分簡單,本文介紹的是其2.0版本的使用方法。 登陸你的Google賬戶,沒有的話是用不了的。在這裡來申請一對key ,如下圖 一個Google

破解滑動驗證(selenium, opencv)

概述 由於本人近期參加一個遊戲比賽,然後有個拉票的環節,票高者得人氣獎。又比較懶不想到處拉票麻煩別人。就想自己嘗試著破解驗證碼然後來達到刷票的目的。 這個也純屬娛樂,最後發現是不可行的。 最終目標:實現自動點選紅星,並且拖動完成驗證 自動點選並且獲取