前言:仅供参考学习
本文写于2023年3月20日,请注意时效性

模拟二维码签到

📷 测试课程

自建课程,并发布签到,分别获取10s刷新前后的二维码

📷 刷新前
📷 刷新后

使用二维码解码器对这两张二维码进行解码,获得以下两个内容

  1. https://mobilelearn.chaoxing.com/widget/sign/e?id=6000059680136&c=251295&enc=0DA06A4208CAAF0961A7EEC658E0EDF5&DB_STRATEGY=PRIMARY_KEY&STRATEGY_PARA=id

  2. https://mobilelearn.chaoxing.com/widget/sign/e?id=6000059680136&c=206225&enc=0DA06A4208CAAF0961A7EEC658E0EDF5&DB_STRATEGY=PRIMARY_KEY&STRATEGY_PARA=id

其共有idenc两个量取固定值,c则不同,可得每10秒更换二维码图案即是由c值造成的

id=6000059680136
enc=0DA06A4208CAAF0961A7EEC658E0EDF5

接下来我们只需要去分析这另外两个量分别所代表的东西

📷 DevTools

通过网页端发布签到活动时,可以看到浏览器对网络的监听里回调的请求url

其中id值与activeId同为6000059680136,可知二维码中的id为所发布签到活动的id唯一值

最后剩下的enc代表什么?

进行网络抓包分析

对手机或Android模拟器进行网络抓包,在手机客户端上完成一次二维码签到,并获取在扫描二维码以签到成功时,手机向某教育学习平台服务器提交了什么请求

以下为使用Fiddler进行网络数据抓包的结果

📷 Fiddler

https://mobilelearn.chaoxing.com/pptSign/stuSignajax?enc=0DA06A4208CAAF0961A7EEC658E0EDF5&name=%E4%BD%95%E8%A1%8D%E4%BD%90&activeId=6000059680136&uid=215505229&clientip=&useragent=&latitude=-1&longitude=-1&fid=133138&appType=15

分析抓包结果,可知,当在手机客户端扫描二维码后,app会向某教育学习平台服务器提交ajax请求,在这段请求链接中,除了nameuid两个新出现的量,同时还包含了我们在以上所解码的二维码中的两个量,且值固定,id(activeId)enc

总结

id(activeId)为所发布的签到活动的id唯一值,enc则作为二维码签到流程中的核心密钥

在签到所使用的ajax请求中,出现的两个新量,其中name代表姓名,uid代表用户id

即只要有用户登录后的cookie,将任何一张该签到活动中的二维码图片,解码出enc值,就可以如其上的ajax链接,构建一个GET请求,完成签到