javascript
凡科网JS逆向后跳出的滑块验证(base64图片解码之后的破解滑块验证)
目錄
? ? ?? 1.前提和大概思路概述
? ? ?? 2. 轉換思路selenium和驗證滑塊圖片的獲取處理
? ? ?? 3.總結
? ? ? 1.前提和大概思路概述 ?
? ? ? ? 只是學習的途中有一些新的發現,分享給大家,希望對你們有幫助。
? ? ? ? 凡科網的JS逆向的閉包技巧應該是典型的閉包案例,很多人都有講解,這里只做一個粗略介紹。
?
?
?正常完成逆向之后,進行模擬登錄,好像是因為我的多次請求,出現了滑塊驗證
?先要做的是拿到底圖和完整圖或者滑塊,但凡科網的這里只能找到圖片base64偽加密后的imgId和sliderId,發起對應請求想得到后解碼,奈何自己實在試過一堆法子,一直請求失敗,無奈下換用selenium做模擬登錄,重要的還是做滑塊的思路嘛(實際還是自己實力不夠--)
{'success': False, 'msg': {'dealType': 1, 'capErrno': -2}}? ? ? ?
? ? ?? 2. 轉換思路selenium和驗證滑塊圖片的獲取處理
????????用到的庫:
from selenium.webdriver import Chrome import time import requests from selenium.webdriver.common.action_chains import ActionChains import base64 import numpy as np import cv2 as cv? ? ? ? ?? 先模擬登錄一下試試
# ***中輸入你的賬號和密碼web = Chrome()web.get('https://i.fkw.com/')time.sleep(1)web.find_element_by_xpath('//*[@id="loginCacct"]').send_keys('***')web.find_element_by_xpath('//*[@id="loginPwd"]').send_keys('***')time.sleep(1)web.find_element_by_xpath('//*[@id="login_button"]').click()time.sleep(2)? ? ? ? 好家伙一下子就進去了,可畢竟咱們是長見識為主,所以咱拿錯誤的賬號密碼來做試驗(正確的重復多次登錄后也會出現)
? ? ? ? 現在的重點主要是獲取到對應的圖片base64編碼后的數據,在進行解碼,存儲圖片。(注意只需要base64后的數據,要對數據做一定處理)
ImgId_str = web.find_element_by_xpath('/html/body/div[4]/div/div[2]/div/div/div[3]/div/div[1]/div[1]/img[1]').get_attribute('src')ImgId = '/' + ImgId_str.strip('data:image/jpeg;base64,')sliderId_str = web.find_element_by_xpath('/html/body/div[4]/div/div[2]/div/div/div[3]/div/div[1]/div[1]/img[2]').get_attribute('src')sliderId = 'i' + sliderId_str.lstrip('data:image/jpeg;base64,')? ? ? ?? 發現得到的這大串玩意,看起來蠻爽
? ? ? ?? 開始解碼,好像規則里的 整除加= 不是很有作用,我試了試加不加都可以(可能是我忽略了細節), 把滑塊和底圖都存儲起來。
def decode_base64(strs,i):if(len(strs)%4 == 1):strs += "==="elif(len(strs)%4 == 2):strs += '=='elif(len(strs)%4 == 3):strs += '='imgdata = base64.b64decode(strs)file = open(f'{i}.jpg','wb')file.write(imgdata)file.close()????????用cv.TM_CCOEFF_NORMED算法進行精度匹配,將一維位置轉換為二維位置,得到x,y的坐標。
Img_ = cv.imread('1.jpg')slider_ = cv.imread('2.jpg')result = cv.matchTemplate(Img_, slider_, cv.TM_CCOEFF_NORMED)yiwei_ = np.argmax(result) x, y = np.unravel_index(yiwei_, result.shape) time.sleep(2)# print(x,y)? ? ? ? 找到滑的地方,模擬人工滑動,即可完成。(注意傳輸的坐標值)
web.implicitly_wait(10)btn = web.find_element_by_xpath('/html/body/div[4]/div/div[2]/div/div/div[3]/div/div[1]/div[2]/div[1]/div')ActionChains(web).drag_and_drop_by_offset(btn, xoffset=y, yoffset=0).perform()? ? ?? 3.總結
? ? ? ? 對圖片base64解碼處理后的滑塊驗證,很多地方都可以優化,比如如何讓匹配速度更快,模擬人工軌跡一步步滑等等。爬蟲無上限,可能圖片驗證,滑塊驗證成功,賬號密碼正確,還是會顯示驗證碼錯誤(12306目前是這樣的),還有很多的selenium限制的地方。
? ? ? ? 歡迎看到這篇的你們提出寶貴意見,一起交流學習。
模擬人工軌跡參考:Python爬蟲滑塊驗證
opencv環境安裝:OpenCV-python安裝教程
????????
? ? ? ??
總結
以上是生活随笔為你收集整理的凡科网JS逆向后跳出的滑块验证(base64图片解码之后的破解滑块验证)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用D3.js进行图谱展示时连接线长度随节
- 下一篇: gradle idea java ssm