提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
提示:这里可以添加本文要记录的大概内容:
js 逆向模拟登录中大网校
提示:以下是本篇文章正文内容,下面案例可供参考
一、网站分析
二、代码
js代码
var JSEncrypt = require("node-jsencrypt")
var encryptFn = function(e) {
var o = new JSEncrypt;
return o.setPublicKey("MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDA5Zq6ZdH/RMSvC8WKhp5gj6Ue4Lqjo0Q2PnyGbSkTlYku0HtVzbh3S9F9oHbxeO55E8tEEQ5wj/+52VMLavcuwkDypG66N6c1z0Fo2HgxV3e0tqt1wyNtmbwg7ruIYmFM+dErIpTiLRDvOy+0vgPcBVDfSUHwUSgUtIkyC47UNQIDAQAB"),
o.encrypt(e)
}
python代码
import base64
import requests
import json
import execjs
def base64_api(uname, pwd, img, typeid):
with open(img, 'rb') as f:
base64_data = base64.b64encode(f.read())
b64 = base64_data.decode()
data = {"username": uname, "password": pwd, "typeid": typeid, "image": b64}
result = json.loads(requests.post("http://api.ttshitu.com/predict", json=data).text)
if result['success']:
return result["data"]["result"]
else:
# !!!!!!!注意:返回 人工不足等 错误情况 请加逻辑处理防止脚本卡死 继续重新 识别
return result["message"]
return ""
session = requests.session()
session.headers = {
"":""# 头自行添加
}
url = "https://user.wangxiao.cn/login"
param = {
"url": "{{url}}"
}
resp = session.get(url,params=param)
# print(resp.headers) # 'Set-Cookie': 'sessionId=1741766931245; path=/'
yzm_url = "https://user.wangxiao.cn/apis//common/getImageCaptcha"
yzm_resp = session.post(yzm_url,headers={
"Content-Type":"application/json;charset=UTF-8"
})
with open("tu.jpg",mode="wb") as f:
f.write(base64.b64decode(yzm_resp.json()["data"].split(',')[-1]))
yzm_code = base64_api(uname='你的图鉴账号', pwd='你的图鉴密码',
img="./tu.jpg",typeid=3)
print(yzm_code)
get_time_url = "https://user.wangxiao.cn/apis//common/getTime"
get_time_resp = session.post(get_time_url,headers={
"Content-Type":"application/json;charset=UTF-8"
})
# r_time = get_time_resp.json()["data"]
login_url = "https://user.wangxiao.cn/apis//login/passwordLogin"
username = "你的中大网校账号"
pwd = "你的中大网校密码"
r_time = get_time_resp.json()["data"]
f = open("wx.js",mode='r',encoding='utf-8')
js_code = f.read()
js = execjs.compile(js_code)
jm_pwd = js.call("encryptFn",pwd + r_time)
print(pwd + r_time)
data = {
"imageCaptchaCode": yzm_code,
"password": jm_pwd,
"userName": username
}
login_resp = session.post(login_url,data=json.dumps(data,separators=(',', ':')),headers={
"Content-Type":"application/json;charset=UTF-8"
})
login_data = login_resp.json()['data']
session.cookies['userInfo'] = json.dumps(login_data,separators=(',', ':'))
session.cookies['token'] = login_data['token']
session.cookies['UserCookieName'] = login_data['userName']
session.cookies['OldUsername2'] = login_data['userNameCookies']
session.cookies['OldUsername'] = login_data['userNameCookies']
session.cookies['OldPassword'] = login_data['passwordCookies']
session.cookies['UserCookieName_'] = login_data['userName']
session.cookies['OldUsername2_'] = login_data['userNameCookies']
session.cookies['OldUsername_'] = login_data['userNameCookies']
session.cookies['OldPassword_'] = login_data['passwordCookies']
session.cookies[login_data['userName'] + "_exam"] = login_data['sign']
q_url = "https://ks.wangxiao.cn/TestPaper/getPaperRuleQuestions"
q_data = '{"id":"21F74E2F-44FA-4550-B481-5EF80A4BA09F"}'
q_resp = session.post(q_url,data=q_data,headers={
"Content-Type": "application/json;charset=UTF-8",
"Host": "ks.wangxiao.cn",
"Origin": "https://ks.wangxiao.cn"
})
print(q_resp.text)