聞宏強 周華 陸澄?!〖居罒?/p>
摘 要
隨著國內(nèi)一些大型網(wǎng)站頻頻突破驗證碼防護,本文試圖通過闡述驗證碼基本知識、二值化處理、字符分割、字庫校正等內(nèi)容,使網(wǎng)站開發(fā)人員能更好的了解攻擊者的常用技術(shù),并幫助設(shè)計出更好的驗證碼,以此來提高網(wǎng)站驗證碼的整體水平。
【關(guān)鍵詞】驗證碼 識別 字符分割 二值化
1 驗證碼概念
驗證碼是一種區(qū)分用戶是計算機還是人的公共全自動程序,可以防止惡意破解密碼、刷票、論壇灌水,可有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。
2 驗證碼識別流程
驗證碼識別包括:圖像采集、圖像預(yù)處理、圖像分割、樣本訓(xùn)練、圖像識別等內(nèi)容。驗證碼圖像采集就是直接通過HTTP抓取HTML,然后分析出圖片的URL,進行保存或下載。圖像預(yù)處理就是對圖像進行去噪、二值化處理,找出文字所在的區(qū)域。圖像分割就是對特定區(qū)域包括的文字進行分割。樣本訓(xùn)練就是通過人工挑選具有代表性的圖片進行學(xué)習(xí)和訓(xùn)練。圖像識別對待輸入的圖片進行識別,驗證算法或程序的可靠性。
2.1 圖像采集
以C#代碼為列獲取驗證碼圖片內(nèi)容信息,其中mshtml命名空間能對WebBrowser空間內(nèi)容進行讀取,具體代碼如下:
using mshtml;
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //圖片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷貝到內(nèi)存
Image numImage = Clipboard.GetImage();
try
{Clipboard.SetImage(oldImage);
}
catch
{
}
return numImage;
}
2.2 類間方差閥值二值化處理
設(shè)原始灰度圖像灰度級為L,灰度級i的像素點為ni,則圖像的全部像素數(shù)為N=n0+n1+…nL-1歸一化直方圖,則 ,按灰度級用閥值t劃分為兩類:C0=(0,…,t),C1=(t+1,t+2,…,L-1),因此C0和C1類的出現(xiàn)概率及均值可轉(zhuǎn)化為:
(1)
(2)
(3)
(4)
其中:
(5)
(6)
對任何t值,下式都能成立
w0?0+w1?1=?T,
w0+w1=1,
C0和C1類的方差可由下式求得:
(7)
(8)
定義類內(nèi)方差為
(9)
類間方差為
(10)
總體方差為
(11)
引入下列關(guān)于t的等價的判決準(zhǔn)則:
(12)
(13)
(14)
這三個準(zhǔn)則是彼此等效的,把使 C0和C1兩類得到最佳分離的t值作為最佳閥值,因此將A(t),B(t),C(t)定為最大判決準(zhǔn)則。由于是基于二階統(tǒng)計特性,而是基于一階統(tǒng)計特性,和 是閥值t的函數(shù),而 與t值無關(guān),因此三個準(zhǔn)則中B(t)最為簡單,所以閥值t*:。
2.3 中值濾波去除干擾點
中值濾波的主要功能是讓周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,從而可以消除孤立的噪聲點。工作步驟為:
(1)將模板(3*3矩陣)在二值化圖中漫游,并將模板中心與圖中的某個像素位置重合;
(2)讀取模板下各對應(yīng)像素的灰度值(0或1);
(3)如果中心點為1,周圍四周為0,則將孤立亮點設(shè)為0(噪音)。
2.4 直方圖投影字符分割
圖像灰度級范圍為0,1,…,t-1,設(shè)灰度級i的像素數(shù)為ni,則一副圖像的總像素N為:
N= (15)
灰度級出現(xiàn)的概率定義為
Pi= (16)
如果灰度級直方圖出現(xiàn)明顯的雙峰狀,則選取兩峰之間的谷底所對應(yīng)的灰度級作為閥值。
2.5 樣本訓(xùn)練和識別
Tesseract的OCR開源引擎是業(yè)內(nèi)最準(zhǔn)確的三款識別引擎之一,具有豐富的公共識別庫,也可根據(jù)需要進行個人樣本庫的建設(shè)。
同時支持java、.NET、PHP、Python等主流語言都有相應(yīng)的封裝類庫。識別的主要C#代碼如下:
using OCR.TesseractWrapper;
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
TesseractProcessor processor = new TesseractProcessor();
processor.Init();
string result=processor.Recognize(newBitmap);
3 結(jié)束語
通過對某些論壇驗證碼進行試驗測試,發(fā)現(xiàn)對相對簡單驗證碼識別率高達95%以上;對一些字符粘連、動態(tài)變化的驗證碼,識別率很低,因此在識別前應(yīng)對圖片進行特殊的處理。同時建議對系統(tǒng)安全性要求高的網(wǎng)站驗證碼多加入一些識別率低的噪音如中文,適度旋轉(zhuǎn),粘連,動態(tài)變化等內(nèi)容,以此提高網(wǎng)站的防護能力。
參考文獻
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理(第三版)[M].北京:電子工業(yè)出版社,2011.
[2]劉直芳,王運瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]Gary Bradski,Adrian Kaehler.Learning OpenCV[M].南京:東南大學(xué)出版社,2009.
[4]盛驟,謝式千,潘承毅.概率論和數(shù)理統(tǒng)計[M].北京:高等教育出版社,2000.
[5]Watson·K.,Nagel·C,齊立波翻譯.C#入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
作者簡介
聞宏強(1987-),男,浙江建德市人。大學(xué)本科學(xué)歷?,F(xiàn)為浙江省電子信息產(chǎn)品檢驗所軟件評測中心助理工程師。主要研究方向為信息安全。
作者單位
浙江省電子信息產(chǎn)品檢驗所 軟件評測中心 浙江省杭州市 310007endprint
摘 要
隨著國內(nèi)一些大型網(wǎng)站頻頻突破驗證碼防護,本文試圖通過闡述驗證碼基本知識、二值化處理、字符分割、字庫校正等內(nèi)容,使網(wǎng)站開發(fā)人員能更好的了解攻擊者的常用技術(shù),并幫助設(shè)計出更好的驗證碼,以此來提高網(wǎng)站驗證碼的整體水平。
【關(guān)鍵詞】驗證碼 識別 字符分割 二值化
1 驗證碼概念
驗證碼是一種區(qū)分用戶是計算機還是人的公共全自動程序,可以防止惡意破解密碼、刷票、論壇灌水,可有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。
2 驗證碼識別流程
驗證碼識別包括:圖像采集、圖像預(yù)處理、圖像分割、樣本訓(xùn)練、圖像識別等內(nèi)容。驗證碼圖像采集就是直接通過HTTP抓取HTML,然后分析出圖片的URL,進行保存或下載。圖像預(yù)處理就是對圖像進行去噪、二值化處理,找出文字所在的區(qū)域。圖像分割就是對特定區(qū)域包括的文字進行分割。樣本訓(xùn)練就是通過人工挑選具有代表性的圖片進行學(xué)習(xí)和訓(xùn)練。圖像識別對待輸入的圖片進行識別,驗證算法或程序的可靠性。
2.1 圖像采集
以C#代碼為列獲取驗證碼圖片內(nèi)容信息,其中mshtml命名空間能對WebBrowser空間內(nèi)容進行讀取,具體代碼如下:
using mshtml;
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //圖片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷貝到內(nèi)存
Image numImage = Clipboard.GetImage();
try
{Clipboard.SetImage(oldImage);
}
catch
{
}
return numImage;
}
2.2 類間方差閥值二值化處理
設(shè)原始灰度圖像灰度級為L,灰度級i的像素點為ni,則圖像的全部像素數(shù)為N=n0+n1+…nL-1歸一化直方圖,則 ,按灰度級用閥值t劃分為兩類:C0=(0,…,t),C1=(t+1,t+2,…,L-1),因此C0和C1類的出現(xiàn)概率及均值可轉(zhuǎn)化為:
(1)
(2)
(3)
(4)
其中:
(5)
(6)
對任何t值,下式都能成立
w0?0+w1?1=?T,
w0+w1=1,
C0和C1類的方差可由下式求得:
(7)
(8)
定義類內(nèi)方差為
(9)
類間方差為
(10)
總體方差為
(11)
引入下列關(guān)于t的等價的判決準(zhǔn)則:
(12)
(13)
(14)
這三個準(zhǔn)則是彼此等效的,把使 C0和C1兩類得到最佳分離的t值作為最佳閥值,因此將A(t),B(t),C(t)定為最大判決準(zhǔn)則。由于是基于二階統(tǒng)計特性,而是基于一階統(tǒng)計特性,和 是閥值t的函數(shù),而 與t值無關(guān),因此三個準(zhǔn)則中B(t)最為簡單,所以閥值t*:。
2.3 中值濾波去除干擾點
中值濾波的主要功能是讓周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,從而可以消除孤立的噪聲點。工作步驟為:
(1)將模板(3*3矩陣)在二值化圖中漫游,并將模板中心與圖中的某個像素位置重合;
(2)讀取模板下各對應(yīng)像素的灰度值(0或1);
(3)如果中心點為1,周圍四周為0,則將孤立亮點設(shè)為0(噪音)。
2.4 直方圖投影字符分割
圖像灰度級范圍為0,1,…,t-1,設(shè)灰度級i的像素數(shù)為ni,則一副圖像的總像素N為:
N= (15)
灰度級出現(xiàn)的概率定義為
Pi= (16)
如果灰度級直方圖出現(xiàn)明顯的雙峰狀,則選取兩峰之間的谷底所對應(yīng)的灰度級作為閥值。
2.5 樣本訓(xùn)練和識別
Tesseract的OCR開源引擎是業(yè)內(nèi)最準(zhǔn)確的三款識別引擎之一,具有豐富的公共識別庫,也可根據(jù)需要進行個人樣本庫的建設(shè)。
同時支持java、.NET、PHP、Python等主流語言都有相應(yīng)的封裝類庫。識別的主要C#代碼如下:
using OCR.TesseractWrapper;
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
TesseractProcessor processor = new TesseractProcessor();
processor.Init();
string result=processor.Recognize(newBitmap);
3 結(jié)束語
通過對某些論壇驗證碼進行試驗測試,發(fā)現(xiàn)對相對簡單驗證碼識別率高達95%以上;對一些字符粘連、動態(tài)變化的驗證碼,識別率很低,因此在識別前應(yīng)對圖片進行特殊的處理。同時建議對系統(tǒng)安全性要求高的網(wǎng)站驗證碼多加入一些識別率低的噪音如中文,適度旋轉(zhuǎn),粘連,動態(tài)變化等內(nèi)容,以此提高網(wǎng)站的防護能力。
參考文獻
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理(第三版)[M].北京:電子工業(yè)出版社,2011.
[2]劉直芳,王運瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]Gary Bradski,Adrian Kaehler.Learning OpenCV[M].南京:東南大學(xué)出版社,2009.
[4]盛驟,謝式千,潘承毅.概率論和數(shù)理統(tǒng)計[M].北京:高等教育出版社,2000.
[5]Watson·K.,Nagel·C,齊立波翻譯.C#入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
作者簡介
聞宏強(1987-),男,浙江建德市人。大學(xué)本科學(xué)歷?,F(xiàn)為浙江省電子信息產(chǎn)品檢驗所軟件評測中心助理工程師。主要研究方向為信息安全。
作者單位
浙江省電子信息產(chǎn)品檢驗所 軟件評測中心 浙江省杭州市 310007endprint
摘 要
隨著國內(nèi)一些大型網(wǎng)站頻頻突破驗證碼防護,本文試圖通過闡述驗證碼基本知識、二值化處理、字符分割、字庫校正等內(nèi)容,使網(wǎng)站開發(fā)人員能更好的了解攻擊者的常用技術(shù),并幫助設(shè)計出更好的驗證碼,以此來提高網(wǎng)站驗證碼的整體水平。
【關(guān)鍵詞】驗證碼 識別 字符分割 二值化
1 驗證碼概念
驗證碼是一種區(qū)分用戶是計算機還是人的公共全自動程序,可以防止惡意破解密碼、刷票、論壇灌水,可有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。
2 驗證碼識別流程
驗證碼識別包括:圖像采集、圖像預(yù)處理、圖像分割、樣本訓(xùn)練、圖像識別等內(nèi)容。驗證碼圖像采集就是直接通過HTTP抓取HTML,然后分析出圖片的URL,進行保存或下載。圖像預(yù)處理就是對圖像進行去噪、二值化處理,找出文字所在的區(qū)域。圖像分割就是對特定區(qū)域包括的文字進行分割。樣本訓(xùn)練就是通過人工挑選具有代表性的圖片進行學(xué)習(xí)和訓(xùn)練。圖像識別對待輸入的圖片進行識別,驗證算法或程序的可靠性。
2.1 圖像采集
以C#代碼為列獲取驗證碼圖片內(nèi)容信息,其中mshtml命名空間能對WebBrowser空間內(nèi)容進行讀取,具體代碼如下:
using mshtml;
private Image GetWebImage(WebBrowser WebCtl, HtmlElement ImgeTag)
{
HTMLDocument doc = (HTMLDocument)WebCtl.Document.DomDocument;
HTMLBody body = (HTMLBody)doc.body;
IHTMLControlRange rang = (IHTMLControlRange)body.createControlRange();
IHTMLControlElement Img = (IHTMLControlElement)ImgeTag.DomElement; //圖片地址
Image oldImage = Clipboard.GetImage();
rang.add(Img);
rang.execCommand("Copy", false, null); //拷貝到內(nèi)存
Image numImage = Clipboard.GetImage();
try
{Clipboard.SetImage(oldImage);
}
catch
{
}
return numImage;
}
2.2 類間方差閥值二值化處理
設(shè)原始灰度圖像灰度級為L,灰度級i的像素點為ni,則圖像的全部像素數(shù)為N=n0+n1+…nL-1歸一化直方圖,則 ,按灰度級用閥值t劃分為兩類:C0=(0,…,t),C1=(t+1,t+2,…,L-1),因此C0和C1類的出現(xiàn)概率及均值可轉(zhuǎn)化為:
(1)
(2)
(3)
(4)
其中:
(5)
(6)
對任何t值,下式都能成立
w0?0+w1?1=?T,
w0+w1=1,
C0和C1類的方差可由下式求得:
(7)
(8)
定義類內(nèi)方差為
(9)
類間方差為
(10)
總體方差為
(11)
引入下列關(guān)于t的等價的判決準(zhǔn)則:
(12)
(13)
(14)
這三個準(zhǔn)則是彼此等效的,把使 C0和C1兩類得到最佳分離的t值作為最佳閥值,因此將A(t),B(t),C(t)定為最大判決準(zhǔn)則。由于是基于二階統(tǒng)計特性,而是基于一階統(tǒng)計特性,和 是閥值t的函數(shù),而 與t值無關(guān),因此三個準(zhǔn)則中B(t)最為簡單,所以閥值t*:。
2.3 中值濾波去除干擾點
中值濾波的主要功能是讓周圍像素灰度值的差比較大的像素改取與周圍像素值相近的值,從而可以消除孤立的噪聲點。工作步驟為:
(1)將模板(3*3矩陣)在二值化圖中漫游,并將模板中心與圖中的某個像素位置重合;
(2)讀取模板下各對應(yīng)像素的灰度值(0或1);
(3)如果中心點為1,周圍四周為0,則將孤立亮點設(shè)為0(噪音)。
2.4 直方圖投影字符分割
圖像灰度級范圍為0,1,…,t-1,設(shè)灰度級i的像素數(shù)為ni,則一副圖像的總像素N為:
N= (15)
灰度級出現(xiàn)的概率定義為
Pi= (16)
如果灰度級直方圖出現(xiàn)明顯的雙峰狀,則選取兩峰之間的谷底所對應(yīng)的灰度級作為閥值。
2.5 樣本訓(xùn)練和識別
Tesseract的OCR開源引擎是業(yè)內(nèi)最準(zhǔn)確的三款識別引擎之一,具有豐富的公共識別庫,也可根據(jù)需要進行個人樣本庫的建設(shè)。
同時支持java、.NET、PHP、Python等主流語言都有相應(yīng)的封裝類庫。識別的主要C#代碼如下:
using OCR.TesseractWrapper;
using (Bitmap bitmap = (Bitmap)Image.FromFile(file))
TesseractProcessor processor = new TesseractProcessor();
processor.Init();
string result=processor.Recognize(newBitmap);
3 結(jié)束語
通過對某些論壇驗證碼進行試驗測試,發(fā)現(xiàn)對相對簡單驗證碼識別率高達95%以上;對一些字符粘連、動態(tài)變化的驗證碼,識別率很低,因此在識別前應(yīng)對圖片進行特殊的處理。同時建議對系統(tǒng)安全性要求高的網(wǎng)站驗證碼多加入一些識別率低的噪音如中文,適度旋轉(zhuǎn),粘連,動態(tài)變化等內(nèi)容,以此提高網(wǎng)站的防護能力。
參考文獻
[1]Rafael C.Gonzalez,Richard E.Woods.數(shù)字圖像處理(第三版)[M].北京:電子工業(yè)出版社,2011.
[2]劉直芳,王運瓊,朱敏.數(shù)字圖像處理與分析[M].北京:清華大學(xué)出版社,2006.
[3]Gary Bradski,Adrian Kaehler.Learning OpenCV[M].南京:東南大學(xué)出版社,2009.
[4]盛驟,謝式千,潘承毅.概率論和數(shù)理統(tǒng)計[M].北京:高等教育出版社,2000.
[5]Watson·K.,Nagel·C,齊立波翻譯.C#入門經(jīng)典[M].北京:清華大學(xué)出版社,2006.
作者簡介
聞宏強(1987-),男,浙江建德市人。大學(xué)本科學(xué)歷?,F(xiàn)為浙江省電子信息產(chǎn)品檢驗所軟件評測中心助理工程師。主要研究方向為信息安全。
作者單位
浙江省電子信息產(chǎn)品檢驗所 軟件評測中心 浙江省杭州市 310007endprint