上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖

破解超星学习通人脸识别思路

[复制链接]
  • TA的每日心情
    擦汗
    3 天前
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    10

    主题

    18

    帖子

    79

    积分

    荣誉开发者

    Rank: 10Rank: 10Rank: 10

    积分
    79

    荣誉开发者中秋纪念章国庆纪念章家财万贯新人报道

    发表于 2021-12-7 15:17:04 | 显示全部楼层 | 阅读模式
    超星学习通部分课程在点进课程首页,或者点进章节时会要求手机APP扫码进行人脸识别,如下图:


    将二维码解码,得到网址如下
    https://mooc1-api.chaoxing.com/qr/view?uuid=a4301fc0-e226-4f63-b967-******&clazzid=*********&enc=0fe293e82912c16cf5ad8da9******


    共有三个参数,uuid、clazzid和enc
    clazzid可以确定为班级id,对于同一门课程是固定不变的

    刷新页面获取最新二维码,解码后发现uuid和enc参数都发生了变化,并且两个参数在网页html里也同时用input标签存储,如下图

    所以获取这两个参数只需要读取input标签即可,无需再解码

    下一步,掏出手机,使用超星app扫码,然后fiddler抓包
    需要一些基础的手机抓包技术(温馨提示:安卓6.0以下系统可以无视证书安全)

    app界面显示如下


    接下来按正常流程扫码验证

    扫脸通过后,app一共请求了四个接口,前两个接口是检查图片id是否存在和上传图片,不重要,所以不展示。
    上传完图片后返回了一个objectId,估计是图片资源对应的id,然后又请求了两个接口。
    https://mooc1-api.chaoxing.com/keeper/api/receive-studylog
    https://mooc1-api.chaoxing.com/qr/updateqrstatus


    第二个接口返回的json数据:
    {"msg":"通过",
    "log":"{\"data\":{\"relationId\":0,
    \"objectId\":\"********************************\"},
    \"clazzId\":********,
    \"ip\":\"*.*.*.*\",
    \"eventTime\":1638697167662,
    \"personId\":*********,
    \"eventType\":5,
    \"courseId\":*******}",
    "enc":"8cb8980acdbf8ec2b1db8bbe71527231",
    "type":3,
    "status":true}


    这个json格式真让人窒息,不过他里面包含了“通过”字样,八成就是这个接口了,检查post数据:


    clazzid和courseid经过比对是课程自带的,永远不会变
    uuid和qrcenc就是网页input标签带的
    objectid是上传人脸照片返回的
    failcount和compareresult是请求第三个接口返回的

    所以说只要解决后三个参数即可

    关于objectid:上传人脸照片不可能,我要做的是破解人脸,而不是模拟人脸,所以objectid就先瞎填一下或者填一个已经存在的objectid
    failcount和compareresult先用刚刚返回的0

    接下来重新触发人脸,用post请求试一下(注意uuid和qrenc是刷新变化的,不能用旧的)


    成功通过人脸识别!

    尝试删除failcount和compareresult参数后post请求,再次通过!

    研究到这里,可以判断,超星的人脸识别是在手机本地进行的,服务器端没有进行比对,objectid随便填。

    总体思路如下:
    1、在二维码页面获取uuid和qrenc、classid、courseid参数
    2、POST如下接口,objectid随机(注意跨域问题):

    url:https://mooc1-api.chaoxing.com/qr/updateqrstatus
    data:clazzId=******&courseId=******&uuid=******&qrcEnc=******&objectId=随机字符

    3、数秒后二维码自动消失,可以继续学习。
    后记:在我开始研究的时候,已经做好失败的准备,因为如果超星是服务器端判断人脸然后返回id,那在本地怎么操作都不能跳过检测。
    在把思路写成油猴脚本并发布后,经用户反馈,发现超星的人脸识别并不只有一个版本,另一版本的二维码格式相同,但手机app扫描后请求的接口不同,但总体思路类似。


  • TA的每日心情

    2022-7-15 01:14
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    113

    主题

    212

    帖子

    414

    积分

    高级工程师

    Rank: 6Rank: 6

    积分
    414

    中秋纪念章国庆纪念章

    发表于 2021-12-7 15:25:32 来自手机  | 显示全部楼层
    ggnb!!!!
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    1

    帖子

    3

    积分

    助理工程师

    Rank: 1

    积分
    3
    发表于 2021-12-7 16:00:33 | 显示全部楼层
    yyds……
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    6

    帖子

    8

    积分

    助理工程师

    Rank: 1

    积分
    8

    新人报道

    发表于 2022-1-15 21:35:18 | 显示全部楼层
    脚本在哪里啊 没找到
    回复

    使用道具 举报

    该用户从未签到

    0

    主题

    5

    帖子

    6

    积分

    助理工程师

    Rank: 1

    积分
    6

    新人报道

    发表于 2022-5-10 20:11:02 | 显示全部楼层
    ggnb111!!!
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表