驗證碼的種類和功能介紹!如何破解?

塞维利亚vs巴萨 www.caglqh.com.cn 2018-11-30 17:45:56   來源:希奧信息    查看:734


驗證代碼是什么?

驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機和人的公共全自動程序??梢苑樂梗憾褚餛平餉藶?、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試,實際上是用驗證碼是現在很多網站通行的方式(比如招商銀行的網上個人銀行,百度社區),我們利用比較簡易的方式實現了這個功能。驗證碼設計的最初目的是由計算機生成和判斷。但是只有合法用戶才能回答問題,如果答案不能被回答,如果用戶被裁定為非法的話,將不能通過。

驗證碼的功能是什么?

驗證碼的出現并不是一種功能要求,它不能帶來業務能力的提高,更不用說任何價值了。2002年路易斯安那·馮·安首次提出了一個名為“驗證碼”的程序概念,它只解決了一種惡意計算機攻擊。這是一個指向請求的發起者并提出問題的程序,正確的答案是人。

這個程序是基于一個重要的假設,即所提出的問題很容易被人類回答,而機器無法回答它們。這對機器來說是一項艱巨的任務,但對人類來說相對來說是可以接受的。Yaho迅速使用圖形驗證代碼來解決長期困擾雅虎的垃圾郵件問題。從那時起,圖形化和其他類似的驗證代碼開始增長。

隨著互聯網的發展,幾乎所有的計算機系統都在使用驗證碼機制,而驗證碼也已經因此經過了無數次的進化,如今已經演變出了各種類型:

1、圖片驗證碼:圖片驗證碼是人們第一次使用的標準型的驗證碼,它基于當時機器難以處理復雜的計算機視覺識別問題,而人類卻可以輕松的識別來區分人類及機器。這種驗證碼主要是利用人類知識容易解答,而計算機難以解答的機制進行人機判斷。目前為了增加驗證碼對抗效果,圖片驗證碼采用方式有添加干擾線、文字粘連、背景色混淆、字體扭曲、空心字體等。

2、知識型問題驗證碼:雖然圖片驗證碼采用了很多種方式來防止機器識別,但是很遺憾無論是那一種都有相當成熟的對抗辦法了,所以圖片驗證碼基本要退出歷史舞臺了。這一類的驗證碼通常采用普通人都熟知的問題,如1+1等于幾、今天是星期幾等。

3、動作型驗證碼(無知識型驗證碼):動作型驗證碼主要有“勾選驗證”“滑動驗證”等,目前這種驗證碼已經不是新事物了,這種驗證碼對于用戶體驗是非常好的,采用了行為的方式,淘寶和 google都曾今使用過這種驗證嗎,曾在一段時間內也是很多大型網站采用的一種驗證方

4、短信驗證碼:短信驗證碼是通過發送驗證碼到手機,用戶在網站填寫收到的驗證碼,驗證用戶的正確性。在大型網站尤其是購物網站甚至是銀行網站,都提供有短信驗證碼功能,可以比較準確和安全地保證購物的安全性,短信驗證碼是目前最有效的驗證碼系統之當然這種驗證碼也并不是牢不可破的,這種驗證方式剛開始的確是一個最有效最直接的辦法,但是最近幾年,隨著某些地方開始大規模的使用貓池和特殊的零月租手機卡,這種方法的實用性也大打折扣。

5、用戶信息型驗證碼:此類驗證碼比較不容易破解,它是將用戶注冊時填寫的信息和其他非本用戶的同類型的信息放在一起讓用戶選擇,通過比對結果判斷是否是該用戶的。例如,驗證碼是判斷下列郵寄地址哪一個是你的,然后列出6個,其中一個是用戶真實的地址,其他都不是本用戶的地址,這樣用戶體驗也極佳,同時也能很好的區分用戶和機器。

驗證碼破解難易度:

圖片驗證碼是最容易破解的,主要分為數字型、字符型、符號型、綜合型這幾種,下面介紹數字和字符型驗證碼破解方法,主要以下幾個步驟。

獲取驗證碼:通過查看源碼將圖片驗證碼下載到本地。去背景及干擾線等把圖片中某種顏色數量最多替換為白色,相當于去除背景,如果某個像素和周圍四個像素點中的兩點或三點顏色差別較大,就使用濾波算法去掉該噪點。

取出字模:接下來就是建立這類驗證碼的特征庫。通過下載多張驗證碼圖片,將里面的0-9字符和A-Z大小寫的分割保存。

二值化:要二值話就要設置一個閥值,如果某一個像素大于這個閥值就將該像素替換稱1,否則用0表示。

計算特征:把要識別的圖片,進行二值化,然后分割為一個個小圖片得到圖片特征碼。

對照樣本識別:把圖片特征碼和驗證碼的字模進行對比,得到驗證圖片上的數字或字母,如果識別錯誤,同時某字母或數字具有特殊性,就將該字母或數字制作稱字模存如特征庫,那么再出現類似的就可以正確識別了使用目前這種方法,對驗證碼的識別基本上可以做到100%。

知識型問題驗證碼破解:這種知識驗證碼通常都是使用題庫來做的,而且數量有限,它的破解方式相對簡單。編寫機器代碼通過批量刷新從而建立題庫答案對照表,然后使用正則表達式從網頁里抓取問題主體,最后在題庫中匹配相應的答案即可,現在基本淘汰了這樣的驗證碼。

動作型驗證碼破解:動作型的驗證碼的原理是需要用戶使用某種動作如滑動點擊等等,所以破解此類驗證碼的主要思路就是模擬用戶動作,其實生成一個不被機器判定為作弊的滑動動作要比識別圖片之類的難度小很多,特別是hml5支持 canvas后。例如滑塊這個動作其實很容易模擬,首先判斷驗證碼在什么時候出現,然后判斷驗證碼何時加載完成,通過x軸和Y軸確定驗證碼的位置,之后使用程序模擬拖動驗證碼當然對于此類驗證碼也有相應時間滑動的速度和閾值等需要考慮,這個需要大量的測試,盡量模擬人的滑動動作即可

短信驗證碼的破解:短信驗證碼破解有兩種,當然都是基于不同的目的,一種是針對用戶,在用戶的手機植入木馬來獲取短信內容,這一類是主要用于盜取用戶的資料或其他東西,這種的比較少且定向性強。另一種主要是針對網站,使用貓池和特殊的手機卡來大量注冊需要用手機號注冊的網站和平臺,然后通過這些耍賴的賬號來刷單或者做其他違規的事情

用戶信息型驗證碼:這種驗證碼只能使用撞庫的方式。撞庫是黑客通過收集互聯網已泄露的用戶和密碼信息,生成對應的字典表,嘗試批量登陸其他網站后,得到一系列可以登錄的用戶

無論什么驗證碼都必須考慮安全性和用戶體驗。但如果真的做好在安全性和良好體驗之間的平衡,需要同時在兩個方面都下功夫,才能保證整體的安全水位。