jokin1999 发表于 2018-9-11 12:08

XX网课协议分析报告

本帖最后由 潇未然 于 2019-6-6 18:27 编辑

很多人还是认为这是一个脚本或程序发布的帖子,在此声明:本帖仅供技术参考,分析XX网课的数据传输加密方式,不提供任何刷课工具!

## 前言

今年6月左右就已经完成对XX的协议分析了,并且制作了一些相关的小脚本供大家使用,但相信还是有很多人想知道我是如何对XX的协议进行分析的,接下来会带大家慢慢分析。

需要额外声明的是:目前XX已经加入了对H5的支持,通过简单的review可以发现其可能对加密协议进行了加密,可以简单参考下图。



所以暂时不考虑从H5方向进行分析,转向flash,因为像XX这样的平台必定会对比较老的一些浏览器进行支持,所以必然会有swf或flv文件存在,这可能就成为了本次分析的重要线索。

## 下载播放器

通过使用`IE浏览器`打开XX的课程页面,发现其使用了flash播放器,被我们抓了个正着!果断下载其(https://mooc1-2.chaoxing.com/ananas/modules/video/cxplayer/player_4.0.11.swf)。

## 反编译播放器

swf文件就好解决的多了,使用(https://github.com/jindrapetrik/jpexs-decompiler)工具对其进行反编译。



至此我们已经得到了一个文件夹的ActionScript文件。



## 分析协议

不能盲目一个一个去看脚本是怎么写的,通过播放、暂停等对X星页面的视频操作,并使用`Chrome开发者工具`进行XHR抓包,得到下图的GET通信。





从这条XHR通信包可以看出,xx星在我们对课程视频进行操作时,会向服务器提交`影片时间`、`影片ID`、`课程ID`、`用户相关信息`、`播放时间`以及一个加密的验证字段`enc`。

我们需要在其他地方找到这些信息,于是通过对其页面源码的搜索,发现了除`播放时间`、`enc`字段外的所有信息。



于是我们需要把重心放在`enc`这个诡异的字段上了。

通过`仔细辨认`这个诡异字段,从一个合格计算机爱好者的直觉出发,这`应该`是一条MD5或者其他如希哈算法等生成的一条签名信息,服务器是通过这条信息判断传输过去的数据的有效性的。

优先假设这是条MD5算法得出的值,我们将计就计,在之前导出的的`ActionScript`文件夹中不分大小写于全文件夹搜索`MD5`,果不其然,有结果。



然后小眼一瞟,这不是熟悉的`enc`字段吗,虽然有2个结果,但是直觉告诉我,答案就在这里!!!果断查看对应行!!



鉴于其为`ActionScript`我们为其加上对于`JavaScript`格式分析的代码色彩。



一下子舒服多了有没有!

我们仔细看其算法,变量`url`中并没有之前协议中抓取到的`playingTime`,我们节省时间,再看另一个`enc`的代码。



看到`playingTime`和其他在之前包中的字段!!那么我们就尝试使用其对数据进行签名!

抓到MD5加密算法之后,后面的流程就很简单了!

## 模拟协议

查看其原生协议的返回值,其返回了一个`json`数据,包含了通过了信息。



经过测试,如果胡乱填写`enc`字段,其返回`false`。

> 在`原理分析`中,我提到有未能抓取的字段,那是为了自动刷完所有课程设计的东西,在后来发布的脚本中,我没有使用这个方法,而是使用浏览器的开发者工具抓取,虽然需要挂着,但更保险。

在制作协议之前,我们先需要引用MD5算法(谁让JS原生不支持MD5呢)。

然后我们需要对课程页面进行`iframe`的抓取,其的`data`信息(课程信息)我们需要使用,详情查看源代码中的`getCourseInfo`方法,代码比较简单,这里就不再赘述了。

**源代码开发时X星并不支持H5,所以部分参数上可能有出入!此分析主要通过H5进行分析**

获取到课程信息后我们需要对服务器发送2条信息,1条是视频开始播放的位置记录,另一条是视频播放完成辣~

通过测试,发现2次信息发送间隔不能小于30秒左右,如果小于这个值,X星也会返回`false`。

具体的协议加密、发送请查看源文件,这里就不再赘述了,脚本比较简单,有jQuery基础的同学都能看懂。

## 总结

别看XX恶心,其实还是给我们留了后路的。

如果真的要赶尽杀绝,那就只用H5了,这加密的js脚本这是让人头疼。

分析其协议最困难的部分就是找到它的MD5算法,其实第一次对其分析的时候,我还真对它的MD5猜过,但是意料之中的失败了。

希望这篇分析报告能对你有所帮助,所有的源码可以在[我的GitHub](https://github.com/jokin1999/chaoxing-solution)查看。

Sp4ce 发表于 2018-9-12 13:09

那个加密的JS好像是JSFUCK加密方式

linlei 发表于 2018-9-11 22:29

还有这种操作。。。

chuwenjie161 发表于 2018-9-11 17:47

看了这篇文章感觉如沐春风,从未有过的豁然开朗,谢谢up主

ccph 发表于 2018-9-11 16:36

超星是真的恶心,我已经分析过了,嗯,定时get,最后被封。上学期事儿

qqqmyj 发表于 2018-9-11 16:41

感谢分享教程。

日后再说、 发表于 2018-9-11 17:02

所以今年的网课不用自己看了?{:301_997:}

36449708 发表于 2018-9-11 17:07

{:17_1068:} 稳如老狗啊 兄弟 可惜用不上了

liaoyuexu 发表于 2018-9-11 17:13

还是老老实实上课吧。。。。

aaah 发表于 2018-9-11 17:16

确实用不上了

happy曲月 发表于 2018-9-11 17:21

我上学那会不敢用这些东西,找了一个软件,名字忘了,功能就是检测到屏幕5秒没有活动的时候自动点击一下,夜晚睡觉时候把课挂上,早上起来就可以直接搜题做了,这种挂课方式非常安全,就是得自己做题

M丶runner 发表于 2018-9-11 17:38

哪位兄台能够解释下什么意思?

Right_Hai 发表于 2018-9-11 17:46

虽然看不懂,但是觉得很;厉害
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: XX网课协议分析报告