close

文章來源出處:http://www.dotblogs.com.tw/joysdw12/archive/2013/06/08/captcha-cracked.aspx?fid=72135

前言

________________________________________

  這次來講個比較有趣的主題,就是該如何破解網路上那些防止機器人攻擊的圖形驗證碼,談到圖形驗證碼破解,想必各位嘴角一定微微上揚了吧 XD,看來學壞好像都比較有興趣一點,但其實知道破解的原理後,之後要做防範也比較清楚該如何處理了   主因 :P

 

  在開始破解前先來看一下基本上的破解原理與方法,可以先參考此篇 使用PHP对网站验证码进行破解 文章,文章中提到了破解圖形驗證碼有幾個基本步驟,如下:

1.     取出字模

2.     二值化

3.     計算特徵

4.     對照樣本

 

Step 1 取出字模

  首先取出字模就是將要破解的圖形驗證碼先抓取回來,而取得的字模圖片必須要包含所有會出現的文字,例如 0 - 9 的數字圖片,當有了字模後就能夠將字模進行二值化。

 

Step 2 二值化

  二值化是什麼? 二值化就是將數字字模轉換成 0 1 的結果,將圖片上數字的部分用 1 替換而 0 則代表背景,例如我有一張數字 3 的圖片,在經過二值化後就會變成以下結果。

000000000000000000000

000000011111100000000

000001110001110000000

000000000000111000000

000000000000110000000

000000011111100000000

000000000000110000000

000000000000111000000

000001110001110000000

000000011111000000000

000000000000000000000

 

Step 3 計算特徵

  當我們將圖片數字轉成二值化後,這些二值化的 01 代碼就變成了樣本庫,所以在計算特徵的步驟裡,就是要在產生驗證碼的頁面將驗證碼圖片取得,取得後因為驗證碼可能包含干擾元素,就必須要先去除干擾元素後將圖片二值化取得特徵。

 

Step 4 對照樣本

  最後的步驟就是要將第三步驟二值化的值拿去比對我們的樣本庫,通常在比對的時候一定會產生誤差值,例如以下轉換後的二進值:

000000000000000000000

000000011111100000000

000011110001111000000

000000000000111000000

000000000000110000000

000000011111100000000

000000000000110000000

000000000000111000000

000001110001110000000

000000011111000010000

000000000000000000000

 

  可以看到以上二進值紅色的 1 的部分就是所謂的噪點,因為圖片在不同的位置下所產生的圖片像素可能會不一樣,所以我們在對照樣本時可以設定一個允許容忍噪點的範圍,就是有點模糊比對的意思。

 

arrow
arrow

    Johnson峰 發表在 痞客邦 留言(0) 人氣()