網路城邦
上一篇 回創作列表 下一篇   字體:
供 JDownloader 2 運用的驗證碼解算器 CaptchaSolver
2024/10/07 06:20:00瀏覽2110|回應0|推薦26

颱風天居家無聊,上網路閒逛,無意間在 GitHub 發現這個 CaptchaSolver,用來自動解算所謂「驗證碼 Captcha」,方法挺有趣,實際在 JDownloader 2 試驗,也是管用的。記錄下來,萬一以後自己用得上😁。程式作者是 cracker0dks ,後面的方法說明大部份來自其文件,我只是摘要翻譯而已,詳情請看原文。

為不熟悉的朋友簡單做個背景介紹。 JDownloader 2 是個多用途檔案下載工具,可以用來下載包括油管影片在內的許多網路資源。「驗證碼 Captcha」則是用來防止非人類,換句話說就是自動化下載工具(例如 JD2),濫用網路資源的常見方法。許多免費網路空間,假如你不是付費會員的話,除了流量限制之外,也會利用「驗證碼 Captcha」來防堵程式自動下載。

「驗證碼 Captcha」是十分惱人的東西,為了防堵自動化程式,會花不少工夫把圖形弄得模糊錯亂,有時甚至肉眼難以辨識,真人都得嘗試錯誤兩三回。所以若有程式代勞,對懶惰的使用者其實也是福音。

以下圖片取自 CaptchaSolver 網站,但應該出自實際案例,沒什麼著作權問題,僅供參考。

案例一,相較於後面已經少見的案例三,算是對使用者友善的形式。你要回覆的,便是圖中隨機的六個英數字。對人類來說,困難處在於有時顏色太淡,或字形太過相似(如數字 1, 大寫的 i 和小寫的 L,1Il)而不易區分。對程式來說,頭一個麻煩是字體中空又有陰影,其次是大小不一、無基準線,有時更交錯、沾粘甚至重疊,最後是貫穿六個字的不規則曲線,都是針對傳統 OCR 的弱點進行干擾。相形之下,彩色不是問題,反而對使用者或程式都有助益。

原作者的對策是類神經網路,也就是今日很夯的 AI,很幸運地(原文: pure luck)找到那種特殊字型,得以寫程式產生如上圖的大量 Captchas 供訓練,產生特徵資料。如此一來可以避開上述對 OCR 而言的幾個嚴重障礙,取得實用成果。

當然,類神經網路是基於統計的猜測,原作者自稱正確率約 95%,但已經堪用。因為人眼不免出錯,即使答案不正確,網站通常會容許產生另一組驗證碼重新作答,最多有次數限制。

案例二,使用者要在下方十二個多邊形圖案中,找出與左上角相同者。看似不難,有時卻也因為顏色對比差(如上圖 7),難以辨識而出錯。對程式而言並不特別困難,麻煩主要在多邊形的大小、角度不一,此外因圖案過小而在邊緣產生鋸齒,不利於偵測。

原作者的對策:

  1. 將 12+1 個多邊形切割成小圖,分別進行高斯模糊及二值化,也就是圖案與數字同色,背景是另一個顏色。(似未提及如何處理數字沾粘的狀況)
  2. 個別小圖自中心向外填色(原作者自製的 bucket fill),將多邊形塗成白色。
  3. 計算每個白點與中心的距離,取最長者為半徑,再用12張圖與目標圖半徑之比,個別縮放到一致長度。
  4. 以半徑齊一的圖,計算個別多邊形面積。因為愈接近正圓的多邊形面積愈大(三角形最小),通過面積可以簡單分類。
  5. 最後將目標圖面積與各類別面積比對,最接近者即為答案。

案例三是最令人憎惡的驗證碼形式之一,別說我這老花眼,若是色弱或色盲,根本只有投降的份兒。難處很明顯,對人類和程式皆然:文字混在斑駁的噪訊和紊亂的線條中間,極難看清。原作者花不少篇幅解釋失敗的嘗試過程,姑且省略,只提最後解決多數案例的去噪方法。

原作者發現:

  1. 噪訊(雜點)、線條和文字,顏色都不一樣。
  2. 大多數案例中,文字不會頂天立地。

換句話說,找出與位於天地(上下方)相同顏色的點之後加以去除,文字就浮顯出來了。

然而此刻的文字、筆劃仍然處於分崩離析狀態,需要施以合適的演算法使之連綴,這部份複雜,直接看程式較快。完成後交給 OCR 處理,所幸單一字元旋轉幅度不大,大體能夠得到合理結果。

當然不可能百分之百正確,特別是文字沾天粘地的狀況,就徹底破功了。

最後是較為簡單、常見,也對使用者友善的案例。如上圖,相對突顯的黑色英數字,被外框包圍,背景有若干灰色雜點和線條,對 OCR 仍然具備一定程度的障礙,必須進行前處理。原作者仍然將試誤過程詳細講解,有興趣請慢慢看原文,這裡只摘錄重點步驟。

  1. 去外框。最簡單,外框固定在最外圍,顏色也相同。
  2. 去噪訊。也不難,因為文字接近純黑,取個合適邊界值進行二元化即可。
  3. 字元切割。區隔圖中個別字元,因為未必位於同一基準線,直接丟給 OCR 結果不佳。
  4. 修復補綴去噪過程中破壞的筆劃。幅度通常有限,簡單加粗減細即可。
  5. 以字元為單位,交給 OCR 處理。
  6. 組合後得到結果。

最後的最後,要放進 JD2 也很簡單,Windows 版直接下載(這裡) ,操作如下:

ZIP檔內容

解壓縮並複製到你的 JD2 資料夾,再啟動 JD2 即可

你的 JD2 並不會長得有什麼不同,只不過如果成功,原先需要人工輸入驗證碼的時機,就靜悄悄過去而已。不行的話請參看網站首頁 Trouble Shooting 部份。Mac 或 Linux 版本的安裝,比 Windows 複雜,也請自行參看。此外,目前版本只支援前兩種驗證碼,後兩種在舊版才有。

祝你使用愉快啦!

 
( 興趣嗜好電腦3C )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=jefnjil&aid=181139848