驗證碼破解的方法,簡單驗證碼破解演示

對於複雜的驗證碼,位置隨機、扭曲、模糊、干擾項、gif驗證碼、漢字等。。。。

 

對於複雜背景的,但是字體是統一顏色的,我們可以統計每個像素點的值,然後統計出峯值的4個,之後把峯值之外的點全部轉爲白色,峯值的4種色轉爲黑色。(具體情況具體定)

 

大部分驗證碼都是可以用黑白的方法把底紋給去掉的,比如,這個大家常見的效驗碼,去了底紋之後的效果爲上圖,可以看到還是有一些干擾點,我們可以用代碼把這些孤立的干擾點去掉(去的力度可以自己確定),去了干擾點的效果爲上圖,接下來這些字符都是很規整的字符了

  

看上圖優化後的目標,這兩個6是一樣的,加上一些補償,提取到模板,接下來就很容易破解了,可以看到左圖的M有些模糊了,其實能達到90%的概率就可以了

 

 

如果遇到gif類型的效驗碼,忘記哪個網站了,但是我確定我見過,這種校驗碼其實也類似,關鍵就是從gif中提取到效驗碼圖片,我們可以提取幀數最長的一張,取到之後過程就也一樣了,去除干擾,提取模板或者學習,比對破解

 

 

由於生成圖片對服務器來說是個“體力活”,並且效驗碼的訪問量是很大的,並且有很多時候由於用戶網速等原因會不停的請求效驗碼刷新,所以很多看起來很牛的效驗碼其實是固定生成好的,比如每天0點生成N個,然後供第二天使用,這類效驗碼就是每天不停的人工輸入,然後供當天使用,聽起來很雷,但是國內確實有這樣的做法。

還有種更雷的做法,把效驗碼提取然後通過程序集中的發佈出去,讓一些想賺錢的人來輸入,1分錢一張(或者更低)放心,肯定有人願意做的。。。

 

 獲取到去了噪點的圖片之後(有些需要做補償)找出模板,由於固定的位置直接去固定位置的圖片即可

這裏僅提供一種驗證碼破解的標準示例,共大家研究學習

這種做法僅對規則的效驗碼有效,複雜的效驗碼無效,但是總體的步驟是一致的。

 

通過這組驗證碼大家會看到一些規律,1。這種驗證碼字體很規則,2。每位數字的位置都是固定的。我們稱之爲標準效驗碼,所有的干擾項也就是背景顏色有不同的深灰色干擾紋。字體沒有任何的扭曲、位置變換。

 

思路:截取每個位置上的10位數字圖片,然後將圖片都黑白化,然後用模板進行比對。

圖片黑白化原理:

獲取到RGB的值,然後根據黑白化的公式R*R +G*G +B*B < 3*128*128爲黑色,否則爲白色,這種方法對於絕大多數是有效的。

還有一種是根據灰度,然後在根據灰度來確定是黑還是白。

像素點灰度的公式:

1.浮點算法:Gray=R*0.3+G*0.59+B*0.11

  2.整數方法:Gray=(R*30+G*59+B*11)/100

  3.移位方法:Gray =(R*28+G*151+B*77)>>8;

  4.平均值法:Gray=R+G+B/3;

5.僅取綠色:Gray=G

參考:http://baike.baidu.com/view/1184366.html

可以根據需要做出微調

 

 

本例採用黑白化公式來黑白化。

 

 

然後根據獲取到的模板,在每次比對的時候將圖片淨化,然後比對

結果如下

 

 其實這上面的驗證碼是支付寶之前的驗證碼,現在已經換了新的驗證碼了,所以老的驗證碼也無所謂了,我就公佈出老的破解方法

 

具體的實現邏輯可以看下代碼,文章中的兩個例子都有涉及到,僅供學習討論使用,禁止一切的非法活動

有對效驗碼有研究的朋友可以一塊交流。

 

示例代碼下載   ps:csdn上傳的審覈太慢了。等不及了就放javaeye了

CSDN的鏈接終於好了也放上來,CSDN下載

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