高 原
(江蘇省邳州市機動車綜合性能檢測站,江蘇邳州 221300)
字符識別技術[1-2]是破解驗證碼過程中的一項關鍵技術,而基于特征的字符識別技術相比其他識別技術具有識別速度快的優(yōu)勢,在驗證碼識別過程中,速度越快,其價值越高?;谔卣鞯淖址R別技術,可通過字符的結構特征,來定義可行的區(qū)分方法,這種識別方法可根據(jù)字符的特征定義不同的算法。在驗證碼識別過程中,由于驗證碼是被人識別的,為提高驗證碼的可用性,驗證字符大多使用那些特征明顯,不容出現(xiàn)混淆的字符,所以驗證碼中所用的字符是有限制的,字符集較小,利用結構特征的字符識別技術,特征更加容易辨別,識別速率也更快。
驗證碼[3-4]作為一種在網(wǎng)頁上使用的安全機制,可防止惡意程序自行的注冊賬號、發(fā)送免費郵件、論壇灌水,有效防止黑客對某一特定注冊用戶使用特定程序暴力破解方式進行不斷的登陸嘗試。驗證碼是現(xiàn)在眾多網(wǎng)站通行的方式如某銀行的網(wǎng)上個人銀行、百度社區(qū)等是一種簡單的區(qū)分人與機器的方法。對驗證碼進行破解研究,發(fā)現(xiàn)其設計過程中的漏洞和弱點,對提高驗證碼的安全性具有重要意義。2004年Dontnod公司的Hocevar S[5]在網(wǎng)絡上發(fā)布了其驗證碼識別程序PWNtcha(Pretend We’re Not a Turing Computer but a Human Antagonist),以證明驗證碼不是一種安全的交互驗證手段,現(xiàn)在這個項目已經(jīng)開源。Hocevar同時還在網(wǎng)站上發(fā)布了多個驗證碼的識別結果,識別率從49% ~100%,其中有著名的電子支付公司Paypal的驗證碼。PWNtcha針對的驗證碼主要是背景容易分離和非粘連的驗證碼,網(wǎng)站也給出了一些難以識別的驗證碼樣本,但未能給出識別結果。2003年 Mori G和Malik J利用形狀上下文對Gimpy和EZ—Gimpy驗證碼進行了識別,識別率分別達到33% ~92%[6]。2008年英國紐卡斯爾大學的Yah J,AHMAD A S E等對Microsoft的驗證碼進行了成功分割,并通過多分類器進行識別,識別率達到 60%[7-8]。
文中針對某銀行的驗證碼,首先根據(jù)其特點將驗證碼中的干擾色去掉并且提取出目的字符,然后基于字符與數(shù)字內(nèi)部和外部特征,采用顏色填充法,三線條法,全面掃描法對單個字符進行識別,識別率可達到95%以上。相比于模板匹配算法,在時間上也有大的縮減。最壞情況,識別的字符的時間是215 ms,平均識別時間為187 ms。
網(wǎng)絡中常用的驗證碼是基于文本圖像的驗證碼,基于文本圖像的驗證碼又可分為字符分離和采用粘連機制兩大類。文中所述的破解方法都是針對字符分離的驗證碼。
圖1 某銀行驗證碼
某銀行的驗證碼在字符分離驗證碼中具有代表性。由于無法得知其驗證碼生成的原理和代碼,于是先從其網(wǎng)上銀行中隨機獲取100個驗證碼,通過對這100個樣本驗證碼的觀察和分析,發(fā)現(xiàn)其驗證碼具有以下特點。
(1)背景色以淺灰色為主,有大量隨機的某種色彩線條隨機分布在整個驗證碼中,且彩色線條和前景色的字符重疊時像素值是前景色和背景色疊加而成的。
(2)字符均有不同程度的扭曲和變形,字符的扭曲和變形使得商用的一般OCR軟件對字符無法正確識別。
(3)字符位置固定在水平方向上和豎直方向上是隨機分布的,因為驗證碼輸入是有順序限制的,所以在水平方向字符之間是不可交錯的,而豎直方向上的隨機分布影響了字符破解時對字符的準確定位。
(4)每個驗證碼都是由固定數(shù)目字母或數(shù)字構成的,固定的字符數(shù)使破解工作相對容易,在分割字符時可以確切的了解需要提取幾個字符,而驗證碼中都采用了6個字符。
(5)每種驗證碼采用的字符集是相同的,不是所有的字符都會出現(xiàn)在驗證碼中,因為會降低驗證碼的可用性。例如,在有背景色干擾的情況下,肉眼較難分清1和I。驗證碼中共有19個數(shù)字和字母出現(xiàn),8個數(shù)字,11個小寫字母。
文中以某銀行驗證碼為例,介紹了破解此類字符分離驗證碼的詳細過程。
破解驗證碼分為兩個步驟,分割和識別。利用前節(jié)分析驗證碼得到的特點,可利用一種簡單有效的方法破解驗證碼。
破解過程可以概括為下面的步驟:
(1)對驗證碼進行預處理,去除背景色和干擾色。
(2)用顏色填充算法提取驗證碼中的字符。
(3)根據(jù)每種字符特征對單個字符識別。
破解工作是建立在100個樣本驗證碼基礎上的,為確保研究的正確性和適用性,對另外100個在破解工作中未能用到的驗證碼進行了實驗。
該階段主要目的是去除驗證碼中背景色,將字符像素全部置為黑色,其他背景顏色全部置為白色,也可稱為二值化處理。
驗證碼中字符的顏色是灰色與噪音顏色疊加的色彩,而灰色與噪音顏色疊加的色彩與灰色極為相似,只將原本灰色的RGB值進行了微調。所以,本節(jié)的目的是將驗證碼中灰色的像素與灰色相近的像素置為黑色,其他顏色置為白色。
通過大量的實驗和觀察,發(fā)現(xiàn)RGB值中至少有一個分量值>170的像素必定是背景色和噪音色,以170為閾值對圖片進行處理,當一個像素點的RGB值分量中有一個>170就將其置為白色,相反則置為黑色。部分結果如圖2所示。
用這一方法對100個驗證碼進行二值化,效果表明這種方法對驗證碼有較好的去噪點效果。圖像的二值化,對于這種不粘連的驗證碼,本身就是分割的過程。
圖2 二值化后的驗證碼
在這一階段,可用連通域法提取圖片中的字符。連通域法就是將一個連通域里的所有像素提取出來當作一個字符。具體實現(xiàn)使用了顏色填充算法。這里,用一個寬40,高為字符高度的圖像存儲提取出來的字符。
圖3 被提取的6個字符
常用的識別方法是模板匹配,在模板集合中依次用模板圖片和提取出來的字符進行匹配,選取匹配率最高的字符作為識別結果。模板匹配對扭曲的字符有較大的局限性,字符是隨機扭曲的,若要得到理想的結果,就需要一個較大的模板庫,但模板庫的龐大必然使匹配所用的時間更長。
文中所用的識別方法是基于字符特征的,對單個字符識別的準確率達97%,對100個樣本驗證碼的識別成功率達到82%。
在整個識別過程中,采用了3種方法:顏色填充、三線條和全面掃描法,確保識別結果在準確率和速度上都取得理想的效果。
2.3.1 基于顏色填充的字符識別
在驗證碼中出現(xiàn)的19個字符中,有9個字符有封閉的區(qū)域,這里稱為閉環(huán)。如圖4所示。通過判斷各自閉環(huán)的位置,可以結合使用顏色填充算法來識別這些字符。
圖4 含有閉環(huán)的字符
如4的閉環(huán)位置相對在中間,閉環(huán)的形狀為三角形。6的閉環(huán)位置在圖片的下部。b與6相似,閉環(huán)位置在圖片的下部,閉環(huán)上方無黑色像素。9的閉環(huán)位置在圖片的上部。a的閉環(huán)位置在圖片的下部,與d類似,不同點在于a的閉環(huán)上方有黑色像素。d與a相似,閉環(huán)位置在圖片的下部,閉環(huán)上方無黑色像素。e的閉環(huán)位置在圖片的上部,與p類似,不同點是閉環(huán)的下方有黑色像素。p與e相似,閉環(huán)位置在圖片的上部,閉環(huán)下方無黑色像素。
圖5 顏色填充
根據(jù)以上特征,4,6,9,a,b,d,e,p 這 8 個字符被成功地識別。加上已經(jīng)識別出的8,驗證碼中出現(xiàn)的19個字符中的9個已經(jīng)被區(qū)分出來,經(jīng)過實驗證明,這種方法的識別正確率在98%以上。
2.3.2 基于三線條法識別字符
三線條法,是針對驗證碼中字符識別提出的新方法,分別在圖片的1/3高度,1/2高度和2/3高度處掃描,記錄遇到的黑色像素位置,通過這些黑色像素的位置識別字符。該方法針對的是驗證碼中的字符m,字符n和字符w。相比于整體掃描得到全部特征的方法,三線條法只通過局部掃描得到局部特征就可識別相應的字符,在速度上具有較大優(yōu)勢,而準確率依然理想。
在經(jīng)過顏色填充識別字符后,驗證碼中還有10個字符未被成功識別,分別是 2,3,5,7,k,m,n,s,w,x。在這10個字符中,應用三線條法,m,n,w的特征被明顯的體現(xiàn)出來,詳細描述如下。
m三個線條上的黑色像素都呈三段分布,中間段的黑色像素與兩邊段黑色像素中間的非黑色像素數(shù)目接近并>3,三個線條上的像素都符合這一特點。
n三個線條上的黑色像素都呈兩段分布,兩段黑色像素之間的非黑色像素的數(shù)目>3,三個線條上的像素都符合這一特點。
w在1/3高度的線條上,黑色像素呈三段分布且中間段黑色像素與兩邊段黑色像素之間的非黑色像素數(shù)目>3,在1/2高度的線條上則呈現(xiàn)三段分布,但是黑色像素之間的非黑色像素的數(shù)目<1/3高度上的線條,而在2/3高度上的線條,黑色像素可能呈兩段或三段分布,呈兩段分布時可被確認為w,呈三段分布只要黑色像素中間的非黑色像素的數(shù)目遠<1/3高度和1/2高度的線條也可被確認為w。
圖6 三線條法
對100個驗證碼樣本中出現(xiàn)的字符m,n和w進行了實驗,其識別正確率達到97%。在算法執(zhí)行時,如果某種字符已經(jīng)被識別,在后面識別剩余字符時就不去識別該種字符,顏色填充法和三線條法對字符識別的高準確率,保證了算法可行性。
經(jīng)過顏色填充法和三線條法的處理之后,驗證碼中的19個字符被識別出來12個,還有7個字符未被識別出來,分別是 2,3,5,7,k,s,x。對于這幾個字符,三線條法可以識別出部分,但準確率不高且不能完全識別,因此采用后面的全面掃描觀察其特征的方法識別這7個字符。
2.3.3 基于全面掃描識別字符
全面掃描是從上往下,對字符的每一行像素進行掃描,通過每行像素點的分布,行與行之間像素點移動的趨勢,判斷其是否屬于某個特定字符的特征。該方法基本可以識別剩下的7個字符。
比如字符7,掃描圖像下半部分的每一行,如果每行的黑色像素都<4,且只有一段連續(xù)的黑色像素,符合這一條件的像素被認為是字符7。其他的6個字符也有各自的全局特征,可以通過類似的方法予以識別。
圖7 剩下的7個字符
經(jīng)過全面掃描方法處理之后,驗證碼中的19個字符已被全部成功識別。對100個樣本驗證碼中的600個字符進行實驗,全面掃描方法對這7個字符的識別成功率達97%。
對作為樣本的100個驗證碼的實驗結果進行分析,并且用文中的算法對另外的100個驗證碼進行了測試,主要測試了破解成功率和破解時間,并對破解失敗的原因作出進一步分析和討論。另外,用同樣的方法對同類驗證碼進行破解,結果證明文中的方法具有一般性。
驗證碼的破解主要分為分割和識別兩個階段,在100個樣本中,算法的分割成功率是94%。這表明,在這100個驗證碼中,有94個驗證碼的字符都能被提取出來。對另外100個驗證碼用同樣的算法進行了實驗,這100個驗證碼從未在研究過程中用到,算法的分割成功率為96%,這充分說明算法在預處理和提取這一階段具有較好的通用性。對100個樣本驗證碼的最后識別成功率為83%,對另外100個未在研究過程中使用的驗證碼識別成功率為78%,與樣本驗證碼的成功率相比略有降低,但結果仍較為理想。
對作為樣本的100個某銀行驗證碼破解,破解一個驗證碼的平均速度只有187 ms,破解最快的是170 ms,破解最慢的為215 ms。以平均速度計算,一秒鐘可以破解5個驗證碼,破解成功率為78%,則每秒鐘可正確識別4個驗證碼,遠快于人類輸入驗證碼的時間。
以平均時間計算,一秒鐘破解4個驗證碼,一分鐘就是240個,一天24小時總共可以破解345600個驗證碼,如果使用多個機器同時灌水或者發(fā)送免費郵件,將會消耗極大的網(wǎng)站資源,會對其他用戶正常使用造成影響。
用文中的算法對多個字符分離的驗證碼進行破解實驗,破解對象分別為中國農(nóng)業(yè)銀行和交通銀行的驗證碼,如圖8所示。破解結果如表1所示,結果表明,文中的方法對于識別同類驗證碼具有較好的通用性。都采用基于字符特征的識別方法時,驗證碼采用的字符集越大,識別時間越長,并且呈線性增長,某農(nóng)業(yè)銀行的字符集只有9個數(shù)字,所以識別速度較快,而某交通銀行的字符集有27個,則識別速度相對較慢。
圖8 某農(nóng)業(yè)銀行和某交通銀行的驗證碼
表1 對同類驗證碼的破解結果
文中對字符分離驗證碼的破解工作及結果表明此類驗證碼在設計過程中存在極大的缺點和漏洞,針對文中的破解方法,可在諸多方面做出改進使這種破解方法無效。
采用與前景色相似甚至相同的顏色作為噪點,在預處理階段的算法會失去作用,尤其當噪點與字符相交時,這些噪點在字符提取階段會與字符同時被提取,將會嚴重的干擾到字符的識別,尤其對于算法所用的基于字符特征的識別方法,對字符的完整性要求較高,筆畫的缺失和多余都將影響到算法的成功率。
使用粘連機制,字符與字符相連,簡單連通域算法是無法將單個字符提取出的,這樣在分割字符時增加了難度,Yahoo和Google的驗證碼均采用粘連機制,現(xiàn)在還未出現(xiàn)有效的方法破解采用該機制的驗證碼。使用連機制時,若字符長度不定,將會取得更為理想的防機器識別能力。
文中分析了字符分離驗證碼的普遍特點,針對這些特點提出了破解方法,并在識別時介紹了一種基于字符特征破解驗證碼的方法,通過進行實驗得出該方法具有較高準確率和較快速度的特點,最終提出了對此類驗證碼的改進方法。
[1] MOIL S,SUEN C Y,YAMAMOTO K.Historical review of OCR research and development[J].Proceedings of IEEE,1992,80(7):1029 -1058.
[2] SIMARD P,STEINKRAUS D,PLATT J.Best practice for convolutional neural networks applied to visual document analysis[C].Los Alamitos:International Conference on Document Analysis and Recognition(ICDAR),IEEE Computer Society,2003:958 -962.
[3] AHN L,BLUM M,HOPPER N J,et al.The CAPTCHA web page[EB/OL].(2011 -03 -26)[2012 -03 -19]www.captcha.net.
[4] AHN L B,HOPPER M N.CAPTCHA:Using hard AI problems for security[J].Lecture Notes in Computer Sconce,2003,26(9):294 -311.
[5] HOCEVAR S.PWNtcha[EB/OL].(2010 -09 -08)[2012-02 -26]http://caca.Zoy.org.
[6] GREG M,JITENDRA M.Recognising objects in adversarial clutter:breaking a visual CAPTCHA[C].IEEE Conference on Computer Vision and Pattern Recognition(CVPR'03),2003,1:134 -141.
[7] HELLAPILLA K,LARSON K,SIMARD P,et a1.Computers beat humans at single character recognition in readingbased human interaction proofs[C].Stanford University,CA,USA:In Proceedings of the second Conference on Email and Anti-Spam,2005.
[8] YAN J,AHMAD A S E.A low - cost attack on a microsoft CAPTCHA[C].New York,USA:Proceedings of the ACM Conference Off Computer and Communications Security,ACM Press,2008:543 -554.