日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

网络爬虫js逆向解决网站登录RSA加密问题,不使用selenium如何实现登录,session维持登录状态请求爬取

發布時間:2023/12/20 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 网络爬虫js逆向解决网站登录RSA加密问题,不使用selenium如何实现登录,session维持登录状态请求爬取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

記錄中大網校破解登錄后爬取的方法:

案例請求地址:中大網校會員中心-登陸入口-中大網校

使用工具:打碼平臺(超級鷹)

分析請求:

?分析此請求,得知沒有data,保持狀態登錄需要服務器知道是這個用戶對應請求的相應驗證碼,所以要用session來維護狀態

get_img ="https://user.wangxiao.cn/apis//common/getImageCaptcha"session = requests.session()session.headers = {'Referer' : "https://user.wangxiao.cn/login?url=http%3A%2F%2Fks.wangxiao.cn%2F","Content-Type": "application/json;charset=UTF-8","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" }session.get("https://user.wangxiao.cn/login?url=http%3A%2F%2Fks.wangxiao.cn%2F") time.sleep(0.5) image_b = session.post(get_img).json()["data"].split(",")[1] print(image_b) with open("photo.png","wb") as f:f.write(base64.b64decode(image_b))

獲取到后驗證碼保存下來

接著接入超級鷹,識別獲得驗證碼

超級鷹文件:

#!/usr/bin/env python # coding:utf-8import requests from hashlib import md5class Chaojiying_Client(object):def __init__(self, username, password, soft_id):self.username = usernamepassword = password.encode('utf8')self.password = md5(password).hexdigest()self.soft_id = soft_idself.base_params = {'user': self.username,'pass2': self.password,'softid': self.soft_id,}self.headers = {'Connection': 'Keep-Alive','User-Agent': 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0)',}def PostPic(self, im, codetype):"""im: 圖片字節codetype: 題目類型 參考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,}params.update(self.base_params)files = {'userfile': ('ccc.jpg', im)}r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, files=files, headers=self.headers)return r.json()def PostPic_base64(self, base64_str, codetype):"""im: 圖片字節codetype: 題目類型 參考 http://www.chaojiying.com/price.html"""params = {'codetype': codetype,'file_base64':base64_str}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/Processing.php', data=params, headers=self.headers)return r.json()def ReportError(self, im_id):"""im_id:報錯題目的圖片ID"""params = {'id': im_id,}params.update(self.base_params)r = requests.post('http://upload.chaojiying.net/Upload/ReportError.php', data=params, headers=self.headers)return r.json()if __name__ == '__main__':chaojiying = Chaojiying_Client('超級鷹用戶名', '超級鷹用戶名的密碼', '938422') #用戶中心>>軟件ID 生成一個替換 96001im = open('a.jpg', 'rb').read() #本地圖片文件路徑 來替換 a.jpg 有時WIN系統須要//print (chaojiying.PostPic(im, 9004)) #1902 驗證碼類型 官方網站>>價格體系 3.4+版 print 后要加()#print chaojiying.PostPic(base64_str, 1902) #此處為傳入 base64代碼

調用獲取驗證碼?

im = open("photo.png","rb").read() chaojiying = Chaojiying_Client('cjy賬號', 'cjy密碼', '938422') #用戶中心>>軟件ID 生成一個替換 96001 #本地圖片文件路徑 來替換 a.jpg 有時WIN系統須要// image_code = chaojiying.PostPic(im, '1004')["pic_str"] print(image_code)

接著研究登錄的xhr請求:

?明顯看出密碼經過了加密,只要解決密碼的加密,帶上驗證碼,賬號就能成功登錄

分析搜索:

搜索password尋找加密入口,encrypt顧名思義加密,所以進入查看

????????由此明顯庫看出是一個密鑰,而JSEncrypt是前端常用的加密庫,接下來就是查看用的什么類型加密。

?并且i.encryptFn傳入的參數是pwd+ress.data,而data的數據經過研究是另一個請求獲得的數據見下圖

?所以登錄前,需要請求一次getTime獲得data數據

?

由此處可以看見e就是密碼,還是明文格式,接著進入encrypt查看

?

由上圖此處明顯可以看到是RSA加密,接著再debug后能看到d已經是密文格式

接下來python使用RSA加密:

from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5def dispose(s):rsa_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA5Zq6ZdH/RMSvC8WKhp5gj6Ue4Lqjo0Q2PnyGbSkTlYku0HtVzbh3S9F9oHbxeO55E8tEEQ5wj/+52VMLavcuwkDypG66N6c1z0Fo2HgxV3e0tqt1wyNtmbwg7ruIYmFM+dErIpTiLRDvOy+0vgPcBVDfSUHwUSgUtIkyC47UNQIDAQAB"rsa_keys = RSA.importKey(base64.b64decode(rsa_key))rsa_new = PKCS1_v1_5.new(rsa_keys)cipher = rsa_new.encrypt(s.encode("utf-8"))return base64.b64encode(cipher).decode("utf-8")

上述代碼就是python調用RSA的加密方式

維護登錄狀態:

在此處可以看見加載進入cookie中的數據,跟著將數據加入session的cookie中即可保持狀態

知道加密流程后整理代碼:

import jsonimport requests import time import base64 from Crypto.PublicKey import RSA from Crypto.Cipher import PKCS1_v1_5from encryption.中大網校登錄ras.chaojiying_Python.chaojiying import Chaojiying_Clientget_img ="https://user.wangxiao.cn/apis//common/getImageCaptcha"session = requests.session()session.headers = {'Referer' : "https://user.wangxiao.cn/login?url=http%3A%2F%2Fks.wangxiao.cn%2F","Content-Type": "application/json;charset=UTF-8","User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36" }session.get("https://user.wangxiao.cn/login?url=http%3A%2F%2Fks.wangxiao.cn%2F") time.sleep(0.5) image_b = session.post(get_img).json()["data"].split(",")[1] print(image_b) with open("photo.png","wb") as f:f.write(base64.b64decode(image_b))datatime = session.post("https://user.wangxiao.cn/apis//common/getTime").json()["data"] print(datatime)im = open("photo.png","rb").read() chaojiying = Chaojiying_Client('cjy賬號', 'cjy密碼', '938422') #用戶中心>>軟件ID 生成一個替換 96001 #本地圖片文件路徑 來替換 a.jpg 有時WIN系統須要// image_code = chaojiying.PostPic(im, '1004')["pic_str"] print(image_code)username = you id password = "you**"def dispose(s):rsa_key = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA5Zq6ZdH/RMSvC8WKhp5gj6Ue4Lqjo0Q2PnyGbSkTlYku0HtVzbh3S9F9oHbxeO55E8tEEQ5wj/+52VMLavcuwkDypG66N6c1z0Fo2HgxV3e0tqt1wyNtmbwg7ruIYmFM+dErIpTiLRDvOy+0vgPcBVDfSUHwUSgUtIkyC47UNQIDAQAB"rsa_keys = RSA.importKey(base64.b64decode(rsa_key))rsa_new = PKCS1_v1_5.new(rsa_keys)cipher = rsa_new.encrypt(s.encode("utf-8"))return base64.b64encode(cipher).decode("utf-8")data = {"imageCaptchaCode": image_code,"password": dispose(password+datatime),"userName": username, } #遇到Request Payload,傳入就必須要用json.dumps() resp = session.post("https://user.wangxiao.cn/apis//login/passwordLogin",data = json.dumps(data))dic = resp.json()['data'] print(dic)session.cookies['UserCookieName'] = dic['userName'] session.cookies['OldUsername2'] = dic['userNameCookies'] session.cookies['OldUsername'] = dic['userNameCookies'] session.cookies['OldPassword'] = dic['passwordCookies'] session.cookies['UserCookieName_'] = dic['userName'] session.cookies['OldUsername2_'] = dic['userNameCookies'] session.cookies['OldUsername_'] = dic['userNameCookies'] session.cookies['OldPassword_'] = dic['passwordCookies'] session.cookies['autoLogin'] = "null" session.cookies['userInfo'] = json.dumps(dic) session.cookies['token'] = dic['token']print(session)

?允許結果:

接著即可在下面編寫對該網站任意地方進行解析與請求?

總結

以上是生活随笔為你收集整理的网络爬虫js逆向解决网站登录RSA加密问题,不使用selenium如何实现登录,session维持登录状态请求爬取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。