亲测有效:
事情是这样的,最近一段时间,女朋友的行为十分异常。饭也不做了,王者也不打了,一回家就抱着手机带着耳机在床上假装学习,偶尔还会给我一个意味深长的微笑。
机警的我立刻意识到事情的不对,她啥时候变得这么爱学习了?一番盘问下才知道,原来她最近被要求在某软件上刷网课,课程量很大,还不让快进,更恶心的是月底刷不完还要付费观看。如此行径让我十分愤慨,必须不能忍啊,为了拯救我的女朋友,决定搞他。
闲言少叙,咱们直接上实操(建议用谷歌浏览器):
第一步,输入账号密码登录,找到你还没完成的学习课程
第二步,按F12进入开发者工具(如果按F12不开,可点击一下网址栏再试)
第三步,点击Network,再点击未完成课程,就可以在Network中看到该课程的编号
第四步,点击开发者工具中的Console,输入以下脚本,按回车执行。
脚本如下
var lessonNum=3016;$('.lesson-'+lessonNum+' .course_study_menuschedule em').html('已完成
100%');var nextLesson = lessonNum+1;$('.lesson-'+nextLesson+' .course_study_menuschedule').addClass('lock_state');$('.lesson-'+nextLesson).attr('data-lock','0');$.post("/addstudentTaskVer2/79/3016", { "learnTime": "489","push_event":"ended" });
需要改动的地方有三处,已在上图中用绿框标出。位置1为课程所对应的编号(3016),位置2为课程章号/课程编号(79/3016),位置3为视频的总秒数(需要手算一下)。
注意:章号可以在网址栏中看到,视频的时长与目录时长不一致时,以视频实际时长为准
第五步,点击箭头查看回显。如果成功,则显示‘请求成功’;否则,则显示‘你的账号在其它课程登录’。出错的原因可能是你的课程章号、编号或者计算时间搞错了。若这三个地方检查后都不存在问题,可多试几次
第六步,稍等片刻,刷新后成功修改学习进度为100%。如果没有成功,可多刷新几次
之后,就没必要用开发者工具找课程编号了,视频都是挨着的,课程编码直接+1后重复第四步即可。
原理分析
首先,分析一下加载时的js代码,看看它都有啥功能。发现它作了很多限制,比如不能快进、而且还需要开启摄像头进行人脸识别(事实证明并没有人脸识别功能,但是摄像头必须打开)。找了个胶带封住摄像头后,继续开始分析,然后看到了这里:
这是一个直播结束js代码,当监听到视频结束时,首先判断从视频加载时长(duration)是否等于视频的设定时长(learnDuration)。如果不等,则退出。如果相等,就把当前课程的进度设为100%,然后解锁下一个课程,最后把该课程的加载时长(duration)发送到服务器后台进行验证。
通俗点说,程序(js代码)监听到播发结束的信号后,先自己检查了一下,发现没问题,然后就告诉服务器:“这个视频客户看完了,我觉得没啥问题,这是客户看视频的时间(duration),要不您再看看?”服务器检测没问题后,就会认为该视频已学习完。
那么问题来了,该平台是通过js代码监听并处理播放结束事件,而js代码又在我们本地的浏览器上执行。我们能否操纵浏览器改变js代码,最终达到欺骗服务器的目的呢?答案是肯定的。