美文网首页python热爱者Python新世界码农的世界
python爬虫分析“超新尔雅”网课协议!

python爬虫分析“超新尔雅”网课协议!

作者: Python新世界 | 来源:发表于2018-09-14 19:52 被阅读5次
    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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


    QQ图片20180808144134.jpg

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

    下载播放器

    通过使用IE浏览器打开超星的课程页面,发现其使用了flash播放器,被我们抓了个正着!果断下载其flash播放器。

    反编译播放器

    swf文件就好解决的多了,使用JPEXS Free Flash Decompiler工具对其进行反编译。

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

    分析协议

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议! 某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

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

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

    一下子舒服多了有没有!

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

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

    模拟协议

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

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

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

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

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

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

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

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

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

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

    总结

    别看超星尔雅系统恶心,其实还是给我们留了后路的。

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

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

    所有刷课Python源码,

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

    切勿用于任何商业用途以及违法用于,仅供参考学习!

    某高校学生利用python爬虫技术,轻松破解“超新尔雅”网课协议!

    相关文章

      网友评论

        本文标题:python爬虫分析“超新尔雅”网课协议!

        本文链接:https://www.haomeiwen.com/subject/ecragftx.html