成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

利用JavaScript破解驗證碼

原創
安全 黑客攻防
通過閱讀源代碼,我們不僅可以更好地理解其工作原理,也可以領會這個驗證碼究竟是如何實現的。就像前面看到的那樣,這里使用的驗證碼不是很復雜——每個驗證碼有三個字符組成,每個字符使用一種不同的顏色,并且只使用26個字母中的字符,而所有字符都使用同一種字體。

【51CTO.com 獨家翻譯】

 

原文:http://ejohn.org/blog/dom-insertadjacenthtml/

 

近日,網上驚現可以破解驗證碼的JavaScript腳本——GreaseMonkey!由“Shaun Friedle”開發的這段腳本可以輕松搞定Megaupload站點的CAPTCHA。如果您不相信的話,可以到http://herecomethelizards.co.uk/mu_captcha/親自嘗試一下!

 

現在,Megaupload站點提供的CAPTCHA在上述代碼面前已經敗下陣來,說實話,這里的驗證碼設計的不不太好,下面給出一些例子:

圖1

但是,更有趣的是:

1.HTML 5中的Canvas應用程序接口getImageData可以用來從驗證碼圖像中取得像素數據。利用Canvas,我們不僅可以將一個圖像嵌入一個畫布中,而且之后還可以再從中重新提取出來。

2.上述的腳本中包含一個完全使用JavaScript實現的神經網絡。

3.使用Canvas從圖像中提取出像素數據后,將其送入神經網絡,通過一種簡單的光學字符識別技術來推測驗證碼中到底使用了哪些字符。

通過閱讀源代碼,我們不僅可以更好地理解其工作原理,也可以領會這個驗證碼究竟是如何實現的。就像前面看到的那樣,這里使用的驗證碼不是很復雜——每個驗證碼有三個字符組成,每個字符使用一種不同的顏色,并且只使用26個字母中的字符,而所有字符都使用同一種字體。

第一步的用意很明顯,那就是把驗證碼拷貝到畫布上,并且把它轉化為灰度圖。

function convert_grey(image_data){

  for (var x = 0; x < image_data.width; x++){

    for (var y = 0; y < image_data.height; y++){

      var i = x*4+y*4*image_data.width;

      var luma = Math.floor(image_data.data[i] * 299/1000 +

        image_data.data[i+1] * 587/1000 +

        image_data.data[i+2] * 114/1000);

 

      image_data.data[i] = luma;

      image_data.data[i+1] = luma;

      image_data.data[i+2] = luma;

      image_data.data[i+3] = 255;

    }

  }

}

 

然后,將畫布分成三個單獨的像素矩陣,每個矩陣包含一個字符。這一步實現起來非常容易,因為每個字符都使用一種單獨的顏色,所以通過顏色就可以將其區分開來。

filter(image_data[0], 105);

filter(image_data[1], 120);

filter(image_data[2], 135);

function filter(image_data, colour){

  for (var x = 0; x < image_data.width; x++){

    for (var y = 0; y < image_data.height; y++){

      var i = x*4+y*4*image_data.width;

 

      // Turn all the pixels of the certain colour to white

      if (image_data.data[i] == colour) {

        image_data.data[i] = 255;

        image_data.data[i+1] = 255;

        image_data.data[i+2] = 255;

    

      // Everything else to black

      } else {

        image_data.data[i] = 0;

        image_data.data[i+1] = 0;

        image_data.data[i+2] = 0;

      }

    }

  }

}

 

最終,所有無關的干擾像素都被剔除出去。為此,可以先查找那些前面或者后面被黑色(未匹配的)像素圍繞的白色(匹配過的)像素,然后將匹配過的像素刪除即可。

var i = x*4+y*4*image_data.width;

var above = x*4+(y-1)*4*image_data.width;

var below = x*4+(y+1)*4*image_data.width;

 

if (image_data.data[i] == 255 &&

    image_data.data[above] == 0 &&

    image_data.data[below] == 0)  {

  image_data.data[i] = 0;

  image_data.data[i+1] = 0;

  image_data.data[i+2] = 0;

}

 

現在我們已經得到了字符的大約圖形,但在將其載入神經網絡之前,腳本還會進一步對它進行必要的邊緣檢測。腳本會尋找圖形最左、右、上、下方的像素,并將其轉化為一個矩形,接著把矩形重新轉換為一個20*25像素的矩陣。

cropped_canvas.getContext("2d").fillRect(0, 0, 20, 25);

var edges = find_edges(image_data[i]);

cropped_canvas.getContext("2d").drawImage(canvas, edges[0], edges[1],

  edges[2]-edges[0], edges[3]-edges[1], 0, 0,

  edges[2]-edges[0], edges[3]-edges[1]);

 

image_data[i] = cropped_canvas.getContext("2d").getImageData(0, 0,

  cropped_canvas.width, cropped_canvas.height);

 

經過上面的處理,我們得到了什么呢? 一個20*25的矩陣,其中包含單個矩形,其中填由黑白色。真是太好了!

然后,會對這個矩形做進一步的簡化。我們策略性地從矩陣中提取一些點,作為“光感受器”,這些光感受器將輸送到神經網絡。舉例而言,某個光感受器具體對應的可能是位于9*6位置像素,有像素或者沒有像素。腳本會提取一系列這樣的狀態(遠少于對 20*25矩陣整個計算的次數——只提取64種狀態),并將這些狀態送入神經網絡。

您可能要問,為什么不直接對像素進行比較?有必要使用神經網絡嗎?問題的關鍵在于,我們要去掉那些模棱兩可的情況。如果您試過前面的演示就會發現,直接進行像素比較比通過神經網絡比較,更容易出錯,盡管出錯的時候不多。但我們必須承認,對于大部分用戶來說,直接的像素比較應該已經夠用了。

下一步就是嘗試猜字母了。神經網絡中導入了64個布爾值(由其中的一個字符圖像獲取而來),同時包含一系列預先計算好的數據。神經網絡的理念之一,就是我們希望得的結果事先就是知道的,所以我們可以針對結果對神經網絡進行相關的訓練。腳本作者可以多次運行腳本,并收集了一系列最佳評分,這些評分能幫助倒推出產生它們的那些值,從而幫神經網絡猜出答案,除此之外,這些評分沒有任何特殊意義。

當神經網絡對驗證碼中一個字母對應的64個布爾值進行計算以后,和一個預先計算好的字母表相比較,然后為和每個字母的匹配都給出一個分數。(最后的結果可能類似:98%的可能是字母A,36%的可能是字母B等。)

當對驗證碼中的三個字母都經過處理以后,最終的結果也就出來了。需要注意的是,該腳本無法達到100%正確性(不知道如果在開始的時候不將字母轉換成矩形,是不是可以提高評分的精度),但這已經相當好了,至少對于當前的用途來說是這樣。而且所有的操作都是在基于標準的客戶端技術實現的瀏覽器中完成的!

補充說明一下,這個腳本應該算是一個特例吧,這項技術可能會很好的工作在在其它簡陋的驗證碼上,但對于復雜的驗證碼來說,就有點鞭長莫及了(尤其是這種基于客戶端的分析)。但愿有更多人能從這個項目中受到啟發而開發出更奇妙的東西來,因為它的潛力實在是太大了。【51CTO.COM 獨家翻譯,轉載請注明出處及譯者!】

【編輯推薦】

  1. 黑客入侵全球提款機 10小時盜領逾千萬
  2. SQL注入攻擊及其防范檢測技術研究
  3. 分析ARP病毒是如何利用的Javascript技術的
責任編輯:王文文 來源: 51CTO.com
相關推薦

2017-12-19 09:05:39

2014-04-08 11:28:52

驗證碼破解

2015-03-17 09:28:04

2013-10-29 13:31:36

2013-06-19 10:19:59

2009-08-11 14:05:28

JSP驗證碼

2020-11-16 07:28:53

驗證碼

2015-03-23 17:58:04

驗證碼倒計時并行

2015-09-21 15:31:05

php實現驗證碼

2017-12-21 07:38:19

2021-01-19 10:29:34

短信驗證碼密碼

2022-02-11 07:10:15

驗證碼

2017-12-15 10:37:22

2011-11-02 12:43:33

2011-11-02 16:46:41

2019-06-18 07:12:25

驗證碼漏洞加密

2009-08-13 10:47:29

C#創建驗證碼

2020-07-31 07:56:47

驗證碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久国产精品 | 断背山在线观看 | 日本黄色影片在线观看 | 欧美日韩在线一区二区三区 | 91麻豆产精品久久久久久夏晴子 | 国产精品久久久久久影院8一贰佰 | 国产91色在线 | 亚洲 | 久久久久精| 久久久久亚洲 | h视频免费观看 | 欧美午夜激情在线 | 久久精品亚洲精品国产欧美 | 亚洲精品综合 | 特级黄一级播放 | 久久亚洲综合 | 天天干天天插天天 | 日一区二区 | 狠狠干天天干 | 精品国产精品国产偷麻豆 | 日韩精品在线观看一区二区三区 | 国产伦精品一区二区三区精品视频 | 欧美日本一区二区 | 亚洲激情一区二区三区 | 精品国产乱码久久久久久久久 | 一区二区国产精品 | 午夜视频在线观看一区二区 | 欧美电影免费观看高清 | 一区二区中文字幕 | 成人精品一区二区三区中文字幕 | 精品少妇一区二区三区日产乱码 | 在线视频一区二区三区 | 欧美日韩国产精品一区 | 国产丝袜一区二区三区免费视频 | 国产电影一区二区在线观看 | 国产精品一区二区在线观看 | 久久综合久久自在自线精品自 | 久久国产精品久久久久久 | 91一区二区 | 亚洲精品久久久一区二区三区 | 成人福利片 | 精品视频一区二区 |