当前位置 : 主页 > 编程语言 > python >

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

来源:互联网 收集:自由互联 发布时间:2022-08-10
@[toc] ⛳️ 实战场景 本次实战目标站点为 https://www.ichunqiu.com/courses/qmxc,随机寻找一门课程点击播放,然后通过开发者工具获取视频文件地址。 这次我们测试的的课程 ID 与地址为:ht

@[toc]

⛳️ 实战场景

本次实战目标站点为 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,首先从其入手。

编写简单的测试代码,竟然出现了招聘启事。

import requests headers = { "Host": "www.ichunqiu.com", "Origin": "https://www.ichunqiu.com", "Referer": "https://www.ichunqiu.com/course/298" } form_data = { "rs": "6d896ff4dec07103fad79c1b010286b8", "type": "2", "section_id": "338", "time": "1653371562000" } res = requests.post('https://www.ichunqiu.com/video/info/338.m3u8?type=2', data=form_data, headers=headers) print(res.text)

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

问题应该出在 ts 参数,下面就通过断点分析该值,目测上猜测应该是 md5 。

断点调试,得到加密关键点代码如下:

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

u = new Rusha, c = sectionID + "icq", d = u.digest(c).substr(0, 32),

其中涉及的核心函数是 Rusha 和 u.digest(c),接下来就是漫长的扣取过程了。

⛳️ digest 实战扣取过程

为了扣取 Rusha 文件,我们找到了其定义位置,代码如下。

window.Rusha = y;

然后扣取第 1 行~399 行附近相关代码(截止 5 月 24 日可用)。

在接下来对扣取的结果进行改造和删减,例如下图。

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

接下来在删除 y 相关导出部分代码,如果你扣取失败,可以点击文末卡片,联系橡皮擦。

测试加密之后的结果,使用下述代码。

a.digest("338icq"); // '6d896ff4dec07103fad79c1b010286b8431b8fbe'

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

很明显官方截取的前 32 位,此时第一个步骤成功解决了。

但是也发现了一个问题,其实这个参数并没有动态值的加入,也就是说,它是固定的。

继续寻找被反爬原因,在请求头中又发现了 Sign 参数,但是还没等测试,再次被封了。

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

更换浏览器,再次尝试,发现就在 rs 参数之后,就是 Sign 参数。

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

这里的参数都可以直接获取到,不在进行或多说明,下面查看请求 m3u8 之后的响应内容。

其中 data 也被加密了。

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

再次跟进请求之后,发现 Ci 函数中存在解析代码,其逻辑在图片下。

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

果然最终解析出来的是 m3u8 文件内容,有目标就变得简单多了。

学Python爬虫,不看看m3u8文件如何加密?i春秋 m3u8 文件加密解析

r = xxtea.toString(xxtea.decrypt(n.data.data, xxtea.toBytes(i + sectionID)));

后续扣取 JS 部分的代码,参考上文一点点来就行。

上一篇:极客编程python入门-列表、元组、字典1/7
下一篇:没有了
网友评论