疫情在家上慕课,逼出了最强的我(分析如何写一个自动化刷课软件)

前言

又到了在家刷慕课的时候了,哎,渴望学习的我却耐不住性子看今天布置的任务。在刷qq的时候,无意中看到有人在群里叫卖代刷网课,4元一科,就单单这个价格,已经很诱人了,真的很低。其实也能想象,反正是软件刷,自己不费任何力气,便宜走量呗。

不过,这并不吸引我,吸引我的是刷课软件的原理,话不多说,我们开始分析!
在这里插入图片描述

准备工具

  1. 谷歌浏览器
  2. postman 接口测试软件

重头戏

视频资源分析

我们首先打开一节课,点击进入到课程,让视频处于播放中,我们此时按住f12 进入谷歌浏览器的开发者模式,点击network 并选择XHR(xmlHttpRequest)

在这里插入图片描述

在视频的播放中,我们会不断接收这样的消息:

在这里插入图片描述

也许有人知道这是什么了,我也不卖关子了,这个就是视频的缓存数据。(后来补充:经过百度搜索,发现慕课使用的m3u8网络传输协议来做在线视频的播放。)

先通过请求获取视频流加载信息表:

在这里插入图片描述

扩展链接:

扫描二维码关注公众号,回复: 10402367 查看本文章

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jjfGEz0w-1585215618816)(C:\Users\86151\Desktop\刷客软件分析过程\3.png)]

整个缓存请求是这样的一个URL形式,std0.ts 开始,每次请求数字都加1.这里默认是标清播放,如果是高清播放,结尾是hdx.ts.

然后我们等待视频走完,看看有没有新的请求发出。

视频刚播放完毕,立马发出了一个请求

在这里插入图片描述

完整的请求是这样:

在这里插入图片描述
从链接英文的意思来讲,应该是保存慕课学习状态,也就是咱们这个视频看完了,总得给咱们记录一下,至于记录哪些消息呢,我们看看发送的数据。对了,地址后面跟了一个csrfkey 这个值,这个应该就是身份标识。

  • 先看cookie

    除了一些个人信息之外,我发现了另外三条

    1. hasVolume=true;

    2. videoRate=1.5;

    3. videoVolume=0.93;

    这三个分别表示 是否有声音、视频播放速度、视频播放音量

    乖乖,咱们平常喜欢静音刷网课的同学注意了,这些行为都会被记录,至于在教师端显示不显示我就不知道了。以后刷课记得开声音(博主还是提倡大家好好听课的,以后肯定用得上)

  • Form Data

在这里插入图片描述

  1. unitid 单元id
  2. finished 是否完成本课程
  3. index 索引号 (至于什么作用,目前不知)
  4. duration 持续时间,这个值是个固定值,很多视频都是300000
  5. courseid 课程id
  6. lessionid 章节id
  7. videoid 视频id
  8. termid 团体id 我猜测是学校id
  9. userid 用户id
  10. contenType 内容类型 这里指1 指视频 不同的数字指为不同资源
  11. action 动作 学习时间统计
  12. videotime 视频时长 单位是s
  13. learnedVideoTimeCount 视频学习时间统计

在多次观察后,我发现:这个保存视频学习状态的请求每五分钟请求一次,并不是最终看完视频后,提交一次请求

​ 第一次请求

在这里插入图片描述

​ 第二次请求

在这里插入图片描述

​ 视频观看完毕后请求

在这里插入图片描述

本次课程视频时长为12分26秒,换算成秒应该是746s 但视频是从0开始计算时间的 所以视频长度应该加1 为 747s。

此时有个疑问,这三次请求的学习时长加起来为754s ,比原视频要多6s,这是怎么回事呢。我观看了另外一个视频,发现学习时长加起来要比原视频多5s。我猜测这里,只要学习时长大于视频时长即可,具体多几秒 应该没事,只要别多太多,咱们就默认5s左右。

至于videotime 第一次为296 第二次为592 第三次为747 ,可以这样解释,因为用户需要在观看时,每5分钟进行状态提交,只要此时视频时间点小于学习时长即可,咱们也默认5s。

插一句:每节课程前面都有一个⭕,当你完成该节课程的全部内容后,这个圆圈会变成实心的,如果你仅仅完成一部分,比如只是看完了视频,这个圆圈会变成半实心。

文档资源分析

咱们接下来看看这个课程的其他资源:

在这里插入图片描述

我们点开中间的文档

在这里插入图片描述

每次我们点击下一页时,我们会发现,发送了一个请求,请求地址与视频请求地址一样,但是参数有了很大的变化,我们一起来看看

  • cookie

    1. hasVolume=true;
    2. videoRate=1;
    3. videoVolume=0.

    这里我们可以看到,视频声音为0.这个我们很容易理解,文档是没有声音的。虽然不知道后台有没有对这个地方做判定,不过也是给我们提个醒,如果要做工具的话,要注意这个点。(后续补充:在后面的观察中,我发现这些值与前面视频播放状态保持一致,这里的猜测纯属多余)

  • Form data

在这里插入图片描述

  1. unitid 单元id
  2. pagenum 当前查看页数
  3. finished 是否完成
  4. contentType 类型

我们快速点击文档翻页,当我们点到最后一页的时候,finished=true pagenum=22.这个部分并没有做时间限制,我们只需要获取文档页数,即可发送完成请求,相对比较简单。

讨论部分分析

讨论部分

在这里插入图片描述

讨论部分就比较简单了,请求地址与前面一样,请求参数除了类型那一块不一致外,其余都一样。

在这里插入图片描述

测试题分析

有的课会有测试题

在这里插入图片描述
我们先去正常答题,看看提交后的请求信息:

在这里插入图片描述

点击提交后,会先发送一个请求检验你的答案,这个我们不去考虑,紧接着,还是会发送一个saveMocContentLearn的请求,地址与前面的一样,参数与讨论部分基本一致,只有contentType处这里值为5.

总结

  1. 各类学习资源的状态提交请求地址一致,参数方面contenTpye=1 表示视频资源 、contenTpye=3 表示文档资源 、contenTpye=6 表示讨论资源 、contenTpye=5 表示测试资源

  2. 我们可以根据上面分析使用postman工具进行测试,我这里测试没什么问题

  3. 目前只是做了比较初级的分析,离后面实现自动刷课还有很长的路要走。

  4. 这些仅仅作为编程爱好者之间的分享,博主建议大家平常还是要老老实实上课听课,知识会给你带来巨大改变的。

欢迎大家跟我一起交流,有兴趣的可以博客底下留言。

发布了87 篇原创文章 · 获赞 76 · 访问量 24万+

猜你喜欢

转载自blog.csdn.net/lzx159951/article/details/105123980