学习通之类的网课,有点让人头疼。好的网课另说,但学校强制让看的大部分都是辣鸡玩意,浪费时间又占设备资源。

不过目前接触的两款学校要求的网课 App:创新创业云平台 和 超星尔雅,也不是没有骚办法的

基础

安卓端

安装:Auto.js 学习通脚本

原理:是通过 JavaScript 脚本把手动点击模拟为脚本自动点击下一步等一系列操作

感受:高配版的‘按键精灵’,模拟对操作句柄,iOS 似乎也有 JSBOX,可以自己写脚本

今天去隔壁寝室 @wqs 简直太骚了(手机内置分屏功能

Split-Screen

电脑端

因为电脑端的限制比较明显、比较多,这样一来可玩性就高多了,我们先捋捋电脑刷网课视频的尿点:

  • 播放时鼠标必须悬停在播放器上方,鼠标移出播放器外视频就会自动停止播放.
  • 没看过的部分不可以跳转,只有看过一次之后才可以任意跳转进度.
  • 课程播放时会插入课程测试题,只有完成测试题之后才能继续观看.

两个基础认识,摘自 @cubicpill:

这家网课平台的 Web 端的视频播放器是一个 Flash, 监听用户鼠标事件,一旦用户鼠标移出 Flash 区域或者将浏览器最小化,都将暂停视频直到鼠标重新放上

而 Android 客户端就更是精彩绝伦,视频播放的那个 Activity 直接是一个 WebView, 同样是通过 js 来监听切换到后台的事件

H5-Event

思路:

  • 虚拟机加速播放
  • 油猴脚本 js 自动化
  • Mac 拖 Safari 进度条

虚拟机加速播放插件

fake-xxt-in-virtualvm.jpg

胡锅巴在 公众号 AimTao 里写了, Videospeed 浏览器插件加速 + 虚拟机:

视频不能拖进度条,那就在客户端快速播放完视频,然后就具体用到了 Videospeed(最快 16 倍速) 虚拟机(out 出虚拟机之后,虚拟机鼠标不动)解决了鼠标划出暂停、触发鼠标的监听事件的问题

轮子造得可以用了,但是还能改进,等会说

油猴脚本

安装油猴插件,再装 脚本,不到 40 行 js 代码,实现了三个功能:

  • 切换其他页面时超星 mooc 不会暂停
  • 播放完一节课自动加载下一节课
  • 可以拖动进度条(可能被防作弊系统检测到)

Mac 拖 Safari 进度条

look-at-touchbar.jpg look-at-touchbar.jpg

Touch Bar 会显示当前页面的播放进度条,直接就能搞定。(亲测能跳过几乎所有网站广告,去年就是利用这个办法,刷爆了形势与政策,一不小心看视频排名第一

当然,首先你要去找一台有触控条的 MacBook(好像也能安插件玩玩

改进胡锅巴的思路

用过 Mac 的同学都知道,用 Safari 看视频全屏的话,会自动生成一个桌面分屏,随意切换桌面都能后台播放,这样一来,虚拟机的工序就可以省了 (至于 Videospeed 插件有没有兼容 Safari 就是另外一回事了)

这条路走到底的话,后台播放要知道什么时候去手动下一集?(开声音听不难受的吗)

于是 @xieyi 依据 视频播放时的 CPU 占用率一定比暂停时高,这一点在 Flash Player 上体现的更明显,写了个又骚又妙的脚本

Notification-Windows Notification-macOS

秒刷不靠谱

在这里我选择全屏后台播放,而不是去用加速脚本秒过,这是因为在学习通后台服务器端,有一定的检测 作弊机制,对刷这个网课有一定了解的同学都知道:

Fake-Detect

他为啥能判断你作弊?后台大数据..?“别太高估了这群可能是外包的开发人员”

在学习通的服务器端检测机制:

  • 当你第一次请求播放 API 的时候,他会记录你请求的时间戳,然后每隔 60 秒检测一次心跳包。
  • 如果你频繁的请求新视频,不论你是加速看的还是直接拖 Safari 进度条,但是你几秒就看完了一节他好几分钟的课的事实,已经明明白白的摆在他服务器的请求数据里面的,然后你也就明明白白的了。

** 得出结论:秒刷不靠谱 **

进阶

写下这篇文章之前,去网上扒了点资料,在 52 破解 上找到了几个现成的小白一键软件

并且还很幸运的找到了俩篇有关学习通 App 反作弊机制的逆向文章,真的是算得上是意料之外的收获..

论坛上也有好几种刷超星尔雅学习通的软件:封装了一个专用刷课的浏览器,无外乎是 js、模拟观看、构造发送虚拟请求。个人不是很推荐前两种方式:

  1. 个人密码安全得不到保障
  2. 电脑安全不好说, E 语言 写的工具总是喜欢报毒。尽管开发者可能没那恶意,但是特征暴露经常报毒总是给人一种不安全的感觉

至于浏览器。道听途说了解到:专用浏览器中有加挖矿代码,隐形开销电脑资源。

说了这么多,用不用看你了,小白一键操作的东西小白都爱用,但是搞不好就变成小白鼠了。

总结一下上面的几种野路子,都是在客户端上的处理、倍速播放和模拟真实行为(通过油猴 js 脚本实现对浏览器里面的播放器模拟播放暂停下一节课的操作)

如果非要在上面办法中选出一种刷看网课的机制,我会选择油猴脚本(不加速)自动后台播放跳集。

升天

当然有解放生产力的办法真正意义上解放双手了

讲真话,上面提到,去网上爬思路的时候,扒到俩篇逆向分析客户端播放请求原理的文章,看完我默默献上了膝盖

大佬・真,从原理上分析解决问题:

佬中佬深入浅出,讲了逆抓包逆向分析的来来回回,分析服务端的收发检测机制,逆向分析破解加密算法更是秀得一愣一愣的。

话说回来,看完感觉思路顿时又有了千千万万种(夸张了但是确实有一种豁然开朗的感觉)

话又说回去,看完大佬的更加清晰的确定了自己是菜的事实..

总结一下,构造发送虚拟请求就是究级大杀器,直接摘抄一点原理解释:

为了模拟看网课,我们得先搞清楚,在正常的看网课操作下,客户端会发送什么东西到服务端:

  1. 除了加载那些 HTML, CSS, JS (视频播放器是一个 WebView), 以及字幕,副标题之类的东西
  2. 还会发送一堆 HTTP 请求,请求的参数里包含了我们的学习观看信息。那么我们直接丢掉 GUI 界面,我们只要每隔一分钟发送一遍他们
  3. 我们就可以让服务器认为我们真的在看网课。模拟播放器向服务器接口发送数据 (包括播放进度和检查点), 并自动回答章节测验题
  4. 没必要管第一个问题,因为实际上我们根本不用放视频

cubicpill 也说了:“实现较难 -> 需要找出生成代码,风险较大,但占资源少,可以在服务器上挂机”,但是他一边咕着一边就开坑了: Python 无 GUI 刷网课,其实写了这么多了,双创网课已经不想再说了,思路都是通的。

那么现在再要我选一种,当然是最后一种了,省事啊便利升天,只是可惜我还只是在啃 Java 和 安卓基础 哭.jpg

占个坑,回头写篇 揭秘刷阳光体育代跑,剧透一下:虚拟定位和用代码构造 HTTP 请求(原理和上面相近),但是批量化的路子上有更多可拓展的骚套路

注:本文章只供技术学习交流使用,模拟产生的后果自行承担