长安大学使用畅课作为网络教学平台,在课堂考勤方面,畅课使用以下三种方式。
雷达点名
原理
由于看不到后端代码,以下为猜测的原理。
教师一般在其手机端开启签到,获取教师手机的经纬度和高度位置,提交到后端,作为电子球形围栏的中心点,围栏的半径未知,1km左右。学生在其畅课客户端点击”签到“按钮,软件获取学生手机的经纬度和高度位置,判断是否在电子围栏内,以完成签到。
技术细节
- 后端接口:
https://course-online.chd.edu.cn/api/rollcall/{rollcall_id}/answer
- 请求方法:
PUT
URL参数
- api_version:
1.1.2
提交数据如下。
{
"deviceId": "c098176e8baf1c06",
"latitude": 23.18442063908537,
"longitude": 113.4246709841635,
"speed": 0.020999999716877937,
"accuracy": 0.020980000495910645,
"altitude": 800,
"altitudeAccuracy": null,
"heading": 0.0210999995470047
}
签到成功返回数据如下。
{
"distance": 467.6857646748217,
"id": 23370444,
"status": "on_call",
"status_name": "on_call_fine"
}
破解思路
你知道上课的地点,使用谷歌地球或本地GIS地图模型,找到教室所在位置,获取经纬度,填入请求json
中发送即可。
同样的课程,你只需要查一次经纬度,后续直接使用先前查到的数据即可。
二维码点名
原理
生成一个token
,将其封装到二维码中供学生扫描,畅课客户端将扫描到的token
提交后端验证,完成签到。token
每十秒刷新。
技术细节
二维码中封装的内容格式如下。
/j?p=0~?37ge!3~173128484686f2ad4157a6227b3dd1239d3e576294!4~?4lx9
以下为推测的各项参数定义。
n~
:参数序号标识,兼具开始标识作用!
:结束标识作用37ge
:课程的ID(不过畅课有专门的数字型课程ID)hash
:token
,时间戳和一个哈希拼接?4lx9
:qrcid
,二维码签到ID,拼接到接口URL中
请注意,qrcid
和rollcall_id
是两个不同的类型。
- 后端接口:
https://course-online.chd.edu.cn/api/rollcall/{qrcid}/answer_qr_rollcall
- 请求方法:
PUT
提交数据如下。
{
"data": "173128484686f2ad4157a6227b3dd1239d3e576294"
"deviceId": "c098176e8baf1c06"
}
破解思路
软件上暂无,但是畅课提供了直播功能,可以直接获取直播流电脑路上的二维码图像完成签到。
数字点名
原理
教师输入一个4位数字,作为签到口令,学生在其客户端输入相同口令后完成签到。
技术细节
- 后端接口:
https://course-online.chd.edu.cn/api/rollcall/{rollcall_id}/answer_number_rollcall
- 请求方法:
PUT
提交数据如下。
{
"deviceId": "c098176e8baf1c06",
"numberCode": "1123"
}
破解思路
- 口令只有一万种可能,使用脚本多线程访问接口暴力猜解,但是不知道服务端是否有做接口限频与多次尝试失败后的风控措施,风控措施个人感觉大概率没有。但是考虑到畅课平台性能的拉胯,我们大概率不能在30秒内完成所有口令的穷举。
- 与二维码点名同样思路,在直播平台在线听课,即可获取口令签到。