学 Python 爬虫,不看看 m3u8 文件如何加密?i 春秋 m3u8 文件加密解析
⛳️ 实战场景
本次实战目标站点为 https://www.ichunqiu.com/courses/qmxc
,随机寻找一门课程点击播放,然后通过开发者工具获取视频文件地址。
这次我们测试的的课程 ID 与地址为:https://www.ichunqiu.com/course/298
,你可以选择其它的,重点是用工具捕捉到 m3u8
文件。
请求网址: https://www.ichunqiu.com/video/info/338.m3u8?type=2请求方法: POST
请求表单数据如下所示:
rs: 6d896ff4dec07103fad79c1b010286b8
type: 2
section_id: 338
time: 1653371562000
其中出现了第一个加密参数 rs
,首先从其入手。
编写简单的测试代码,竟然出现了招聘启事。
问题应该出在 ts
参数,下面就通过断点分析该值,目测上猜测应该是 md5
。
断点调试,得到加密关键点代码如下:
其中涉及的核心函数是 Rusha
和 u.digest(c)
,接下来就是漫长的扣取过程了。
⛳️ digest 实战扣取过程
为了扣取 Rusha
文件,我们找到了其定义位置,代码如下。
然后扣取第 1 行~399 行附近相关代码(截止 5 月 24 日可用)。
在接下来对扣取的结果进行改造和删减,例如下图。
接下来在删除 y
相关导出部分代码,如果你扣取失败,可以点击文末卡片,联系橡皮擦。
测试加密之后的结果,使用下述代码。
很明显官方截取的前 32 位,此时第一个步骤成功解决了。
但是也发现了一个问题,其实这个参数并没有动态值的加入,也就是说,它是固定的。
继续寻找被反爬原因,在请求头中又发现了 Sign
参数,但是还没等测试,再次被封了。
更换浏览器,再次尝试,发现就在 rs
参数之后,就是 Sign
参数。
这里的参数都可以直接获取到,不在进行或多说明,下面查看请求 m3u8
之后的响应内容。
其中 data
也被加密了。
再次跟进请求之后,发现 Ci
函数中存在解析代码,其逻辑在图片下。
果然最终解析出来的是 m3u8 文件内容,有目标就变得简单多了。
后续扣取 JS 部分的代码,参考上文一点点来就行。
📢📢📢📢📢📢💗 你正在阅读 【梦想橡皮擦】 的博客👍 阅读完毕,可以点点小手赞一下🌻 发现错误,直接评论区中指正吧📆 橡皮擦的第 <font color=red>689</font> 篇原创博客
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/a7fdcac3a5712466f944117fa】。文章转载请联系作者。
评论