百度,作為國(guó)內(nèi)搜索引擎的大戶,為了進(jìn)一步擴(kuò)大自己的用戶群,專門(mén)開(kāi)設(shè)了“百度貼吧”(2003年11月百度貼吧 (http://post.baidu.com)自從誕生以來(lái)逐漸成為世界最大的中文交流平臺(tái)!當(dāng)用戶在百度搜索引擎中搜索出需要搜索的關(guān)鍵字,點(diǎn)擊“貼吧”即可進(jìn)入以關(guān)鍵字為專題的相應(yīng)貼吧)的服務(wù)。操作簡(jiǎn)單而又針對(duì)性,這是貼吧火極一時(shí)的重要原因,可正因?yàn)槿绱耍俣荣N吧的安全性又怎么樣呢?這就是我們今天探討的話題!
相信大家都有在論壇灌水的經(jīng)歷吧?但是如果你連續(xù)發(fā)表統(tǒng)一內(nèi)容的東西在論壇中,不久論壇的整個(gè)板塊就全是你發(fā)表的信息了,其他信息全被擠在了后面。假設(shè)你發(fā)表的信息夠多,版主都刪不完時(shí),那么這個(gè)論壇基本就報(bào)廢了!其他的商業(yè)論壇也意識(shí)到了防止惡意灌水的重要性,紛紛使用了一些防止惡意灌水的措施,有發(fā)貼間隔時(shí)間的限制、同一IP地址的發(fā)貼數(shù)限制、內(nèi)容不能重復(fù)等,但是這些都不是今天的重點(diǎn),由于百度使用的是一個(gè)公用發(fā)貼表單,允許匿名發(fā)帖,需要突破唯一的難點(diǎn)是驗(yàn)證碼。(為了防止某個(gè)黑客對(duì)某一個(gè)特定注冊(cè)用戶用特定程序暴力破解方式進(jìn)行不斷的登陸嘗試或是防止不斷提交某網(wǎng)絡(luò)信息而采用的一種網(wǎng)絡(luò)通行方式。隨機(jī)生成字符信息放入圖片中,防止計(jì)算機(jī)直接識(shí)別。比如招商銀行的網(wǎng)上個(gè)人銀行,騰訊的QQ社區(qū)等等)
這時(shí)驗(yàn)證碼在整個(gè)系統(tǒng)中就扮演了了一個(gè)至關(guān)重要的角色。如果我們能突破它,寫(xiě)一個(gè)自動(dòng)發(fā)布的程序,那么我們來(lái)算一算:假設(shè)每?jī)擅氤绦騪ost一次,一分鐘就是30次、 一小時(shí)就有30×60=1800次、 一天就有1800×24=43200次!如果我們把發(fā)貼程序或是密碼窮舉程序掛在很多肉雞上,進(jìn)行同時(shí)工作,那么結(jié)果可想而知!筆者曾親目睹過(guò)國(guó)內(nèi)某著名安全論壇就是驗(yàn)證碼被人破解,導(dǎo)致被人惡意灌水,最后完全崩潰!當(dāng)然還有某網(wǎng)絡(luò)銀行也因此類原因?qū)е掠脩裘艽a被盜等眾多事件。筆者也作如下聲明:下文介紹的方法并不是有意針某公司或是某機(jī)構(gòu),只是作為技術(shù)交流,如果部分讀者利用本文介紹的方法進(jìn)行破壞或是窮舉他人密碼,這已經(jīng)違法了法律,那么責(zé)任由他自己承擔(dān),與筆者無(wú)關(guān)!
好了,我們可以進(jìn)入正題了(以下出現(xiàn)的代碼為delphi寫(xiě)的部分源碼,為了防止任意利用,我以介紹方法為主,如果讀者感興趣,可以自己組合編寫(xiě)完整,在本文附帶的程序中,筆者提供了一個(gè)驗(yàn)證碼參數(shù)確定程序(附源碼))。驗(yàn)證碼分為如下幾類:數(shù)字型、字符型、符號(hào)型、綜合型。
我們看了看百度貼吧的驗(yàn)證碼如圖: 是屬于數(shù)字型的!不過(guò)其圖片中生成了不少彩色和黑白的噪音點(diǎn)(指驗(yàn)證圖片上的斑點(diǎn))。那么我們應(yīng)該怎么去識(shí)別呢?傳統(tǒng)的驗(yàn)證碼識(shí)別方式很簡(jiǎn)單,由于數(shù)字的位置是固定的,所以我們只需要提取每一幅數(shù)字的圖片(沒(méi)有噪音點(diǎn)的)然后把每一個(gè)特殊數(shù)字獨(dú)有的象素位置記錄下來(lái),然后在網(wǎng)絡(luò)上提取需要破解的特征碼,祛除噪音點(diǎn),對(duì)其位置和記錄位置進(jìn)行比對(duì),那就是么就能確定相應(yīng)的數(shù)字了。