声明

这个程序只是用来演示查看后台和对接后台的原理和过程,供代码学习参考,请勿滥用!

起因

因为上海疫情,我们所有的活动都得在线上完成,作为一个新时代好学生,我该做点什么了。
我的学校选择的上课平台是希沃的立知课堂,教师端是希沃白板电脑客户端,学生端是网页端、微信小程序端、移动设备软件端。

观察后台

一看到网页端,就说明可以用F12查找后台,那么我破解前期,就做了观察这一个工作。
用了大概两天时间,找到了主要的两个后台:

/*
后文将此API称为:Api I
这个后台被官方用来获取课件略缩图,因为可以调整分辨率,所以就能用来浏览课件。
这个后台无需Cookies
需要通过GET方式传递数据, 等于号后的是实例数据:
1. 课件ID: coursewareId=xxxx-xxxx-xxxx-xxxxxxx
2. 课件版本: version=19
3. 返回图片的分辨率: resolution=960_640
以上所有字段必须需传递
*/
GetCoursewareApi = "https://s2.imlizhi.com/slive/pc/enow/thumbnail/api/v1/courseware";
/*
后文将此API称为:Api II
这个后台被官方用来获取课件列表和所需数据,为了能准确获取课件ID等信息,需要用到这个后台。
这个后台需要立知的Cookies
需要通过POST方式传递数据, 包含实例数据:
1. 教室的Uid  '{"courseUid":"a57ee0d4f7fc4e39b0e95e3d53de2574"}'
所有字段必须需传递
*/
var ServerTime = new Date().getTime();
GetCoursewareListApi = "https://s2.imlizhi.com/slive/pc/apis.json?actionName=GET_COURSE_ACCESS_CODE_LIST&t=" + ServerTime;
/*或者:*/
GetCoursewareListApi = "https://s.imlizhi.com/slive/pc/apis.json?actionName=GET_COURSE_ACCESS_CODE_LIST&t=" + ServerTime;

那怎么实现呢?

选择平台

因为后台需要使用Cookies,所以很难实现桌面客户端。
原先想到浏览器扩展,但扩展只能用于同内核浏览器,且需要调用浏览器API接口,兼容性不行还编起来难。
我选择了以下两种方案:

  1. Tampormonkey 油猴脚本
  2. 直接在浏览器书签栏加入带有JavaScript脚本的书签,编起来简单,也能获取网站一切内容的访问权限,同时AJAX跨域的问题也能解决。
    为了方便给读者看到代码实现原理,我选择了后者。
    (*注:为后者编写的代码可以快速地移植到前者,不需要改动代码)

对接API

因为对接的后台处于网页教室的同目录或子目录,所以我使用了相对路径。

先对接Api II

我使用了原生AJAX代码进行POST数据传递:

获取Uid

获取courseUid的方法很简单,下面是网页端教室链接:
https://s2.imlizhi.com/slive/pc/room?courseUid=534617396df542e0a09fd01f80e1ef2a&appCode=en-easilive
只需要用split,拿到courseUid即可。

var uid = window.location.href.split("?")[1].split("&")[0].split("=")[1];

获取ServerTime

通过观察,可以发现传递的t对应以下代码:

var ServerTime = new Date().getTime();

课件列表实现的完整代码

function GetList(){var uid = window.location.href.split("?")[1].split("&")[0].split("=")[1];var ServerTime = new Date().getTime();var xhttp = null;if(window.XMLHttpRequest){xhttp = new XMLHttpRequest();}else if(window.ActiveXObject){xhttp = new ActiveXObject('Microsoft.XMLHTTP');}/*浏览器兼容性*/xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {var jstr = eval("(" + this.responseText + ")");if(jstr["error_code"] == 0){var OPStr = "";for(var i = 0; i <= 10; i ++) {try{ OPStr += (i + 1) + ". " + jstr.data[i].name + "\n"; } catch(e){}}let k = prompt("请选择需要打开的课件(填数字编号)\n" + OPStr, "1");//GetCourseware(jstr.data[k - 1].cid, jstr.data[k - 1].version);} else {alert("课程未开始或课程已结束!");}}};xhttp.open("POST", "./apis.json?actionName=GET_COURSE_ACCESS_CODE_LIST&t=" + ServerTime, true);xhttp.setRequestHeader('Content-Type','application/json');              xhttp.send('{"courseUid":"' + uid + '"}');
}

再对接Api I

function GetCourseware(cid, ver){var xhttp = null;if(window.XMLHttpRequest){xhttp = new XMLHttpRequest();}else if(window.ActiveXObject){xhttp = new ActiveXObject('Microsoft.XMLHTTP');}xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {//ShowCourseware(this.responseText);}};xhttp.open("GET", "./enow/thumbnail/api/v1/courseware?coursewareId=" + cid + "&version=" + ver + "&resolution=960_640", true);xhttp.send();
}

最后将获取的课件图片列表输出到浏览器新标签页

传入的filelist是字符串类型,不是JSON

function ShowCourseware(filelist){let dochtml = "";let MaxPageNum = 200;let PageCnt = 0;let result = filelist;let obj = [];filelist = eval("("+result+")");var win = window.open();if(filelist.message != "error"){for(var i = 0; i <= MaxPageNum; i ++){try{ obj[filelist.data[i].pageIndex] = filelist.data[i].downloadUrl; }catch{}}for(i = 0; i <= MaxPageNum; i ++){if(obj[i] != undefined) { dochtml += "<img src='" + obj[i] + "' title='第" + (i + 1) + "页'><br>"; PageCnt += 1; }}var script = `<script>function printmode(){document.getElementsByClassName("msg")[0].remove();document.getElementsByTagName("style")[0].innerText = "img{width:100%;margin-top:15px;}";}</script>`;var header = `<title>课件浏览器</title><meta charset="utf-8"><style>body{background-color: rgb(50, 54, 57); user-select: none;margin:0px;}.ctrl{font-size:14px; border-radius:15px; padding:5px; padding-left:13px; padding-right:13px; background-color: rgb(51, 51, 51); color:#FFF; border:1px solid #CCC;}.msg{position:fixed; top:15px; left:15px; z-index:5;} img{width:60%; min-width:600px; margin-top:10px; border-radius:4px;}.printBtn{margin:10px;} a{color:#FFF; text-decoration:none;}</style>`;var body = `<body><div class="ctrl msg">&nbsp;共` + PageCnt + `页&nbsp;</div><center>` + dochtml + `<button οnclick="this.remove();printmode();" class="ctrl printBtn">打印&nbsp;&amp;&nbsp;PDF存储模式</button></center></body>`;win.document.write(header + script + body);} else {win.document.write("<title>出现问题</title><h2>抱歉,无法为您获取课件</h2><hr><b>你可以联系该课件的分享者,以取得解决方案。</b>");}
}

我在里面加入了 “打印&PDF” 存储模式,方便使用Firefox、Chrome和Edge的PDF存储模式将课件存为文件。

完整代码

给大家加上完成后的代码:

javascript:
function ShowCourseware(filelist){dochtml = "";MaxPageNum = 200;PageCnt = 0;result = filelist;obj = [];var filelist = eval("("+result+")");var win = window.open();if(filelist.message != "error"){for(var i = 0; i <= MaxPageNum; i ++){try{obj[filelist.data[i].pageIndex] = filelist.data[i].downloadUrl;}catch{}}for(i = 0; i <= MaxPageNum; i ++){if(obj[i] != undefined) {dochtml += "<img src='" + obj[i] + "' title='第" + (i + 1) + "页'><br>"; PageCnt += 1;}}var script = `<script>function printmode(){document.getElementsByClassName("msg")[0].remove();document.getElementsByTagName("style")[0].innerText = "img{width:100%;margin-top:15px;}";}</script>`;var header = `<title>课件浏览器</title><meta charset="utf-8"><style>body{background-color: rgb(50, 54, 57); user-select: none;margin:0px;}.ctrl{font-size:14px; border-radius:15px; padding:5px; padding-left:13px; padding-right:13px; background-color: rgb(51, 51, 51); color:#FFF; border:1px solid #CCC;}.msg{position:fixed; top:15px; left:15px; z-index:5;} img{width:60%; min-width:600px; margin-top:10px; border-radius:4px;}.printBtn{margin:10px;} a{color:#FFF; text-decoration:none;}</style>`;var body = `<body><div class="ctrl msg">&nbsp;共` + PageCnt + `页&nbsp;</div><center>` + dochtml + `<button οnclick="this.remove();printmode();" class="ctrl printBtn">打印&nbsp;&amp;&nbsp;PDF存储模式</button></center></body>`;win.document.write(header + script + body);} else {win.document.write("<title>出现问题</title><h2>抱歉,无法为您获取课件</h2><hr><b>你可以联系该课件的分享者,以取得解决方案。</b>");}
}
function GetCourseware(cid, ver){var xhttp = null;if(window.XMLHttpRequest){xhttp = new XMLHttpRequest();}else if(window.ActiveXObject){xhttp = new ActiveXObject('Microsoft.XMLHTTP');}xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {ShowCourseware(this.responseText);}};xhttp.open("GET", "./enow/thumbnail/api/v1/courseware?coursewareId=" + cid + "&version=" + ver + "&resolution=960_640", true);xhttp.send();
}
function GetList(){var uid = window.location.href.split("?")[1].split("&")[0].split("=")[1];var ServerTime = new Date().getTime();var xhttp = null;if(window.XMLHttpRequest){xhttp = new XMLHttpRequest();}else if(window.ActiveXObject){xhttp = new ActiveXObject('Microsoft.XMLHTTP');}xhttp.onreadystatechange = function() {if (this.readyState == 4 && this.status == 200) {var jstr = eval("(" + this.responseText + ")");if(jstr["error_code"] == 0){var OPStr = "";for(var i = 0; i <= 10; i ++) {try{OPStr += (i + 1) + ". " + jstr.data[i].name + "\n";} catch{}}let k = prompt("请选择需要打开的课件(填数字编号)\n" + OPStr, "1");GetCourseware(jstr.data[k - 1].cid, jstr.data[k - 1].version);} else {alert("课程未开始或课程已结束!");}}};xhttp.open("POST", "./apis.json?actionName=GET_COURSE_ACCESS_CODE_LIST&t=" + ServerTime, true);xhttp.setRequestHeader('Content-Type','application/json');              xhttp.send('{"courseUid":"' + uid + '"}');
}GetList();

使用方法和最终效果

使用方法

  1. 将完整代码复制
  2. 将本页内容加入书签栏(不要放在其他收藏夹)


3. 右键加入的书签,点击”编辑“


4. 名称改为“破解”(其他名称也没问题)


5. 删除URL后的输入框的内容,在里面粘贴复制的代码

6. 点击“完成”即可

最终效果

在教室内点击刚才加入的书签,会弹出以下画面,找到想要打开的课件,输入对应序号,点击确定。

看见课程列表:


这个程序只是用来演示查看后台和对接后台的原理和过程,供代码学习参考,请勿滥用!

破解希沃立知课堂——查看课件篇相关推荐

  1. 希沃展台如何使用_【希沃视频展台--让课堂展示从未如此轻松!】PjTime.COM 综合导购 希沃...

    无论是作业试卷的讲解,还是实验过程展示,课堂展示对于课堂效率的提升始终起着重要的作用,然而目前市场上还是充斥着不少操作复杂.清晰度十分尴尬的展台产品,影响着老师的课堂效果,为此我们特意打造了希沃 7系 ...

  2. 培智学校计算机教学案例,希沃电子白板在培智语文课堂教学中的运用案例分析——以课例《四季的衣服》为例...

    内容摘要:随着信息技术的不断发展,希沃电子白板在培智课堂教学中得到了广泛的推广与运用,为学生提供了丰富的学习资源,将其融入培智教学,能为学生呈现出一种富有趣味性和知识性的课堂,能调动学生积极性,提高学 ...

  3. 计算机白板培训报道,巧用白板,增色课堂——南宁市五象教育集团小学部开展希沃白板五实操培训活动...

    原标题:巧用白板,增色课堂--南宁市五象教育集团小学部开展希沃白板五实操培训活动 南宁市五象教育集团 2020.9.22 巧用白板 增色课堂 ······● -- ●······ 近日,南宁市五象教育 ...

  4. 希沃课件同步显示服务器异常,希沃白板如何使用PPT 希沃白板PPT无法修改是什么原因如何解决...

    希沃白板如何导入导出PPT?希沃白板PPT无法修改怎么办?西沃希沃白板是课件制作神器,用户也可以导入PPT,或者把自制课件导出为PPT,但是导入PPT无法修改是因为导入的PPT是低版本的.ppt,只是 ...

  5. 希沃展台如何使用_【海安幼教微家园】玩转希沃白板 点亮精彩课堂 —长江路幼儿园开展希沃一体机操作技能培训...

    点击上方蓝字关注我们 为了进一步发挥电子白板在课堂教学中的优势,实现教师信息技术与教育教学的深度融合.10月13日下午,海安市长江路幼儿园组织全体教师在城南分园多功能厅进行了希沃一体机操作技能培训. ...

  6. html如何插入avi视频,学用系列|希沃云课堂无法播放插入视频?看这里一招搞定视频转换...

    这两天不少老师都在尝试使用希沃云课堂录制时间胶囊或是开启云直播,当然群众的智慧(问题?)是无限的,今天给大家分享一个小技巧,如果遇到云课堂视频无法播放插入视频,怎么样又快又好一招搞定! 支持多媒体插入 ...

  7. 计算机硬件希沃课件,希沃课件怎么转为ppt?

    希沃软件现在广泛应用于很多教学互动和日常工作交流中,我们都知道,它的课件一般都是enbx文件格式,这种文件格式要在希沃软件内才能够打开.编辑和展示.那么,我们能不能将希沃课件转换为ppt格式的文件呢? ...

  8. 计算机硬件希沃课件,希沃白板的课件能转换成ppt吗?如何转换?

    希沃白板作为一款优秀的课件制作软件,能够为你制作专属于自己的课件内容,对于希沃白板很多人还不太了解,希沃白板的课件能转换成ppt吗?很多用户不知道如何将课件转化为PPT文件,想知道的赶快来看看下面的教 ...

  9. 希沃白板如何解决手机端播放课件内视频出现黑屏闪退

    使用希沃白板的手机端或微信小程序端播放视频时,会受到手机和微信浏览器的限制,能播放的视频格式有限,请在制作课件时转换好视频格式才进行直播等 我最近在使用希沃白板的云直播功能,希沃白板的云直播功能十分好 ...

最新文章

  1. shell 脚本逐行读取多个文件,并逐行对应
  2. Sublime Text 3 史上最性感的编辑器
  3. 递归实现10进制转8进制,字符串数字互转,判断数组正逆向
  4. cocos2d-x初探学习笔记(10)--运动中的加速度效果
  5. 网龙面试后多久有回应_回应面试问题
  6. 如何在机器学习项目中使用统计方法的示例
  7. 高效管理论坛广告贴的小窍门
  8. C++之 把字符串作为宏参数
  9. 四项第一!这款芯片让全世界嫉妒!
  10. 不得罪人 VS 不怕得罪人
  11. 入门必学 | R语言常见的报错指南
  12. 一种轻量化多尺度的遥感跨模态图文检索方法
  13. chinaDRM会议简记
  14. u盘提示需要格式化?怎么实现数据恢复?
  15. 极坐标形式的复数计算器
  16. VS程序中使用ODBC登陆sql数据库的时候出现18456错误
  17. lua 中pairs 和 ipairs差别
  18. Message Bus - 消息总线
  19. 医学图像质量评价方法SSIM
  20. trim()函数的含义及使用方法

热门文章

  1. 无线蜂窝通信模组是什么?
  2. 数据挖掘-二项逻辑斯蒂回归模型算法的R实现
  3. 《金蝶ERP-K/3完全使用详解》—— 导读
  4. 从Hadoop到Spark、Flink,大数据处理框架十年激荡发展史!
  5. HDU - 3374(最小表示法+最大表示法)
  6. 西湖大学人工智能与生物医学影像实验室招聘科研助理及博士后
  7. Java的Scanner对象
  8. 六成受访美国人认为教育系统正在令这一代人失望
  9. 京东2019春招商业分析试卷[题目整理]
  10. 复旦大学有计算机网络专业,复旦大学计算机网络专业计划..doc