重庆工商大学图书馆抢座分析

起因

唐部搞完抢课脚本后又打起了抢图书馆座位的主意,让我也一起看看

经过

登陆密码加密

通过抓包得到提交登录表单的参数为

1
2
3
4
5
6
7
8
{
'username': "2024xxxxxx",
'password':"0cefd4baf9...",
'authcode': "2146",
'rememberMe': 'true',
'execution': "d5304484-5bfd-4715-b9f4...",
'_eventId': 'submit',
}

其中execution可在登录页源码中得到

源码中找到了对密码进行加密的位置

使用了security.js里的函数进行的加密

由于里面的加密太过复杂,笔者没能力改成python代码(菜)

但是python中的execjs库能运行js代码,于是想到在security.js中增加一个函数供python调用,连接python脚本与security.js中的函数

Modulus参数为网页发送的getPubKey请求返回的数据

成功得到加密后的密码

分析跳转路线

由于一开始是在未登陆的状态访问 https://ic.ctbu.edu.cn/ 所以会有302跳转登录页面,登录之后又会跳回原页面,所以分析网页跳转的路线

抓包得知,在进入 https://ic.ctbu.edu.cn/ 后,会发送userInfo请求来获取用户信息,如果没获取到信息,就使用address请求返回一个uuid和跳转网址

这个网址又会带着信息跳转到登陆页面

之后会发送getPubKey请求获取pubkey,并在cookie中设置_pm0,用来区分不同的pubkey

最后发送获取验证码的请求

那现在思路就有了:直接访问address,获得跳转网址,一直跳转到登陆页面,根据网页源码得到execution参数,再发送getPubKey请求得到pubkey,用get_rsa_pwd函数得到加密后的密码,然后发送获取验证码请求,用ddddocr识别,将这些数据一并给登陆页面。

至此,登录成功

成果

登陆成功后数据的筛选、预定的发送自然不是什么难事

使用多线程同时抢多个座位

都是唐部指使我干的!!