1. 程式人生 > >圖像識別練習(flash驗證碼)

圖像識別練習(flash驗證碼)

探討

野比 2012

由於破解可能給他人帶來困擾,所以我只說大概的思路,不會提供源碼。

-----------------

本次目標是www.iboling.com的flash驗證碼。

這個網站很新穎,用的是flash動畫,隨機給出大小球,然後讓用戶用鼠標點擊相應的球,實現驗證碼輸入。像這樣

技術分享

本來這是個很不錯的思路,跳出了「幹擾線」「扭曲字」等驗證碼的思維定勢。但方式新穎並不代表能高枕無憂。

因為復雜度不夠,所以反而容易破解。

有幾個缺點:

1.顏色單一(很好識別)

2.下方候選球滾動緩慢(足夠程序識別完再點擊)

3.鼠標懸停(哪怕機器慢,只要控制鼠標懸停,就可以讓候選球停止滾動)

4.不能加快速度或取消懸停(因為這樣「人」就沒法選了)

破解思路:

1.找到網頁中驗證碼位置和大小(很容易)

2.截圖采樣(驗證碼圖片和候選球圖片)

3.分別從圖像中提取全部色塊及其對應的Rectangle(大約25x25),存入big和small

4.遍歷對比候選球和驗證碼,顏色近似則可認為匹配

5.根據候選球的Rectangle,加上第2步裏截圖的offset,計算候選球在屏幕上的絕對位置

6.編程或用按鍵精靈在候選球上click一下

7.每次處理一個球,然後等等,給flash一個反應時間。

下面是破解樣本(數字不準,因為有廢棄識別被程序過濾掉了)

技術分享

技術分享

技術分享

技術分享

關於速度

速度的問題大家會很關心,但我可以說速度不是問題。

首先,因為候選區是鼠標懸停的。所以哪怕我機器再爛再慢,我可以先懸停,讓它停止滾動,然後再慢慢「一百遍一百遍」。

其次,就算一直滾動,但因為要讓人點擊,所以不可能滾動太快。在我的i3機器上,沒有優化的識別速度大約10fps,優化過後識別率提升到40~50fps,遠遠超過人的反應速度。也就說這個驗證碼只要人能點,機器就可以點。

改進意見

1.使用帶圖案,帶紋理的小球

2.隨機改變小球形狀

3.驗證碼和候選球不需要完全一樣,只需要人能看懂「相似」就行(比如驗證碼是數字「貳」,候選球是阿拉伯「2」),這樣機器基本不太可能識別

4.增加背景復雜度,比如圖片背景

暫時想到這麽多,歡迎各位朋友一起探討。

野比 2012


圖像識別練習(flash驗證碼)