欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用PHP對網(wǎng)站驗證碼進(jìn)行破解

 更新時間:2015年09月17日 11:49:42   投稿:lijiao  
這篇文章主要介紹了如何使用PHP對網(wǎng)站驗證碼進(jìn)行破解,需要的朋友可以參考下

驗證碼的功能一般是防止使用程序惡意注冊、暴力破解或批量發(fā)帖而設(shè)置的。所謂驗證碼,就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號,生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識別其中的驗證碼信息,輸入表單提交網(wǎng)站驗證,驗證成功后才能使用某項功能。學(xué)習(xí)驗證碼的破解/識別技術(shù),不僅可以知道驗證碼的原理,而且可以讓你知道怎樣才能防止驗證碼被破解。

最常見的驗證碼主要有以下幾種:

1、四位數(shù)字,隨機(jī)的一數(shù)字字符串,最原始的驗證碼,驗證作用幾乎為零。
2、隨機(jī)數(shù)字圖片驗證碼。圖片上的字符比較中規(guī)中矩,有的可能加入一些隨機(jī)干擾素,還有一些是隨機(jī)字符顏色,驗證作用比上一個好。沒有基本圖形圖像學(xué)知識的人,不可破!
3、各種圖片格式的隨機(jī)數(shù)字+隨機(jī)大寫英文字母+隨機(jī)干擾像素+隨機(jī)位置。
4、漢字是注冊目前最新的驗證碼,隨機(jī)生成,打起來更難了,影響用戶體驗,所以,一般應(yīng)用的比較少。
為簡單起見,破解說明主要針對是第2種類型的,先來看看網(wǎng)上常見的這種驗證碼的圖片:

  • 第一種,最容易,圖片背景和數(shù)字都使用相同的顏色,字符規(guī)整,字符位置統(tǒng)一。
  • 第二種,看似不容易,其實仔細(xì)研究會發(fā)現(xiàn)其規(guī)則,背景色和干擾素?zé)o論怎么變化,驗證字符字符規(guī)整,顏色相同,所以排除干擾素非常容易,只要是非字符色素全部排除即可。
  • 第三種,看似更復(fù)雜,處理上面提到背景色和干擾素一直變化外,驗證字符的顏色也在變化,并且各個字符的顏色也各不相同。
  • 第四種,除了第三個圖片上提到的特征外,又在文字上加了兩條直線干擾率,看似困難其實,很容易去掉。

驗證碼識別一般分為以下幾個步驟:

1、取出字模 識別驗證碼,畢竟不是專業(yè)的OCR識別,并且,由于各個網(wǎng)站的驗證碼各不相同,所以,最常見的方法就是就是建立這個驗證碼的特征碼庫。去字模時,我們需要多下載幾張圖片,使這些圖片中,包括所有的字符,我們這里的字母只有圖片,所以,只要收集到包括0-9的圖片即可。
2、二值化 二值化就是把圖片上的驗證數(shù)字上每個象素用一種數(shù)字表示1,其他部分用0表示。這樣就可以計算出每個數(shù)字字模,記錄下這些字模來,當(dāng)作key即可。
3、計算特征 把要識別的圖片,進(jìn)行二值化,得到圖片特征。
4、對照樣本 把步驟3種的圖片特征碼和驗證碼的字模進(jìn)行對比,得到驗證圖片上的數(shù)字。
使用目前這種方法,對驗證碼的識別基本上可以做到100%。

通過以上步驟,您可能說了,并沒有發(fā)現(xiàn)如何取出干擾素?。∑鋵嵢〕龈蓴_素的方法很簡單,干擾素的一個重要特征是,不能影響驗證碼的顯示效果,所以制作干擾素時它的RGB可能低于或者高于某個特定值,比如我給的例子中的圖片,干擾素的RGB各項值是不會超過125的,所以,這樣我們就很容易去掉干擾素了。

簡單的驗證碼只有數(shù)字和字母組成,格式統(tǒng)一,每次出現(xiàn)位置固定。下面繼續(xù)深入研究識別驗證碼,這次需要識別的目標(biāo)是:驗證碼有字符和數(shù)字組成,驗證碼存在旋轉(zhuǎn)(可能左右都旋轉(zhuǎn)),位置不固定,存在字符與字符之間的粘連,且驗證碼有更強(qiáng)的干擾素。

我們以下圖為例進(jìn)行講解。

第一步:二值化。把驗證碼的部分用 1 表示,背景部分用 0 表示出來,識別方法很簡單,我們打印出驗證碼整張圖片的 RGB ,然后分析其規(guī)律即可,通過 RGB 碼,我們很容易分辨出上面這張圖片的 R 值大于 120 , G 和 B 的值小于 80 ,所以依據(jù)這個規(guī)則我們很容易把上面的圖片二值化。

再來看看上面的第三種驗證碼圖片

剛看上去,感覺很復(fù)雜。驗證碼的圖片每次背景色都不相同,且不是單色,各個驗證碼數(shù)字的顏色每次也各不相同。貌似很難二值化,其實我們打印出其 RGB 值很容易就發(fā)現(xiàn)。無論驗證數(shù)字顏色如何變化,該數(shù)字的 RGB 值總有一個值小于 125 ,所以通過如下判斷 $rgbarray['red'] < 125 || $rgbarray['green']<125|| $rgbarray['blue'] < 125 我們就很容易分辨出哪里是數(shù)字,哪里是背景。

我們能夠找到這些規(guī)律的原因是,在制作驗證碼的干擾素時,為了使干擾素不影響數(shù)字的顯示效果,必須使用干擾素的 RGB 和數(shù)字 RGB 相互獨(dú)立,互不干擾。只要懂得這個規(guī)律,我們就很容易實現(xiàn)二值化。

我們找到的 120 , 80 , 125 等閾值,可能和實際的 RGB 有出入,所以,有時二值化后,會有部分地方出現(xiàn) 1 ,對于驗證碼上固定位置顯示數(shù)字,這種干擾沒有太大意義。但是對于驗證碼位置不確定的圖片來說,在我們切割字符時,很可能造成干擾。所以,在二值化后要進(jìn)行去噪處理。

第二步:去噪處理。去噪的原理很簡單,就是把孤立的有效的值去掉,如果噪點比較高,要求的效率也比較高的話,這里面也有很多工作要做。幸好這里我們不要求這么高深,我們使用最簡單的方法就可以,如果一個點為 1 則判斷這個點的上下左右上左上右下左下右 8 個方位上數(shù)字是否為 1 ,如果不為 1 ,就認(rèn)為是一個燥點,直接設(shè)置為 1 即可。

如上圖所示,我們使用此方法很容易發(fā)現(xiàn)紅色方框部分的 1 為燥點,直接設(shè)置為 1 即可。在判斷時我們使用了一個技巧,有時候的噪點可能是兩個連續(xù)的 1 ,所以我們計算這個點的 8 個方向上的值之和,最后我們判斷他們的和是否小于特定的閾值。

第三步:切割字符。切割字符的方法有很多種,這里采用最簡單的一種,先垂直方向切割成為字符,然后在水平方向去掉多于的 0000 ,如下圖

第一步切割紅線部分,第二步切割藍(lán)線部分,這樣就可以得到獨(dú)立的字符了。但是像下面這種情況

按上面的方法會把 dw 字符切割成一個字符,這是錯誤的切割,所以這里我們涉及到粘連字符的切割。

第四步:粘連字符切割。制作驗證碼時,規(guī)則字符的粘連很容易分割開,如果字符本身有縮放,變形就很難處理,經(jīng)過分析,我們可以發(fā)現(xiàn),上面的字符粘連屬于很簡單的方式,只是規(guī)則字符的粘連,所以處理這種情況,我們也使用很簡單的處理方式。當(dāng)完成分割操作后,我們不能馬上確定分割的部分就為一個字符,要進(jìn)行驗證,驗證的關(guān)鍵因素就是,切割下來的字符的寬是否大于閾值,這個閾值的取舍標(biāo)準(zhǔn)是,一個字符無論怎么旋轉(zhuǎn)變形都不會大于這個閾值,所以,如果我們切割的塊大于這個閾值,就可以認(rèn)為這是一個粘連字符;如果大于兩個閾值之和,就認(rèn)為是三個字符粘連,以此類推。知道這個規(guī)則后,切割粘連字符也就很簡單了。如果我們發(fā)現(xiàn)是粘連字符塊,直接平分這個塊為兩個或者多個新的塊就可以。當(dāng)然為了更好的還原字符,我一般都采用平分 +1 , -1 對字符塊的部分進(jìn)行適當(dāng)?shù)难a(bǔ)充。

第五步:匹配字符。對于旋轉(zhuǎn)字符的特征碼建立,有很多種方法,這里就不做深入研究了。我這里使用的最簡單的方式,為所有字符的所有情況建立匹配庫,所以在我提供的代碼種增加了 study 操作,其目的就是,先有人手工識別圖片的驗證碼,然后通過 study 方法,寫入特征碼庫。這樣寫入的圖片數(shù)據(jù)越多,驗證識別的準(zhǔn)確行也就越高。

經(jīng)過以上步驟,我們基本上可以識別現(xiàn)在互聯(lián)網(wǎng)上大部分的驗證碼,這里我們都是使用的最簡單的方法,沒有使用任何 OCR 知識。

另外制作驗證碼的一些建議:

對于識別驗證碼的程序來說,最難得部分是驗證字符的切割和特征碼的建立,而國內(nèi)很多程序員只做驗證碼時,總是喜歡在驗證碼加很多干擾素,干擾線,影響效果不說,還達(dá)不到很好的效果;所以,要想使自己驗證碼難于本識別,只做下面兩點就夠了

1、字符粘連,最好所有的字符都有粘連的部分;
2、不要使用規(guī)格字符,驗證碼的各個部分使用不同比例的縮放或者旋轉(zhuǎn)。
只要做到這兩點,或者這兩點的變形,識別程序就很難識別。

以上就是本文的全部內(nèi)容:使用PHP對網(wǎng)站驗證碼進(jìn)行破解,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • php實現(xiàn)的mongodb操作類實例

    php實現(xiàn)的mongodb操作類實例

    這篇文章主要介紹了php實現(xiàn)的mongodb操作類,較為詳細(xì)的分析了php針對mongodb數(shù)據(jù)庫操作的各種常用技巧,并將其封裝進(jìn)一個完整的類文件中以便于調(diào)用,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • 詳解PHP實現(xiàn)異步調(diào)用的4種方法

    詳解PHP實現(xiàn)異步調(diào)用的4種方法

    這篇文章主要為大家詳細(xì)介紹PHP實現(xiàn)異步調(diào)用的4種方法,感興趣的小伙伴們可以參考一下
    2016-03-03
  • PHP 命名空間原理與用法詳解

    PHP 命名空間原理與用法詳解

    這篇文章主要介紹了PHP 命名空間,結(jié)合實例形式詳細(xì)分析了PHP 命名空間概念、功能、原理、用法及操作注意事項,需要的朋友可以參考下
    2020-04-04
  • PHP實現(xiàn)頁面跳轉(zhuǎn)的幾種常見方式總結(jié)

    PHP實現(xiàn)頁面跳轉(zhuǎn)的幾種常見方式總結(jié)

    PHP實現(xiàn)頁面跳轉(zhuǎn)有多種方式,常用的包括使用header()函數(shù)、使用JavaScript進(jìn)行跳轉(zhuǎn)、使用meta標(biāo)簽、使用超鏈接等,下面分別詳細(xì)介紹這幾種方式,并舉例說明,需要的朋友可以參考下
    2023-11-11
  • PHP壓縮html網(wǎng)頁代碼(清除空格,換行符,制表符,注釋標(biāo)記)

    PHP壓縮html網(wǎng)頁代碼(清除空格,換行符,制表符,注釋標(biāo)記)

    如果提高網(wǎng)頁加載速度,需要怎么優(yōu)化是一個問題,yahoo曾經(jīng)搞了一個優(yōu)化36條。其實網(wǎng)頁優(yōu)化的方法還是很多很多的。下面扯一下關(guān)于減小頁面體積來提高前端加載速度的方法
    2012-04-04
  • php讓圖片可以下載的代碼

    php讓圖片可以下載的代碼

    讓圖片也能像附件一樣的下載,不多說了。請看下面的程序!
    2008-09-09
  • PHP進(jìn)階學(xué)習(xí)之命名空間基本用法分析

    PHP進(jìn)階學(xué)習(xí)之命名空間基本用法分析

    這篇文章主要介紹了PHP進(jìn)階學(xué)習(xí)之命名空間基本用法,簡單分析了php命名空間的基本概念、功能并結(jié)合實例形式描述了命名空間的用法與相關(guān)操作注意事項,需要的朋友可以參考下
    2019-06-06
  • PHP程序員編程注意事項

    PHP程序員編程注意事項

    PHP程序員最易犯10種錯誤所以下面的好多都是我們需要注意的地方PHP是個偉大的web開發(fā)語言,靈活的語言,但是看到php程序員周而復(fù)始的犯的一些錯誤。我做了下面這個列表,列出了PHP程序員經(jīng)常犯的10中錯誤,大多數(shù)和安全相關(guān)??纯茨惴噶藥追N
    2008-04-04
  • php win下Socket方式發(fā)郵件類

    php win下Socket方式發(fā)郵件類

    php smtp發(fā)送郵件Scoket類代碼,大家可以參考下。
    2009-08-08
  • phpstorm斷點調(diào)試方法圖文詳解

    phpstorm斷點調(diào)試方法圖文詳解

    這篇文章主要介紹了phpstorm斷點調(diào)試方法,結(jié)合圖文形式詳細(xì)分析了phpstorm斷點調(diào)試的基本配置方法、使用技巧與注意事項,需要的朋友可以參考下
    2023-04-04

最新評論