選自 Github
作者:George Hughey
機器之心編譯
每個人都討厭驗證碼,這些惱人的圖片中包含你必須輸入的字元,我們只有正確地填寫才能繼續訪問網站。驗證碼旨在確認訪問者是人還是程式,並防止惡意程式的入侵。然而,隨著深度學習和計算機視覺技術的發展,現在這些認證方法可以被我們輕鬆破解了。
在這一個專案中,作者破解了最新版的 ReCaptcha,並開源了所有程式碼。不過專案作者宣告:「這份程式碼能夠解決最新版的 ReCaptcha,但僅限於在自己網站上使用,且僅用於教育目的。」
reCAPTCHA 專案是由卡內基梅隆大學開始構建的系統,這個專案將從書本上掃描下來、無法被 OCR 準確識別的文字顯示在 CAPTCHA 問題中,從而判斷訪問者到底是程式還是人類。自 2014 年以來,reCAPTCHA 改為在「我不是機器人」(I’m not a robot)的方框中打勾,進而完成判別。
這個名為 unCaptcha 的專案最早建立於 2017 年 4 月,並在當時實現了 85% 的 ReCaptcha 對抗率。不過後來谷歌釋出了新版本的 ReCaptcha,且新版的 ReCaptcha 主要有以下兩個主要改進:
更好的瀏覽器自動檢測使用短語語音而不是數字
這些改進最開始成功地防禦了第一版 unCaptcha 的攻擊,然而到了 18 年 6 月份,這些挑戰基本都已被解決。本專案的作者同樣與 ReCaptcha 團隊取得了聯絡,他們完全瞭解這次攻擊。此外,ReCaptcha 團隊還允許該專案作者釋出 unCaptcha2 的程式碼,儘管它目前仍然能有效破解 ReCaptcha 驗證碼。
unCaptcha2 簡介
由於 ReCaptcha 新增了語音形式的驗證碼識別,破解 ReCaptcha 比以前變得更加容易。因為我們只需要呼叫一個免費的語音識別 API,對所有驗證碼的識別準確率就能達到 90% 左右。另外由於 ReCaptcha 會阻止瀏覽器自動化引擎 Selenium,unCaptcha2 會使用螢幕點選器(clicker)移動到螢幕上特定的畫素,從而像人一樣瀏覽網頁。當然在模擬人類瀏覽的過程中,每一個新使用者的座標都需要更新,這個目前並不是太魯棒。
unCaptcha2 的方法非常簡潔:
導航至谷歌的 ReCaptcha 演示網站導航至 ReCaptcha 的語音庫下載語音使用語音識別 API 識別語音解析 API 返回的引數和識別結果提交識別結果,判斷是否成功
如下所示 unCaptcha2 的測試介面:
如何使用 unCaptcha2
因為 unCaptcha2 必須指定螢幕上的特定座標,因此我們必須基於設定更新座標。這些座標更新的程式碼寫在了 run.py 檔案的最上面。在 Linux 系統中,使用命令列 xdotool getmouselocation—shell 可以定位滑鼠在螢幕上的座標位置。
我們還需要配置到底使用哪一個語音識別 API,國內的 BAT、訊飛和搜狗等都提供高效的語音識別 API,而國外的谷歌、微軟和 IBM 也一樣。谷歌、微軟和 IBM 的的 API 結構都已經在 queryAPI.py 中,我們只需要配置使用者名稱和密碼就行了。如果你要使用谷歌 API,我們需要使用谷歌應用的證照引數配置環境變數 GOOGLE_APPLICATION_CREDENTIAL。
最後,安裝剩下的依賴項就能愉快地破解了:pip install -r dependencies.txt。
閱讀更多
相信自己,沒有做不到的,只有想不到的
如果對技術開發比較感興趣,歡迎關注一起交流和學習!