学习通二维码签到的那些事
前言
自从超星修改了二维码签到机制后,自动签二维码就已经失效了,但是存在另外一种方法,就是只要有二维码,无论是否过期都能签到,这是为什么,为什么过期的二维码也能签到,这个过程是怎样的?
正文
了解二维码签到的全过程
在这之前,我想先带你了解一下二维码签到的全过程,大概是如下过程
教师发布二维码(10s刷新或不刷新) -> 学生扫描 -> 签到成功
首先,我们来模拟一下签到的过程
发布一个签到,10s刷新
学生用手机扫码
签到成功
整个步骤就是这么简单,但很多时候你会发现,10s刷新的二维码扫描之后会提示『二维码已过期』,但为什么有的小程序又能通过过期的二维码来进行签到呢
现在,深入了解一下整个步骤
关于二维码
你有没有想过,这个二维码如果不用学习通官方App来扫描,会得到什么东西?我们来试试
重新发布一个二维码签到,设置为不刷新,也就是固定二维码,看看我们会得到什么
拿出你的手机,打开微信或其他非超星学习通官方app,扫描二维码
SIGNIN:aid=XXXXXXXXXX&source=15&Code=XXXXXXXXXX&enc=548DF0246153AF088E756B59F33BF3F4
你会发现,通过非学习通官方App扫描二维码,你会扫除上面这一串东西
由aid,source,Code,enc组成
他们是什么,从哪里得出?
首先,aid是任务的id,当你通过学生端获取活动(任务)列表的时候,学习通官方api会返回JSON格式的任务,如图
你可以很轻松地发现,上面的数据中id就是我们扫描二维码出来所得的4开头的10位数字,而source,我们又能从任务列表中的数据看到有一个source: 15,所以扫描出来的一串字符,我们解决了3个,那就剩下一个enc值和Code值了
从这个二维码来看,我们只能得出Code是和id相同的,但后面10s刷新的二维码你就会发现不一样了
那这个enc值从哪里得来呢,目前没有明确的地方可以得到这个enc值,我们只能从二维码中得到这个enc,这个enc有什么用?会变吗?定时的二维码和10s刷新的二维码的enc有什么不同吗?
为了解答这些问题,我们通过技术手段来看看扫码到签到成功整个过程发生了什么
通过下面这张图,我们不难发现,当我们扫描二维码后,app会向学习通服务器提交一个ajax请求
你会发现,ajax的请求链接中就包含我们扫描二维码得到的enc值,而整个ajax请求链接就是这样的
https://mobilelearn.chaoxing.com/pptSign/stuSignajax?enc=扫描出来的enc值&name=姓名编码&activeId=任务id&uid=用户id&clientip=&useragent=&latitude=-1&longitude=-1&fid=2119&appType=15
而这个enc就是整个二维码签到最关键的东西,有了他,我们就可以通过enc来进行模拟签到,无论是否通过学习通app,只要我们得到二维码,从二维码中扫描得出enc值,已登录的Cookie值,再进行一个模拟Get提交,就可以完成整个签到
那么问题来了,刚才是用固定二维码来扫出的enc,如果10s刷新一次的二维码,enc值会刷新吗?
带着这个问题我们再去研究一次
分别扫描这两个二维码,前后的二维码是10s刷新后的
通过扫描这两个二维码,我们会发现,第一个二维码扫出来的内容是这样的
SIGNIN:aid=402748617&source=15&Code=699430&enc=8A46FF5A8131FFF45E2767B4D6C39D2A
SIGNIN:aid=402748617&source=15&Code=9CIVBM&enc=8A46FF5A8131FFF45E2767B4D6C39D2A
你会发现这两个二维码只有Code是改变的,aid和source已经解释过了,上面的固定二维码扫出来Code是和id一样的,而这里的Code却不一样,这时我们可以得出结论,Code值是影响每10s刷新的二维码图案的,而enc两次都没有改变,这时只需要提取enc值,组装一下刚才的ajax链接,就可以进行签到了,所以现在你知道为什么有的程序可以通过过期的二维码来进行签到了吧
到这里,我们就分析完二维码签到的所有过程了
只讲述原理,可能存在时效性,不保证你看到的时候流程还一样
本文仅供参考学习,本人不负任何非法责任
XXY
2023年4月,超星再次更新二维码签到系统!现在enc值也会跟着刷新了😞
tristen
code应该改成什么呢
X1a0He@tristen
Code不需要修改,提交包不需要提交Code,文章有说
ca7ion@X1a0He
任务id和用户id该怎么看呢?
justacp
你好,现在还可以用这种方式签到吗?
X1a0He@justacp
可以