新版超星图书馆座位预约
本帖最后由 Schwarz 于 2023-10-20 00:12 编辑## 新代码已更新在新帖子,【js逆向】某习通座位预约加密分析(新手向)
https://www.52pojie.cn/thread-1793208-1-1.html
(出处: 吾爱破解论坛)
---
# 自己写的,比较懒,代码比较粗糙,见谅
**流程**大概是:
1. 加密data
2. 登录获取cookies
3. 获取必要的token
4. 定时
5. 抢座
---
写完后才看到有人以前写过,但是貌似流程中的url结构与我的有点不同,只能保证我自己能直接使用,其他人仅做参考。
---
以下代码需要自己抓包改所有url中的seatId,有了seatId就可以直接在web端登录访问`https://office.chaoxing.com/data/apps/seatengine/reservelist?cpage=1&pageSize=10&type=2&seatId=xxx`,
这样就可以获取到以前预约过的roomid和座位号seatNum,当然,懒得抓包可以直接遍历一波seatId
总结就是需要自己找到需要的seatid、roomid、seatNum,定时抢可以自己改时间
抢多个人的可以用aiohttp修改,放到服务器上定时运行更舒服
```python
import requests
import requests.utils
from lxml import etree
import re
from Crypto.Cipher import AES
import base64
from datetime import datetime
import time
def encrpytByAES(message, key):
key = "u2oh6Vu^HWe4_AES"
iv = key.encode("utf-8")
message = message.encode("utf-8")
# 使用PKCS7Padding填充
BS = AES.block_size
padding = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS).encode()
cipher = AES.new(iv, AES.MODE_CBC, iv)
ciphertext = cipher.encrypt(padding(message))
return base64.b64encode(ciphertext).decode('utf-8')
def getCookies(data, headers):
url = "https://passport2.chaoxing.com/fanyalogin"
# proxy = {"http": "http://127.0.0.1:8080"}
resp = requests.session()
resp.headers = headers
resp.post(url, data=data)
url1 = "https://office.chaoxing.com/front/apps/seatengine/index?seatId=796"
resp.get(url=url1)
cookies = dict(resp.cookies.items())
name = requests.utils.unquote(cookies['oa_name'])
print(name)
return resp
def getToken(session, today):
# proxy = {"http": "http://127.0.0.1:8080"}
url = f"http://office.chaoxing.com/front/third/apps/seatengine/select?id=1901&day={today}&backLevel=2&seatId=796"
resp = session.get(url)
res = etree.HTML(resp.text)
script = res.xpath('/html/body/script/text()')
pattern = re.compile("token = '(?P<token>.*?)'")
token = pattern.search(script)
if token:
token = token.group('token')
return token
else:
return None
def getSeat(session, roomId, startTime, endTime, day, seatNum, token):
# proxy = "http://127.0.0.1:8080"
seatNum = str(seatNum).rjust(3, '0')
url = f'http://office.chaoxing.com/data/apps/seatengine/submit?roomId={roomId}&startTime={startTime}&endTime={endTime}&day={day}&captcha=&seatNum={seatNum}&token={token}'
# resp = requests.get(url, cookies=cookies, headers=headers, proxies=proxy)
# print(resp.text)
resp = session.get(url)
print(resp.text)
# print(cookies)
def getData(info):
data = {'fid': '-1', 'uname': encrpytByAES(info, 0), 'password': encrpytByAES(info, 0),
'refer': 'https://office.chaoxing.com/front/apps/seatengine/index?seatId=796', 't': 'true',
'forbidotherlogin': '0', 'validate': '', 'doubleFactorLogin': '0', 'independentId': '0'}
return data
def main():
headers = {
'user-agent': 'Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)'
}
info = [['手机号', '密码']] # 填写信息
# 获取data
wdata = getData(info)
# 获取cookie
wsession = getCookies(wdata, headers)
today = datetime.now().strftime('%Y-%m-%d')
# 获取必要的token
wtoken = getToken(wsession, today)
while True:
t = datetime.now().strftime("%H:%M:%S")
if t == "07:45:01": # 指定时间抢
print(datetime.now())
getSeat(wsession, 1888, "08:00", "21:30", today, 14, wtoken) # 需要修改信息
print(datetime.now())
break
else:
time.sleep(0.2)
if __name__ == '__main__':
main()
# 10 15 * * * /home/ubuntu/chaoxing.py >> /home/ubuntu/script.log # 在服务器上定时任务更加舒服
``` 谢谢分享好软件 可惜现在不是要定位吗,就是要定位到附近位置才能预约呀 wangguang 发表于 2023-4-30 22:19
可惜现在不是要定位吗,就是要定位到附近位置才能预约呀
这样的我没见过,我们学校的直接就是预约 谢谢分享,已收藏。 这个不错喔,拿来可以二次修改一下,特别的好用 你好,想请教一下要使用这个代码怎么修改 jiayou1 发表于 2023-7-3 17:20
你好,想请教一下要使用这个代码怎么修改
第77行,填入手机号和密码
第93行,函数定义在第54行,参数名字和前言说的对应,没讲到的看参数名也能看出来
第91行,是指定抢的时间,根据需要来修改
学习通加了加密校验,我新发的加密分析里面新加了解密函数,需要加进去 Schwarz 发表于 2023-7-3 18:01
第77行,填入手机号和密码
第93行,函数定义在第54行,参数名字和前言说的对应,没讲到的看参数名也能看 ...
roomid seatnum都得到了,就是获取不了seatid可以求教吗?在stream寻不到 jiayou1 发表于 2023-7-3 18:35
roomid seatnum都得到了,就是获取不了seatid可以求教吗?在stream寻不到
一般来说进入预约主界面的请求url就带有这个参数,或者其他扫码,选座都有,可以抓包
页:
[1]
2