BMP格式驗證碼圖片的破解。

      前幾天飯總在採集某網站數據時候被它的驗證碼攔住了,在範總自己折騰了一個晚上未果後問我有沒做過類似事情。之前自己也很少去研究驗證碼東西,都是找一個頂着用就是,從來沒去搞過破解什麼的。Google一番,原來BMP圖像直接可以讀取,一個像素是對應着一個數據的。因此思路出來了。BMP圖像的來源及介紹看這裏,而用C同學想研究它的數據存儲結構的看這裏

      BMP圖像包括這幾類數據:文件頭、位圖信息頭、顏色信息和位圖數據四部分組成。既然位圖數據即圖形數據能讀取出來,那麼任何一張驗證碼圖片裏面的某一個Code也就能讀出了,因爲它本身也是由程序生成,那麼我們就一定也能從圖片反過來分割圖片後找出圖片裏各個字符以及他們在BMP圖像裏面的一些參數出來。比如我找到的如下:

上面這些數據除了BMP圖片本身的高度和寬度可以程序讀出來以外,其他的都必須自己去分析需要破解的驗證圖片得出,而且所有參數單位爲像素(px)。比如我做的圖片分析如下:

有上面這張圖片的分析我想大家應該大體都知道怎麼去做驗證了。我的思路步驟爲下:

1.收集某驗證碼BMP圖片若干,然後仔細用PS或者其他圖片處理工具打開,做我上面這樣分析,得到該圖像的。

2.有了以上分析得到的圖片特徵數據,我們就可以很快的寫出以下功能函數。我是寫了一個類,包含方法接口如下:

 3.我們現在能得到一個BMP圖片裏的所有某個元素圖像的數據了,我們得到的位圖數據是這樣的:每個像素的數據都是存儲着他的RGB顏色值。比如255255255白色。有這些數據,我們經過處理就可以做匹配認證了。首先這一步我們需得到驗證碼圖片的所有元素的數據模板。比如某套驗證碼圖片的有5個字符圖像,包括0-9 A-Z這麼多,那麼我們可以先用getIndex(n)讀某一張上某一個index的元素圖像數據,因此我們還得先收集滿若干原始圖片,並保證這些圖片裏元素圖片全部都出現過,這樣我們就能採集到一個完整的元素圖像數據庫。這裏提醒下,一般驗證碼圖片都有些干擾像素啊什麼的,我們可以這樣處理,根據不同的BMP圖像裏面防干擾的條文來做,設置一箇中間點,低於的全設置爲0,而高於的都設置爲1.那麼我們最終一個像素的數據將是(111、110、001、101...)。採集元素位圖數據庫是一個體力活,要用到眼睛、N張圖片、手、以及不斷去修改讀取圖片的路勁、參數等O(∩_∩)O~

4.有的元素圖像數據庫,我們現在就可以高調的接受破解某張驗證圖片了,讀取圖片,然後一個循環讀取它的元素圖像,並與元素圖像數據庫裏面的去對比,判斷是否相同或者高深點算法判斷下有多大相似度,並果斷認定它是哪一個Code,一次循環下來就出結果啦,呵呵!

上完整代碼

readerFile.class.php

其中readFile.class.php裏面的$keyLib屬性爲上面提到的元素圖像數據庫。爲自己動手收集的數據!這裏是我要驗證的圖片的數據庫。可以另外做成配置文件形式。

do.php

 暈。。!CSDN不能上傳BMP格式的,於是我把後綴改下,你們懂的!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章