圖像識別練習(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驗證碼)