0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

馬哥Linux運(yùn)維 ? 2018-01-22 09:15 ? 次閱讀

讓我們一起攻破世界上最流行的WordPress的驗(yàn)證碼插件每個(gè)人都討厭驗(yàn)證碼——在你被允許訪問一個(gè)網(wǎng)站之前,你總被要求輸入那些煩人的圖像中所包含的文本。驗(yàn)證碼被設(shè)計(jì)成,以驗(yàn)證你是一個(gè)真正的人的方式,來防止電腦自動(dòng)填寫表單。但是隨著深度學(xué)習(xí)計(jì)算機(jī)視覺的興起,它們現(xiàn)在往往很容易被攻破。我在讀Adrian Rosebrock的優(yōu)秀的著作《Python計(jì)算機(jī)視覺深度學(xué)習(xí)》。在書中,Adrian簡單地描述了他如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼:

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

Adrian沒有訪問生成驗(yàn)證碼圖片的應(yīng)用的源代碼的權(quán)限。為了破解這個(gè)系統(tǒng),他不得不下載成百上千個(gè)示例圖像并手動(dòng)解答它們,用以訓(xùn)練他的深度學(xué)習(xí)系統(tǒng)。但是如果我們想打破一個(gè)開放源代碼的驗(yàn)證碼系統(tǒng),將會(huì)怎么樣?我去wordpress.org插件注冊表搜索“驗(yàn)證碼”。最靠前的結(jié)果是一個(gè)叫“真正簡單的驗(yàn)證碼”的插件,有超過100萬個(gè)活躍安裝:

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

并且最好的一點(diǎn)是,它開源!因?yàn)槲覀冇猩沈?yàn)證碼的源代碼,那么這應(yīng)該是很容易破解的。為了讓事情更有挑戰(zhàn)性,讓我們給自己一個(gè)時(shí)間限制。我們是否能夠在15分鐘內(nèi)破解這個(gè)驗(yàn)證碼系統(tǒng)?讓我們試試看!重要提示:這絕不是針對“真正簡單的驗(yàn)證碼”這個(gè)插件或它的作者的批評(píng)。插件作者本人也說,這個(gè)插件不再安全,建議您使用其他東西。這只是一個(gè)快速而有趣的技術(shù)挑戰(zhàn)。但是如果你是剩下的100萬個(gè)用戶中的一個(gè),也許你應(yīng)該切換到其他插件:)

挑戰(zhàn)開始

為了打造一個(gè)進(jìn)攻計(jì)劃,讓我們先來看看這個(gè)插件會(huì)生成哪種類型的圖片。在演示站點(diǎn)上,我們看到這個(gè):

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

好的,所以驗(yàn)證碼圖像似乎是四個(gè)字母。讓我們在PHP源代碼中驗(yàn)證這一點(diǎn):

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

是的,它會(huì)產(chǎn)生一個(gè)四字母的驗(yàn)證碼,并采用隨機(jī)組合的四種不同的字體。我們可以看到,它從不在代碼中使用“O”或“I”,以避免用戶混淆。這給了我們總共32個(gè)可能需要識(shí)別的字母和數(shù)字。沒問題!到目前為止時(shí)間過去:2分鐘。

我們的工具集

在我們進(jìn)一步討論之前,讓我們說一下為了解決這個(gè)問題我們將會(huì)用到的工具:Python3Python是一種非常有趣的編程語言,它有很好的機(jī)器學(xué)習(xí)和計(jì)算機(jī)視覺庫。OpenCVOpenCV是一種流行的計(jì)算機(jī)視覺和圖像處理框架。我們將使用OpenCV來處理驗(yàn)證碼圖像。它有一個(gè)Python應(yīng)用接口,因此我們可以直接從Python中使用它。KerasKeras是一個(gè)由Python寫的深度學(xué)習(xí)的框架。它可以使我們用最少的代碼,方便地定義、訓(xùn)練和使用深層神經(jīng)網(wǎng)絡(luò)。TensorFlowTensorFlow是谷歌的機(jī)器學(xué)習(xí)庫。我們會(huì)在Keras中寫代碼,但Keras并沒有真正實(shí)現(xiàn)神經(jīng)網(wǎng)絡(luò)的邏輯本身,它其實(shí)是在后臺(tái)調(diào)用谷歌的TensorFlow進(jìn)行計(jì)算。好,現(xiàn)在讓我們回到挑戰(zhàn)!

創(chuàng)造我們的數(shù)據(jù)集

訓(xùn)練任何機(jī)器學(xué)習(xí)系統(tǒng),我們都需要訓(xùn)練數(shù)據(jù)集。破解一個(gè)驗(yàn)證碼系統(tǒng),我們則需要訓(xùn)練數(shù)據(jù)看起來像這樣:

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

這是唯一我不會(huì)給你示例代碼的部分。我們這樣做是為了教育,我不想讓你真的去黑WordPress網(wǎng)站。不過,我會(huì)給你我最后生成的這10000張圖像,以便你可以重復(fù)我的結(jié)果。到目前為止時(shí)間過去:5分鐘。

簡化問題

現(xiàn)在我們有了訓(xùn)練數(shù)據(jù),我們可以直接用它來訓(xùn)練神經(jīng)網(wǎng)絡(luò):

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

有足夠的訓(xùn)練數(shù)據(jù),這種粗暴的方法甚至也行得通?-?但我們可以使問題更容易解決。問題越簡單,訓(xùn)練數(shù)據(jù)越少,計(jì)算資源消耗就越少。畢竟我們只有15分鐘!幸運(yùn)的是,驗(yàn)證碼圖像總是由四個(gè)字母組成。如果我們能用某種方式把圖像分割開來,這樣每一個(gè)字母都是一個(gè)獨(dú)立的圖像,那么我們只需要訓(xùn)練神經(jīng)網(wǎng)絡(luò)一次識(shí)別一個(gè)字母:

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

我沒有時(shí)間瀏覽10000個(gè)訓(xùn)練圖像,并在Photoshop中手動(dòng)將它們分割成單獨(dú)的圖像。這將需要幾天,而我只剩下10分鐘了。而且我們不能將圖像分成四個(gè)相同大小的塊,因?yàn)轵?yàn)證碼會(huì)將這些字母隨機(jī)放置在不同的水平位置:

每個(gè)圖像中的字母隨機(jī)放置,使分割圖像更難一些。

幸運(yùn)的是,我們?nèi)匀豢梢宰詣?dòng)執(zhí)行此操作。在圖像處理中,我們經(jīng)常需要檢測具有相同顏色的像素團(tuán)。這些連續(xù)像素團(tuán)周圍的邊界被稱為輪廓。OpenCV有一個(gè)內(nèi)置的findContours()函數(shù),可以用來檢測這些連續(xù)的區(qū)域。那么我們將從一個(gè)原始的驗(yàn)證碼圖像開始:

然后,我們將圖像轉(zhuǎn)換為純黑白(這稱為閾值設(shè)定),這樣就很容易找到連續(xù)的區(qū)域:

接下來,我們將使用OpenCV的findContours()函數(shù)來檢測圖像中各個(gè)包含相同顏色像素的連續(xù)團(tuán):

那么只需將每個(gè)區(qū)域保存為一個(gè)單獨(dú)的圖像文件即可。而且由于我們知道每個(gè)圖像應(yīng)該包含從左到右的四個(gè)字母,所以我們可以使用這些知識(shí)來標(biāo)記字母。只要我們按順序保存它們,我們能夠用適當(dāng)?shù)淖帜该Q保存每個(gè)字母圖像。但是等等 —— 我看到一個(gè)問題! 有時(shí)候驗(yàn)證碼有這樣的重疊字母:

這意味著我們最終將提取將兩個(gè)字母拼湊在一起的區(qū)域:

如果我們不處理這個(gè)問題,我們最終會(huì)創(chuàng)建糟糕的訓(xùn)練數(shù)據(jù)。我們需要解決這個(gè)問題,以免我們不小心讓機(jī)器把這兩個(gè)相連的字母識(shí)別為一個(gè)字母。

我們將把任何寬度比高度還長的區(qū)域?qū)Π敕珠_,并把它當(dāng)作兩個(gè)字母。這是很粗暴,但這么處理對識(shí)別這些驗(yàn)證碼依然行得通。

現(xiàn)在我們有了一種提取單個(gè)字母的方法,讓我們在所有的CAPTCHA圖像上運(yùn)行它。目標(biāo)是收集每個(gè)字母的不同變化。我們可以將每個(gè)字母保存在自己的文件夾中。下面是我提取所有字母后,我的“W”文件夾的樣子:

從我們的10000個(gè)驗(yàn)證碼圖像中提取的一些“W”字母。我一共得到了1147個(gè)不同的“W”圖像。到目前為止時(shí)間過去:10分鐘。

創(chuàng)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)

由于我們只需要識(shí)別單個(gè)字母和數(shù)字的圖像,我們不需要一個(gè)非常復(fù)雜的神經(jīng)網(wǎng)絡(luò)架構(gòu)。識(shí)別字母比識(shí)別諸如貓和狗的圖片這樣的復(fù)雜圖像要容易得多。我們將使用具有兩個(gè)卷積層和兩個(gè)完全連接層的簡單卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu):

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

如果你想知道更多關(guān)于卷積神經(jīng)網(wǎng)絡(luò)是如何工作的,為什么他們被用作圖像識(shí)別非常理想,請查看Adrian的書或我以前的文章。用Keras定義這個(gè)神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)只需要使用幾行代碼:

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

現(xiàn)在,我們可以開始訓(xùn)練它了!

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

用訓(xùn)練數(shù)據(jù)集訓(xùn)練10次后,我們達(dá)到了近100%的準(zhǔn)確度?,F(xiàn)在,只要我們想,我們應(yīng)該能夠自動(dòng)繞過這個(gè)驗(yàn)證碼了!我們做到了!到目前為止時(shí)間過去:15分鐘。(~!)

使用訓(xùn)練的模型破解驗(yàn)證碼

現(xiàn)在,我們有一個(gè)訓(xùn)練有素的神經(jīng)網(wǎng)絡(luò),用它來破解真正的驗(yàn)證碼非常簡單:1.從使用該WordPress插件的網(wǎng)站抓取真實(shí)的驗(yàn)證碼圖像。2.使用我們用來創(chuàng)建訓(xùn)練數(shù)據(jù)集的相同方法,將驗(yàn)證碼圖像分解為四個(gè)單獨(dú)的字母圖像。3.要求我們的神經(jīng)網(wǎng)絡(luò)對每個(gè)字母圖像做一個(gè)單獨(dú)的預(yù)測。4.使用四個(gè)預(yù)測字母作為驗(yàn)證碼的答案。5.愉快的玩耍吧以下是我們的模型如何解碼真正的驗(yàn)證碼

或者從命令行

簡單地描述了如何用機(jī)器學(xué)習(xí)繞過E-ZPass New York網(wǎng)站的驗(yàn)證碼

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 計(jì)算機(jī)視覺
    +關(guān)注

    關(guān)注

    8

    文章

    1685

    瀏覽量

    45810
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8306

    瀏覽量

    131838
  • python
    +關(guān)注

    關(guān)注

    53

    文章

    4752

    瀏覽量

    84066
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5422

    瀏覽量

    120587

原文標(biāo)題:Python破解驗(yàn)證碼,只要15分鐘就夠了!

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    無法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。

    `無法驗(yàn)證郵箱,總是提示驗(yàn)證碼錯(cuò)誤,驗(yàn)證碼明明是正確的。是不是系統(tǒng)的bug?`
    發(fā)表于 05-12 10:41

    一文解析驗(yàn)證碼與打平臺(tái)的攻防對抗

    1、驗(yàn)證碼與打平臺(tái)的攻防對抗  眾所周知,驗(yàn)證碼的出現(xiàn)是為了區(qū)分人和機(jī)器,但隨著科技的發(fā)展,黑產(chǎn)從業(yè)者的可圖之利增多,驗(yàn)證碼的戰(zhàn)場也進(jìn)入了
    發(fā)表于 09-28 11:02

    平臺(tái)是如何高效的破解市面上各家驗(yàn)證碼平臺(tái)的各種形式驗(yàn)證碼的?

    ,比如說引入機(jī)器學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)等人工智能相關(guān)技術(shù)來智能識(shí)別圖片中的驗(yàn)證碼要素,提高識(shí)別驗(yàn)證要素的準(zhǔn)確率等。以下是某個(gè)打平臺(tái)相關(guān)人工智能技術(shù)
    發(fā)表于 11-01 15:21

    C#教程之中文驗(yàn)證碼

    C#教程之中文驗(yàn)證碼,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 11:13 ?6次下載

    多樣變換的手寫驗(yàn)證碼自動(dòng)識(shí)別算法

    研究驗(yàn)證碼自動(dòng)識(shí)別技術(shù)可以進(jìn)一步提升人識(shí)別驗(yàn)證碼的可讀性,增強(qiáng)機(jī)器識(shí)別的難度,從而提高網(wǎng)絡(luò)安全性。針對目前提出的驗(yàn)證碼識(shí)別方法基本都是采用光學(xué)字符識(shí)別(OCR)方法對
    發(fā)表于 12-20 14:14 ?0次下載

    SQLyog_12.4.1_帶驗(yàn)證碼

    SQLyog_12.4.1_帶驗(yàn)證碼.rar
    發(fā)表于 04-12 21:03 ?22次下載

    如何利用機(jī)器學(xué)習(xí)破解驗(yàn)證碼的源代碼教程

    驗(yàn)證碼的設(shè)計(jì)是為了防止計(jì)算機(jī)自動(dòng)填寫表格,驗(yàn)證你是一個(gè)真實(shí)的“人”。但隨著深度學(xué)習(xí)和計(jì)算機(jī)視覺的興起,現(xiàn)在他們往往容易被擊敗。
    的頭像 發(fā)表于 04-30 17:42 ?5732次閱讀
    如何利用<b class='flag-5'>機(jī)器</b><b class='flag-5'>學(xué)習(xí)</b>破解<b class='flag-5'>驗(yàn)證碼</b>的源代碼教程

    以一個(gè)真實(shí)網(wǎng)站驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的驗(yàn)證碼識(shí)別

    很多網(wǎng)站登錄都需要輸入驗(yàn)證碼,如果要實(shí)現(xiàn)自動(dòng)登錄就不可避免的要識(shí)別驗(yàn)證碼。本文以一個(gè)真實(shí)網(wǎng)站驗(yàn)證碼為例,實(shí)現(xiàn)了基于一下KNN的
    的頭像 發(fā)表于 12-24 17:27 ?7666次閱讀

    如何使用Python機(jī)器學(xué)習(xí)解決驗(yàn)證碼的資料說明

    寫爬蟲有一個(gè)繞不過去的問題就是驗(yàn)證碼,現(xiàn)在驗(yàn)證碼分類大概有4種: 圖像類 滑動(dòng)類 點(diǎn)擊類 語音類
    的頭像 發(fā)表于 05-03 13:43 ?2220次閱讀

    驗(yàn)證碼層出不窮?試試這個(gè)自動(dòng)跳過驗(yàn)證碼的工具

    目前網(wǎng)絡(luò)上越來越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來無可厚非;但是驗(yàn)證碼已經(jīng)變得越來越過分,別說機(jī)器人了,連人
    的頭像 發(fā)表于 11-15 10:42 ?5807次閱讀

    驗(yàn)證碼太麻煩,自動(dòng)跳過驗(yàn)證碼神器試一試

    目前網(wǎng)絡(luò)上越來越多使用驗(yàn)證碼了,驗(yàn)證碼的本意是阻止機(jī)器刷流量擠占服務(wù)器資源,這本來無可厚非;但是驗(yàn)證碼已經(jīng)變得越來越過分,別說機(jī)器人了,連人
    的頭像 發(fā)表于 11-15 11:15 ?9989次閱讀

    爬蟲實(shí)現(xiàn)目標(biāo)網(wǎng)站驗(yàn)證碼登陸

    在爬蟲訪問目標(biāo)網(wǎng)站的過程中,很多網(wǎng)站為了避免被惡意訪問,需要設(shè)置驗(yàn)證碼登錄,這樣是為了避免非人類的訪問。今天我們學(xué)習(xí)下如何使用Python爬蟲實(shí)現(xiàn)驗(yàn)
    發(fā)表于 12-11 15:27 ?2331次閱讀

    帶帶弟弟OCR通用驗(yàn)證碼識(shí)別SDK免費(fèi)開源版

    在使用爬蟲登錄網(wǎng)站的時(shí)候,經(jīng)常輸入用戶名和密碼后會(huì)遇到驗(yàn)證碼,簡單一點(diǎn)的有字母驗(yàn)證碼,復(fù)雜一點(diǎn)的有滑塊驗(yàn)證碼,點(diǎn)選文章和點(diǎn)選圖片
    的頭像 發(fā)表于 03-30 17:26 ?4493次閱讀

    驗(yàn)證碼到底在驗(yàn)證啥?聊一聊驗(yàn)證碼是怎么為難我們?nèi)祟惖?/a>

    在文章開頭,老狐先給大家玩一個(gè)驗(yàn)證碼的游戲,猜出圖中驗(yàn)證碼字母。
    的頭像 發(fā)表于 08-12 10:25 ?1886次閱讀
    <b class='flag-5'>驗(yàn)證碼</b>到底在<b class='flag-5'>驗(yàn)證</b>啥?聊一聊<b class='flag-5'>驗(yàn)證碼</b>是怎么為難我們?nèi)祟惖? />    </a>
</div>                            <div   id=

    Java 中驗(yàn)證碼的使用

    今天我們講一下在 Java 中驗(yàn)證碼的使用。 驗(yàn)證碼生成 本效果是利用easy-captcha工具包實(shí)現(xiàn),首先需要添加相關(guān)依賴到pom.xml中,代碼如下: com .github.whvcse
    的頭像 發(fā)表于 09-25 11:11 ?795次閱讀
    Java 中<b class='flag-5'>驗(yàn)證碼</b>的使用