• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 突破百度貼吧的驗證碼限制

    發表于:2007-07-02來源:作者:點擊數: 標簽:
    百度,作為國內搜索引擎的大戶,為了進一步擴大自己的用戶群,專門開設了“百度貼吧”(2003年11月百度貼吧 ()自從誕生以來逐漸成為世界最大的中文交流平臺!當用戶在百度搜索引擎中搜索出需要搜索的關鍵字,點擊“貼吧”即可進入以關鍵字為專題的相應貼吧)

    百度,作為國內搜索引擎的大戶,為了進一步擴大自己的用戶群,專門開設了“百度貼吧”(2003年11月百度貼吧 ()自從誕生以來逐漸成為世界最大的中文交流平臺!當用戶在百度搜索引擎中搜索出需要搜索的關鍵字,點擊“貼吧”即可進入以關鍵字為專題的相應貼吧)的服務。操作簡單而又針對性,這是貼吧火極一時的重要原因,可正因為如此,百度貼吧的安全性又怎么樣呢?這就是我們今天探討的話題!
    相信大家都有在論壇灌水的經歷吧?但是如果你連續發表統一內容的東西在論壇中,不久論壇的整個板塊就全是你發表的信息了,其他信息全被擠在了后面。假設你發表的信息夠多,版主都刪不完時,那么這個論壇基本就報廢了!其他的商業論壇也意識到了防止惡意灌水的重要性,紛紛使用了一些防止惡意灌水的措施,有發貼間隔時間的限制、同一IP地址的發貼數限制、內容不能重復等,但是這些都不是今天的重點,由于百度使用的是一個公用發貼表單,允許匿名發帖,需要突破唯一的難點是驗證碼。(為了防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試或是防止不斷提交某網絡信息而采用的一種網絡通行方式。隨機生成字符信息放入圖片中,防止計算機直接識別。比如招商銀行的網上個人銀行,騰訊的QQ社區等等)
    這時驗證碼在整個系統中就扮演了了一個至關重要的角色。如果我們能突破它,寫一個自動發布的程序,那么我們來算一算:假設每兩秒程序post一次,一分鐘就是30次、 一小時就有30×60=1800次、 一天就有1800×24=43200次!如果我們把發貼程序或是密碼窮舉程序掛在很多肉雞上,進行同時工作,那么結果可想而知!筆者曾親目睹過國內某著名安全論壇就是驗證碼被人破解,導致被人惡意灌水,最后完全崩潰!當然還有某網絡銀行也因此類原因導致用戶密碼被盜等眾多事件。筆者也作如下聲明:下文介紹的方法并不是有意針某公司或是某機構,只是作為技術交流,如果部分讀者利用本文介紹的方法進行破壞或是窮舉他人密碼,這已經違法了法律,那么責任由他自己承擔,與筆者無關!
    好了,我們可以進入正題了(以下出現的代碼為delphi寫的部分源碼,為了防止任意利用,我以介紹方法為主,如果讀者感興趣,可以自己組合編寫完整,在本文附帶的程序中,筆者提供了一個驗證碼參數確定程序(附源碼))。驗證碼分為如下幾類:數字型、字符型、符號型、綜合型。
    我們看了看百度貼吧的驗證碼如圖: 是屬于數字型的!不過其圖片中生成了不少彩色和黑白的噪音點(指驗證圖片上的斑點)。那么我們應該怎么去識別呢?傳統的驗證碼識別方式很簡單,由于數字的位置是固定的,所以我們只需要提取每一幅數字的圖片(沒有噪音點的)然后把每一個特殊數字獨有的象素位置記錄下來,然后在網絡上提取需要破解的特征碼,祛除噪音點,對其位置和記錄位置進行比對,那就是么就能確定相應的數字了。
    總結一下傳統的就是:
    1.先分析驗證碼,前景顏色是否不定
    2.然后把驗證碼的寬度/驗證碼文字個數,比如一驗證碼下載后寬度為60,有4個數字,那么就60/4=15,然后保存每個字,如果只有數字保存0-9數字到位圖文件,如果英文那更麻煩點,0-9,A-Z都要保存到位圖,位圖的前景色都不變,保持一種顏色,背景隨便你改不改
    3.如果前景要變則將文字統一為同種顏色,每個數字0-9的點陣都有個公共點,取該公共點顏色然后把前景全部統一成一種顏色,比如白色{255,255,255},位圖的結構是BGR,而不是RGB
    4.然后進行比較,如果驗證碼的一點為白色,第2步保存的位圖同一點也是白色,那么頻率增加1
    5.最后頻率最高的就是驗證碼了!
    可是這種傳統的識別方法卻遇到了挑戰!如果圖片數字的位置也是隨機出現,大小也是隨機出現,那么這種識別方法也就失效了,百度貼吧的就是這樣的驗證碼。
    筆者這里向大家引入一個專有名詞:“hough變換”也許學習計算機圖像學的朋友知道,筆者還是簡要介紹一下:
    直線hough變換:直線Hough變換利用圖像空間和Hough參數空間的點-線對偶性,把圖像空間中的檢測問題轉換到參數空間。通過在參數空間里進行簡單的累加統計,然后在Hough參數空間尋找累加器峰值的方法檢測直線。例如,圖1(a)中的九條線段對應于如圖1(b)所示的其Hough參數空間的九個累加器峰值。圖1(b)中,Hough參數空間的橫縱坐標分別為直線極坐標方程:ρ=x×cos(θ) + y×sin(θ) 的兩個參數ρ和θ。九個峰值的ρ和θ值唯一的確定其對應線段所在直線的兩個參數。并且線段的長度決定坐標(ρ,θ)處的累加值的大小。
    1(a)
    1(b)
    沒有明白的讀者可以多讀兩遍(數學啊數學?。?,還是比較好理解。其實講通俗一點,就是我們只要利用這個方程ρ=x×cos(θ) + y×sin(θ)統計出ρ出現的次數,就可以確定一條直線,比如說圖片中我們計算出了某個方向(θ的大?。┑摩殉霈F次數的最大值,那么這就是這個方向最長的直線了!
    好了,知道了hough變換檢測直線的原理,那么我們就來寫段代碼
    var
    p: PByteArray;
    Gray, x, y,i1,i2: Integer;
    Bmp: TBitmap;
    begin
    listbox1.Clear;
    listbox2.Clear;
    Bmp := TBitmap.Create;
    Bmp.Assign(Image2.Picture.Bitmap);
    //設置為24位真彩色
    Bmp.PixelFormat := pf24Bit;
    randomize;
    for y := 0 to Bmp.Height - 1 do
    begin
    p := Bmp.scanline[y];
    for x := 0 to Bmp.Width - 1 do
    begin
    //一個象素點三個字節
    Gray := Round(p[x * 3 + 2] * 0.3 + p[x * 3 + 1] * 0.59 + p[x
    * 3] * 0.11);
    if gray > 128 then //全局閥值128
    begin
    end
    else
    begin
    i1:=x;//表示檢測的θ為0度
    i2:=y; //表示檢測的θ為90度
    ListBox1.Items.Add(inttostr(i1));//用于日后算出現的次數,當然也可以用數組!
    ListBox2.Items.Add(inttostr(i2));
    end;
    end;
    end;
    Image2.Picture.Bitmap.Assign(Bmp);
    Bmp.Free;
    這段代碼的意思就是檢測圖片0度和90度的直線。

    [1]    

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>