返回列表 上一主題 發帖

[發問] 圖形驗證(Captcha) 破解?

回復 7# GBKEE


    關於圖形驗證Captcha的方式,這是joey0415提供得[參考]來源
看不懂^_^!!          但跑驗證碼是正確的
  1. Public Declare Function GetClipboardData Lib "user32" (ByVal wFormat As Long) As Long
  2. Public Declare Function CloseClipboard Lib "user32" () As Long
  3. Public Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
  4. Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
  5. Private Declare Function GlobalSize Lib "kernel32" (ByVal hMem As Long) As Long
  6. Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
  7. Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
  8. '剪貼版資料格式定義
  9. Private Const CF_DIB = 8

  10. Sub 驗證碼識別()
  11.     Dim a(1 To 4)
  12.     Dim img       '(驗證碼)圖片
  13.     Dim CtrlRange '非文本物件集合
  14.     Dim bytClipData()  As Byte '定義位元組陣列
  15.     Dim arr(0 To 1260)
  16.     Dim ts As Integer
  17.     On Error Resume Next
  18.     Set Regedit_XG = CreateObject("WScript.Shell")              '創建一個空的VBS"殼"
  19.     Jz = Regedit_XG.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407")                   '讀取註冊表"安全設置-Internet區域"中的"允許對剪貼板進行編程訪問"設置(3=禁用、0=啟用、1=提示)原始值
  20.     Regedit_XG.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407", "0", "REG_DWORD"      '修改註冊表"安全設置-Internet區域"中的"允許對剪貼板進行編程訪問"設置(3=禁用、0=啟用、1=提示),使系統默認為"允許訪問剪貼板"
  21.     With CreateObject("InternetExplorer.application")           '創建一個空的ie
  22.         .Visible = True                                         '讓ie可見
  23.         .Navigate "http://119.145.135.38/fscx/web/loginForm.do" '導航到http://119.145.135.38/fscx/web/loginForm.do
  24.         Do Until .ReadyState = 4               '等待ie完畢載入
  25.             DoEvents
  26.         Loop
  27.         Set img = .Document.All.tags("img")(0) '指定(驗證碼)目標圖片
  28.         Set CtrlRange = .Document.body.createControlRange()  '創建非文本物件 ControlRange 集合
  29.         CtrlRange.Add img                      '向非文本物件 ControlRange 集合中添加 img 物件
  30.         CtrlRange.execCommand "Copy", True     '從 ControlRange 集合中copy img 物件(圖片)到剪貼板
  31.         Dim hMem As Long, lpData As Long
  32.         OpenClipboard 0&                       '打開粘貼板
  33.         hMem = GetClipboardData(8)             '獲得粘貼板資料,指定格式為:CF_DIB = 8
  34.         If CBool(hMem) Then
  35.             lpData = GlobalLock(hMem)          '鎖定記憶體物件hMen
  36.             lClipSize = GlobalSize(hMem)       '獲得粘貼板資料位元組數
  37.             If lpData <> 0 And lClipSize > 0 Then
  38.                 ReDim bytClipData(0 To lClipSize - 1) As Byte      '重新定義位元組陣列大小
  39.                 CopyMemory bytClipData(0), ByVal lpData, lClipSize '粘貼板轉化成位元組陣列
  40.             End If
  41.             GlobalUnlock hMem                  '解除鎖定記憶體物件hMen
  42.         End If
  43.         CloseClipboard                         '關閉粘貼板
  44.         For i = 1 To 1260                      '歸一化處理
  45.             ts = (Val(bytClipData((i - 1) * 3 + 40)) + Val(bytClipData((i - 1) * 3 + 41)) + Val(bytClipData((i - 1) * 3 + 42))) / 3 '40是圖片開始位元組
  46.             If ts > 150 Then
  47.                 ts = 0
  48.             Else
  49.                 ts = 1
  50.             End If
  51.             arr(i) = ts
  52.         Next i
  53.         For i = 1 To 4
  54.             a(i) = 0                                                          '0
  55.             If arr(13 * 60 + 8 + (i - 1) * 14) = 1 And arr(14 * 60 + 8 + (i - 1) * 14) = 1 Then a(i) = 1: GoTo 1 '16位色,所以乘以"3"RGB各占一位元組,60是寬,14是字間距,
  56.             If arr(4 * 60 + 6 + (i - 1) * 14) = 1 Then a(i) = 2: GoTo 1       '2
  57.             If arr(16 * 60 + 11 + (i - 1) * 14) = 0 Then a(i) = 3: GoTo 1     '3
  58.             If arr(7 * 60 + 5 + (i - 1) * 14) = 1 Then a(i) = 4: GoTo 1       '4
  59.             If arr(12 * 60 + 9 + (i - 1) * 14) = 1 Then a(i) = 5: GoTo 1      '5
  60.             If arr(9 * 60 + 8 + (i - 1) * 14) = 1 And arr(11 * 60 + 9 + (i - 1) * 14) = 1 Then a(i) = 6: GoTo 1  '6
  61.             If arr(16 * 60 + 13 + (i - 1) * 14) = 1 Then a(i) = 7: GoTo 1     '7
  62.             If arr(10 * 60 + 8 + (i - 1) * 14) = 1 And arr(11 * 60 + 8 + (i - 1) * 14) = 1 Then a(i) = 8: GoTo 1 '8
  63.             If arr(9 * 60 + 9 + (i - 1) * 14) = 1 Then a(i) = 9               '9
  64. 1:
  65.         Next i
  66.         Cells(1, 1) = a(1) & a(2) & a(3) & a(4)             '識別後的驗證碼
  67.         .Document.All.tags("INPUT")(0).Value = "1234567890" '填寫登錄名
  68.         .Document.All.tags("INPUT")(1).Value = "0987654321" '填寫密  碼
  69.         .Document.All.tags("INPUT")(2).Value = Cells(1, 1)  '填寫驗證碼
  70.         .Document.All.tags("img")(1).Click                  '點擊"登錄"按鈕
  71.         '.Quit                     '關閉ie
  72.         'MsgBox "OK"
  73.     End With
  74.     Regedit_XG.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\Zones\3\1407", Jz, "REG_DWORD"      '恢復註冊表"安全設置-Internet區域"中的"允許對剪貼板進行編程訪問"設置(3=禁用、0=啟用、1=提示)原始值
  75.     Set Regedit_XG = Nothing      '釋放VBS"殼"
  76. End Sub
複製代碼

TOP

回復 7# GBKEE


    對不起!忘了附上URL
下載CSV相關位址:
(1)不知道用的上?!
http://bsr.twse.com.tw/bshtm/bsMenu.aspx?__EVENTTARGET=&__EVENTARGUMENT=&__VIEWSTATE=%2FwEPDwUKLTQzNzI3ODE3MQ9kFgICAQ9kFg4CBQ8WAh4JaW5uZXJodG1sBQoyMDEzLzA5LzI3ZAIGDxYCHwAFCDIwMTMwOTI3ZAIIDw8WBh4JRm9udF9Cb2xkZx4EXyFTQgKEEB4JRm9yZUNvbG9yCj1kZAIKD2QWAgIBDw9kFgIeB09uQ2xpY2sFHGphdmFzY3JpcHQ6YnV0Q2xlYXJfQ2xpY2soKTtkAgwPDxYGHwFoHwIChBAfAwpHZGQCDg8PFgIeB1Zpc2libGVoZGQCEA8PFgYfAWgfAgKEEB8DCkdkZGSiKU%2Fti2BvI3vsAvp%2BUySKAAAAAA%3D%3D&__EVENTVALIDATION=%2FwEWCQKGnJS3DwLjpuXcAwKN4Ij0CwLB5ZfoCQLjk6TKBwKY8en5CwLdkpmPAQL6n7vzCwLAhrvLBeRfGpOZWTxdVZsdlLXS6sgAAAAA&HiddenField_spDate=&HiddenField_page=PAGE_DownloadBS&txtTASKNO=%E8%AB%8B%E8%BC%B8%E5%85%A5%E8%82%A1%E7%A5%A8%E4%BB%A3%E7%A2%BC&hidTASKNO=&Button_DownloadBS=%3C%E4%B8%8B%E8%BC%89+CSV%3E

(2)Download
http://bsr.twse.com.tw/bshtm/bsDownload.aspx?__VIEWSTATE=%2FwEPDwUJNDA4NDA2OTYwZGSrd3Tlksjh9VIjA2KPwnxSAAAAAA%3D%3D&__EVENTVALIDATION=%2FwEWBgLgmuzfAwLPiaeCCQLNkNdZAs%2Bk8%2FwMAp%2BC7OYNAsyPx6EHbi4KW9bFIDAKFtSJoAwOXQAAAAA%3D&HiddenField_Download=&TextBox_Stkno=股票代號&TextBox_VerifyCode=驗證碼&Button_Download=%E4%B8%8B%E8%BC%89

TOP

回復 10# joey0415


VBA我懂很少耶!!

測試心得   
(1)可以先導向http://bsr.twse.com.tw/bshtm/bsDownload.aspx?__VIEWSTATE=%2FwEPDwUJNDA4NDA2OTYwZGSrd3Tlksjh9VIjA2KPwnxSAAAAAA%3D%3D&__EVENTVALIDATION=%2FwEWBgLgmuzfAwLPiaeCCQLNkNdZAs%2Bk8%2FwMAp%2BC7OYNAsyPx6EHbi4KW9bFIDAKFtSJoAwOXQAAAAA%3D&HiddenField_Download=&TextBox_Stkno=股票代碼
(2)再輸入驗證碼 (這,我也不會 ^_^ ,抱歉!)
(3)其後,驗證碼正確後  if(document.getElementById('HiddenField_Download').value == 'OK')
好像還得回到 http://bsr.twse.com.tw/bshtm/ 才會完成 [下載]

好像是這樣 (搔頭傻笑

TOP

本帖最後由 HSIEN6001 於 2013-10-1 10:41 編輯

回復 15# lalalada

試試這個!!藍天大寫的
驗證識別.rar (13.26 KB)
各樣式驗證碼識別 : http://club.excelhome.net/thread-896161-1-1.html
藍天大的Blog http://blog.csdn.net/a814153a/article/details/9375971
liucqa : http://club.excelhome.net/thread-897117-1-1.html
參考 : http://bbs.csdn.net/topics/390090057
論文 : http://www.digitaltrends.com/web/stanford-researchers-crack-captcha-codes/
-----------------------------------
抱歉!!以上我是,有看沒有懂  ^^

僅以下測試,完成下載券商日報表,流程:
(1)導向 http://bsr.twse.com.tw/bshtm/bsDownload.aspx?__VIEWSTATE=%2FwEPDwUJNDA4NDA2OTYwZGSrd3Tlksjh9VIjA2KPwnxSAAAAAA%3D%3D&__EVENTVALIDATION=%2FwEWBgLgmuzfAwLPiaeCCQLNkNdZAs%2Bk8%2FwMAp%2BC7OYNAsyPx6EHbi4KW9bFIDAKFtSJoAwOXQAAAAA%3D&HiddenField_Download=&TextBox_Stkno=1101  '先指定股票代號
(2)券商日報表的驗證碼,[待高手解決囉!] http://bsr.twse.com.tw/bshtm/VerifyImage.aspx?tick=635162133074615000
(3)回到 http://bsr.twse.com.tw/bshtm/
(4).Document.getElementById("Button_DownloadBS").Click                    '點擊,"下載CSV"

TOP

        靜思自在 : 為自己找藉口的人永遠不會進步。
返回列表 上一主題