按鍵精靈最原始的簡單驗證碼識別法

金豬腳本(原飛豬腳本)以按鍵精靈教學為主,涉及UiBot,Python,Lua等腳本編程語言,教學包括全自動辦公腳本,遊戲輔助腳本,引流腳本,網頁腳本,安卓腳本,IOS腳本,註冊腳本,點贊腳本,閱讀腳本以及網賺腳本等各個領域。想製作腳本和學習按鍵精靈的朋友可以添加按鍵精靈學習交流群:554127455 學習路上不再孤單,金豬腳本伴你一同成長.

按鍵精靈最原始的簡單驗證碼識別法

上一篇院刊我們已經介紹了幾種常見的驗證碼形式,相信大家對驗證碼都有了一定的瞭解,這期我們就去了解下一些簡單驗證碼的識別的思路和流程,在破解驗證碼中需要用到的知識一般是 像素、線、面等基本2維圖形元素的處理和色差分析,這方面小編也是剛剛接觸,所以今天就重點介紹下在不使用第三方插件的情況下最原始的依靠像素識別數字、字母的方法——點陣識別法

[tr=rgb(154, 205, 50)]什麼是點陣?

簡單的說,點陣就是一幅位圖。一般默認都指單色位圖,即它是用一個bit(位)表示一個點(像素),在二進制數系統中,每個0或1就是一個位(bit),位是內存的最小單位,點陣就是指在顯示屏上一個字或圖像的寬或高是由多少個像素點組成,比如拿圍棋盤來比做點陣,你在圍棋盤上的橫豎8個格子中用棋子擺出的字或圖形就是就是8*8點陣的了

知道點陣分佈後我們怎能去識別它呢,我們以數字為例

[tr=rgb(154, 205, 50)]如何用點陣識別法識別數字?

按鍵精靈最原始的簡單驗證碼識別法

首先,要識別一個數字,我們先截取這個數字的圖像,截取的範圍最好按照數字的邊緣截取,截取過大的話做點陣麻煩,這裡要注意下我們在驗證碼識別中最常用的是24位的BMP格式的圖片,因為BMP是一種不壓縮的圖片格式,所以截圖的話BMP格式最為清楚。如果用JPG,圖片被壓的可能和原版都不一樣了,就更別提識別了,截取相應的數字圖後我們把它弄到按鍵抓抓圖像處理處,放大並顯示網格顯示如圖

按鍵精靈最原始的簡單驗證碼識別法

從圖上不難看出這裡的每個數字(除1外)都是由橫5、豎8,及5行8列共40個像素組成的,我們把白色部分都當做是0,黑色部分,也就是構成數字的主體部分,當做是1,按照從左到右順序從左邊第一個格子開始排列:

0就可以看成0111010001100011000110001100011000101110

1就可以看成0010001100001000010000100001000010001110

依此類推,然後我們套用相應的代碼

  1. '賦值下十個特徵碼,開頭代碼執行一次就可以了
  2. NO0="0111010001100011000110001100011000101110"
  3. NO1="0010001100001000010000100001000010001110"
  4. NO2="0111010001100010001000100010001000011111"
  5. NO3="0111010001000010011000001000011000101110"
  6. NO4="0001000110010100101010010011110001000011"
  7. NO5="1111110000100001111000001000011000101110"
  8. NO6="0111010010100001111010001100011000101110"
  9. NO7="1111110010000100010000100001000010000100"
  10. NO8="0111010001100010111010001100011000101110"
  11. NO9="0111010001100011000101111000010100101110"
  12. MsgBox GetShu(283, 258, 6, 4, "000000")
  13. '以下是寫好的函數模塊,寫好基本就不用修改了,需要的時候調用執行即可
  14. Function GetShu(x, y, z, n, col)'傳入要識別的數字前臺左上角座標xy,倆數間間距z,數量n,字體顏色col
  15. GetShu = ""
  16. Dim code, temp_x, i_x, i_y, num
  17. For temp_x = 0 To n - 1
  18. code = ""
  19. For i_y = 0 To 7
  20. For i_x = 0 To 4
  21. If GetPixelColor(x + i_x + temp_x * z, y + i_y) = col Then
  22. code = code & "1"
  23. Else
  24. code = code & "0"
  25. End If
  26. Next
  27. Next
  28. If code = NO0 Then
  29. num="0"
  30. ElseIf code = NO1 Then
  31. num="1"
  32. ElseIf code = NO2 Then
  33. num="2"
  34. ElseIf code = NO3 Then
  35. num="3"
  36. ElseIf code = NO4 Then
  37. num="4"
  38. ElseIf code = NO5 Then
  39. num="5"
  40. ElseIf code = NO6 Then
  41. num="6"
  42. ElseIf code = NO7 Then
  43. num="7"
  44. ElseIf code = NO8 Then
  45. num="8"
  46. ElseIf code = NO9 Then
  47. num = "9"
  48. Else
  49. num = "?"
  50. End If
  51. GetShu = GetShu & num
  52. Next
  53. End Function

複製代碼

可能有點童鞋看不懂,可以看下視頻演示地址,就容易理解了(雖然不完整):http://www.aipai.com/c8/ODY9JSklI2gnaiMv.html

[tr=rgb(154, 205, 50)]點陣法的侷限性

其實點陣法並不是很好用,但是它又比較基礎,很多解決驗證碼的圖像處理和方法都跟它沾邊,所以今天主要是想讓不懂點陣法的童鞋知道下思路,有相應的拓展空間

它的侷限性:

1.缺點很明顯,必須是字體清晰,字與字間距一致的才可正常識別

2.字體不同,粗細不同,點陣特徵都不一樣,沒有哪個點陣特徵碼是可以通用的。

3.識別數字或字母的方法和思路有很多,並不是單一的點陣(一點一點的)識別,,每種識別方法都各有利弊。


分享到:


相關文章: