破解圖片驗證
相信大家都有在論壇灌水的經(jīng)歷吧?但是如果你連續(xù)發(fā)表統(tǒng)一內(nèi)容的東西在論壇中,不久論壇的整個板塊就全是你發(fā)表的信息了,其他信息全被擠在了后面。假設(shè)你發(fā)表的信息夠多,版主都刪不完時,那么這個論壇基本就報廢了!其他的商業(yè)論壇也意識到了防止惡意灌水的重要性,紛紛使用了一些防止惡意灌水的措施,有發(fā)貼間隔時間的限制、同一IP地址的發(fā)貼數(shù)限制、內(nèi)容不能重復(fù)等,但是這些都不是今天的重點,由于論壇使用的是一個公用發(fā)貼表單,需要突破唯一的難點是驗證碼。(為了防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試或是防止不斷提交某網(wǎng)絡(luò)信息而采用的一種網(wǎng)絡(luò)通行方式。隨機生成字符信息放入圖片中,防止計算機直接識別。比如招商銀行的網(wǎng)上個人銀行,騰訊的QQ社區(qū)等等) 驗證碼分為如下幾類:數(shù)字型、字符型、符號型、綜合型。
一般驗證碼屬于數(shù)字型的,不過有的圖片中生成了不少彩色和黑白的噪音點(指驗證圖片上的斑點)。那么我們應(yīng)該怎么去識別呢?傳統(tǒng)的驗證碼識別方式很簡單,由于數(shù)字的位置是固定的,所以我們只需要提取每一幅數(shù)字的圖片(沒有噪音點的)然后把每一個特殊數(shù)字獨有的象素位置記錄下來,然后在網(wǎng)絡(luò)上提取需要破解的特征碼,祛除噪音點,對其位置和記錄位置進行比對,那就是么就能確定相應(yīng)的數(shù)字了。
總結(jié)一下傳統(tǒng)的就是:
1.先分析驗證碼,前景顏色是否不定
2.然后把驗證碼的寬度/驗證碼文字個數(shù),比如一驗證碼下載后寬度為60,有4個數(shù)字,那么就60/4=15,然后保存每個字,如果只有數(shù)字保存0-9數(shù)字到位圖文件,如果英文那更麻煩點,0-9,A-Z都要保存到位圖,位圖的前景色都不變,保持一種顏色,背景隨便你改不改
3.如果前景要變則將文字統(tǒng)一為同種顏色,每個數(shù)字0-9的點陣都有個公共點,取該公共點顏色然后把前景全部統(tǒng)一成一種顏色,比如白色{255,255,255},位圖的結(jié)構(gòu)是BGR,而不是RGB
4.然后進行比較,如果驗證碼的一點為白色,第2步保存的位圖同一點也是白色,那么頻率增加1
5.最后頻率最高的就是驗證碼了!
接下來要做的就是做個post程序了,這個太簡單了,代碼你就自己寫吧!不過也要做到如下細節(jié):做成多線程程序進行發(fā)貼,不然程序會失去響應(yīng)的。最好是可以導(dǎo)入大量的代理IP的,然后就是發(fā)貼的內(nèi)容最后加上幾個隨機字符,這樣可以防止重復(fù)貼的過濾!最重要的,只是做測試,發(fā)貼量不要太多、不要亂發(fā)廣告貼!
其實上述方法已經(jīng)不是只是對驗證碼進行識別了,完全可以用到現(xiàn)實生活中去,比如說手寫體識別、車牌識別等等,但是現(xiàn)實生活中我們還要進行更多的加工,比如說圓形檢測,多邊形檢測等等。所以說從網(wǎng)絡(luò)安全技術(shù)中,也有很多東西能造福社會,還等待我們繼續(xù)創(chuàng)造!