wanglaihuai 发表于 2023-2-16 14:56

某网络学院学习的”偷懒“思路分析

前几日接到求助,帮朋友完成20课时的网络学习。
我想都没想就接下了,寻思找个接口直接把学习时间提交上去,易如反掌。
最不济最不济,咱还能16x播放,也简单的很。

http://img.03110311.xyz/imgs/2023/02/77b518ed1aba36d2.jpg

然鹅,当我登陆的时候,发现自己还是太天真。
首先,不能多开窗口。打开第二个播放窗口后,就会弹出:

http://img.03110311.xyz/imgs/2023/02/09d607ab5b58570b.jpg


其次,倍速播放不管用……无论多快的播放速度,获取学习时长的间隔还是一样的。
经过分析,这个学习,是通过每隔一段时间,通过post请求上报视频播放时间,而不是上报播放时长。


http://img.03110311.xyz/imgs/2023/02/55ca7331076c740d.jpg

这已经是我见过防作弊做的最好的站了(除了人脸识别上课)。

于是有两个思路来“偷懒”:

1,直接post播放时长。

按照请求格式,把session_time字段写的长一写(甚至直接写成本节课的时长,我没测试。)然后提交,就可以获得学习时长。


http://img.03110311.xyz/imgs/2023/02/a249270a99d8b8ab.jpg

http://img.03110311.xyz/imgs/2023/02/4757f0106bcf976e.jpg

但是,这个方法太暴力,不知是否会出发后台警报(之前测试一个学习平台,post请求发出去,返回了“账号作弊已记录,拉黑……”巴拉巴拉的)。

2,窗口多开。

稳妥一点的还是老老实实的挂课,多窗口学习。
搜索“停止计时”,发现多窗口检查居然是通过一个xhr请求的返回值1/2来判断。那我们可以拦截并修改这个请求,即可绕过检测。


http://img.03110311.xyz/imgs/2023/02/eee5cbf61b2adf92.jpg

这里我用的油猴脚本,也没啥技术含量,就几行简单的代码:

(function() {
    'use strict';
    const originOpen = XMLHttpRequest.prototype.open;
    XMLHttpRequest.prototype.open = function (method, url) {
    if (url.indexOf("checkcourse.do")>-1) {
      this.addEventListener("readystatechange", function () {
            if (this.readyState === 4) {
            const res = JSON.parse(this.responseText);
            Object.defineProperty(this, "responseText", {
            writable: true,
       });
       this.responseText = "1";
         console.log(this.responseText);
      }
    });
}
originOpen.apply(this, arguments);
};
})();

总结:
虽然写来简单,但是过程还挺曲折的,作为一个js小白,绕了不少弯路,也学习到了不少新东西。大佬勿喷。

eeyou 发表于 2024-3-9 22:09

https://v4.21tb.com/的平台是学习课时的。但真的时长太多,这个倍速能解决一部分 但他有个实际开始播放的累积真实时间统计,试过了逻辑上是测试本地播放的真实时间 ,如何修改这个数值让本地能放行倍速的成果上传啥的,因为光有倍速后这个时间如果不达到时长要求也是不行的,而这个时长要求是直接显示的 和视频的总时长相关非常少。


以下代码是右侧属性那的,观察下来应该是上面箭头处的数值被哪里赋值了,如何修改可以平掉这里的限制?我感觉是本地的脚本统计出来的,但因为我是小白仅喜欢折腾,不知道方向和手法方法,请大佬们指点下如何下手?

[*]accessKey: ""
[*]attributeStyleMap: StylePropertyMap {size: 4}
[*]attributes: NamedNodeMap {0: style, style: style, length: 1}
[*]autocapitalize: ""
[*]autofocus: false
[*]baseURI: "https://v4.21tb.com/courseSetting/coursePlay/30a02b3d65a64b4a9a1507f614f4833d%26knjd%2630a02b3d65a64b4a9a1507f614f4833d%2647d8de32dba94754be6e6b2d5e0c5ef2"
[*]childElementCount: 0
[*]childNodes: NodeList
[*]children: HTMLCollection []
[*]classList: DOMTokenList(0)

[*]length: 0
[*]value: ""
[*][]: DOMTokenList
[*]className: ""
[*]clientHeight: 0
[*]clientLeft: 0
[*]clientTop: 0
[*]clientWidth: 0
[*]contentEditable: "inherit"
[*]dataset: DOMStringMap {}
[*]dir: ""
[*]draggable: false
[*]elementTiming: ""
[*]enterKeyHint: ""
[*]firstChild: text
[*]handwriting: true
[*]hidden: false
[*]id: ""
[*]inert: false
[*]innerHTML: "(观看时长不少于10:44,您已学习10:44)"
[*]innerText: "(观看时长不少于10:44,您已学习10:44)"
[*]inputMode: ""
[*]isConnected: true
[*]isContentEditable: false
[*]lang: ""
[*]lastChild: text
[*]localName: "span"
[*]namespaceURI: "http://www.w3.org/1999/xhtml"
[*]nextElementSibling: span#ultraClearOperate
[*]nextSibling: span#ultraClearOperate
[*]nodeName: "SPAN"
[*]nodeType: 1
[*]nonce: ""
[*]offsetHeight: 0
[*]offsetLeft: 0
[*]offsetTop: 0
[*]offsetWidth: 0
[*]outerHTML: <span class="object-value-string value" title="(观看时长不少于10:44,您已学习10:44)" style="box-sizing: border-box; min-width: 0px; min-height: 0px; white-space-collapse: preserve; unicode-bidi: -webkit-isolate; color: var(--sys-color-token-property-special);">"<span style=\"line-height: 38px; color: rgb(255, 255, 255); font-size: 14px; float: left;\">(观看时长不少于10:44,您已学习10:44)</span>"
[*]outerText: "(观看时长不少于10:44,您已学习10:44)"
[*]ownerDocument: document
[*]parentElement: div.extra-operate.hide
[*]parentNode: div.extra-operate.hide
[*]part: DOMTokenList
[*]scrollHeight: 0
[*]scrollLeft: 0
[*]scrollTop: 0
[*]scrollWidth: 0
[*]slot: ""
[*]spellcheck: true
[*]style: CSSStyleDeclaration {0: 'line-height', 1: 'color', 2: 'font-size', 3: 'float', accentColor: '', additiveSymbols: '', alignContent: '', alignItems: '', alignSelf: '', …}
[*]tabIndex: -1
[*]tagName: "SPAN"
[*]textContent: "(观看时长不少于10:44,您已学习10:44)"
[*]textprediction: true
[*]title: ""
[*]translate: true
[*]virtualKeyboardPolicy: ""

zty001 发表于 2023-2-17 13:05

有点需求,每年要参加继教,不能倍数不能多开都算了,不在乎这一两天,慢慢挂就是,关键是学习几分钟就弹个窗口出来,有时候喊答题,有时候需要点继续学习之类的,不然就停止学习了,简直离不开人,上班又忙,没时间管,回家挂,照看娃儿也没时间去关,24个课时,挂了一个星期都没挂完,领导同事什么的,还会让帮他一起挂了,简直要疯掉

随风飘摇 发表于 2023-2-16 15:04

感谢楼主,谢谢楼主的知识。

smorfia 发表于 2023-2-16 15:15

感谢楼主,谢谢楼主的知识!!{:1_893:}

lfer 发表于 2023-2-16 15:18

“偷懒”,才是人类进步的最大源动力。感谢分享。

与时俱进 发表于 2023-2-16 15:34

做个成品吧

wanglaihuai 发表于 2023-2-16 15:40

与时俱进 发表于 2023-2-16 15:34
做个成品吧

最后已经是成品了,放到油猴就能多开窗口。

Pwaerm 发表于 2023-2-16 15:42

{:301_971:}

如果记词和判断在后端。这样不会有实际的效果。

侃遍天下无二人 发表于 2023-2-16 15:42

这个我好像见过,我的解决办法是挂到云主机上放几天不管

alilongyaxi 发表于 2023-2-16 15:49

感谢分享

wanglaihuai 发表于 2023-2-16 15:50

侃遍天下无二人 发表于 2023-2-16 15:42
这个我好像见过,我的解决办法是挂到云主机上放几天不管

问题在于,每节课都要点开才能学,还不能多开窗口。
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 某网络学院学习的”偷懒“思路分析