javascript
凡科网JS逆向后跳出的滑块验证(base64图片解码之后的破解滑块验证)
目錄
? ? ?? 1.前提和大概思路概述
? ? ?? 2. 轉(zhuǎn)換思路selenium和驗(yàn)證滑塊圖片的獲取處理
? ? ?? 3.總結(jié)
? ? ? 1.前提和大概思路概述 ?
? ? ? ? 只是學(xué)習(xí)的途中有一些新的發(fā)現(xiàn),分享給大家,希望對你們有幫助。
? ? ? ? 凡科網(wǎng)的JS逆向的閉包技巧應(yīng)該是典型的閉包案例,很多人都有講解,這里只做一個粗略介紹。
?
?
?正常完成逆向之后,進(jìn)行模擬登錄,好像是因?yàn)槲业亩啻握埱?#xff0c;出現(xiàn)了滑塊驗(yàn)證
?先要做的是拿到底圖和完整圖或者滑塊,但凡科網(wǎng)的這里只能找到圖片base64偽加密后的imgId和sliderId,發(fā)起對應(yīng)請求想得到后解碼,奈何自己實(shí)在試過一堆法子,一直請求失敗,無奈下?lián)Q用selenium做模擬登錄,重要的還是做滑塊的思路嘛(實(shí)際還是自己實(shí)力不夠--)
{'success': False, 'msg': {'dealType': 1, 'capErrno': -2}}? ? ? ?
? ? ?? 2. 轉(zhuǎn)換思路selenium和驗(yàn)證滑塊圖片的獲取處理
????????用到的庫:
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)? ? ? ? 好家伙一下子就進(jìn)去了,可畢竟咱們是長見識為主,所以咱拿錯誤的賬號密碼來做試驗(yàn)(正確的重復(fù)多次登錄后也會出現(xiàn))
? ? ? ? 現(xiàn)在的重點(diǎn)主要是獲取到對應(yīng)的圖片base64編碼后的數(shù)據(jù),在進(jìn)行解碼,存儲圖片。(注意只需要base64后的數(shù)據(jù),要對數(shù)據(jù)做一定處理)
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,')? ? ? ?? 發(fā)現(xiàn)得到的這大串玩意,看起來蠻爽
? ? ? ?? 開始解碼,好像規(guī)則里的 整除加= 不是很有作用,我試了試加不加都可以(可能是我忽略了細(xì)節(jié)), 把滑塊和底圖都存儲起來。
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算法進(jìn)行精度匹配,將一維位置轉(zhuǎn)換為二維位置,得到x,y的坐標(biāo)。
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)? ? ? ? 找到滑的地方,模擬人工滑動,即可完成。(注意傳輸?shù)淖鴺?biāo)值)
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.總結(jié)
? ? ? ? 對圖片base64解碼處理后的滑塊驗(yàn)證,很多地方都可以優(yōu)化,比如如何讓匹配速度更快,模擬人工軌跡一步步滑等等。爬蟲無上限,可能圖片驗(yàn)證,滑塊驗(yàn)證成功,賬號密碼正確,還是會顯示驗(yàn)證碼錯誤(12306目前是這樣的),還有很多的selenium限制的地方。
? ? ? ? 歡迎看到這篇的你們提出寶貴意見,一起交流學(xué)習(xí)。
模擬人工軌跡參考:Python爬蟲滑塊驗(yàn)證
opencv環(huán)境安裝:OpenCV-python安裝教程
????????
? ? ? ??
總結(jié)
以上是生活随笔為你收集整理的凡科网JS逆向后跳出的滑块验证(base64图片解码之后的破解滑块验证)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 用D3.js进行图谱展示时连接线长度随节
 - 下一篇: 【信息学奥赛一本通】1215:迷宫(bf