[2024-07-01] 苦瓜视频的视频下载链接变动
本帖最后由 LoveCode 于 2024-7-1 01:14 编辑西窗剪烛思长离。
瓜海鸣潮唤今汐。
视听瑝珑寻龙影。
频频保底泪湿衣!
---
== 哈哈,看过道友上篇文章,这回我可懂了!不过这次为何不能提这四字灵兽了,之前不是有篇文章直接说出它的真名了吗??
=> 不,你不懂我的悲伤 ╥﹏╥...… 哎,话说回来,本次斗法之后我有点小担心,因为它越来越强了,所以这次不能让它知道我已知晓了它的招式弱点。
=# 等等,我新来的,还不晓得这 `苦瓜视频` 是何意呢?
== 哎~不要被标题误导啦,你把每行诗开头第一字连起来看看就好了,记得千万不要说出那四个字,其它的就不要问了。好啦好啦,道友快开始吧。
=> 真是急性子呐,给,这是本文结构。
1. 简述下载链接的变动
2. 简析下载链接的生成
3. 并没有提供源代码
---
# 惊闻灵兽进阶
被困二次元小世界数十年,近日侥幸脱困(指四月番完结),突然收到其它道友的消息,称某灵兽度过天劫、已踏入 `二阶` 境界(指网站使用了更为严格的反爬策略)。
## 重要说明
因为赶时间(瓜海鸣潮啦!)所以没有详细讲解分析过程,**仅记录关键的步骤**。
另外,**我建议大家不要盯着电脑端的网页版了,现在的反爬策略已经有些强度,建议大家转向手机网页版或者其它的解析源等等**。
以后我可能不会紧跟着网站的变动而更新了,因为我关注的 `UP` 去了 `B` 站……我也要再次探索二次元小世界了(七月番即将启动!)。
## 下载链接的变动
简要说明
1. 计算下载链接的算法不变,同 [ 苦瓜视频的视频下载链接变动](https://www.52pojie.cn/thread-1917707-1-1.html) 中所示。
2. 链接多了一次处理,给它添加三个字段 `webid、fid、wid`(*其中 `fid`、`wid` 目前可以忽略,没有做强校验*)。
3. 以前可以直接访问视频链接(指在浏览器地址栏中直接输入视频地址即可访问),现在需要在请求头中添加 `referer` 字段。
关于链接的改动看图!
再经过测试,确定目前(指发文的此刻)只需要 `webid` 、并且它不能随意修改。
---
# webid 的第一个部分
首先,**`webid` 分为两部分,通过符号 `-` 分割**,如:`A-B` 这种形式。
第一个部分可以从视频播放页,如 `https://www.ixigua.com/7383684722985009699?wid_try=1` 中提取,它就是 `window['UIFID']` 属性或者 `window['UIFID_TEMP]'` 属性的值啦。
虽然 `webid` 的第一个部分位于视频播放页的 `HTML` 中,但想要获取它**最初需要访问两次**。
```python
import requests
# 需要保留 cookie
CLIENT = requests.Session()
# 这内容太长,所以省略了
headers = {}
url = "https://www.ixigua.com/7383684722985009699"
params = {"wid_try": "1"}
# 第一次访问是为了获取服务器设置的 `cookie`
# 此时返回的是一个主要包含 JS 代码的 HTML,这些 JS 会生成一个 cookie 用于第二次请求。
# 现在可忽略第一次请求的内容,因为不影响后续的操作
response = CLIENT.get(url, headers=headers, params=params)
# 第二次访问可以获取到视频播放页的内容了
response = CLIENT.get(url, headers=headers, params=params)
# 之后就可以访问其它视频播放页,只要获取到视频页的内容,就可以提取出 UIFID 咯
# 另外,这个 UIFID 似乎是固定的…………不需要重复获取
```
---
# webid 的第二个部分
```js
// webid 的第二个部分的生成逻辑
s = webid 第一个部分的值 + 第一次处理后的链接中的 expired 值 + 'bytedance';
result = md5(s)
```
如图所示!红色中的结果是相同的,证实了上述的公式。
怎么找到的呢?根据 `webid` 第二个部分(包括后面的 `fid、wid`)的长度是 `32` 位,判断它是 `md5` 处理,搜索全局搜索 `md5` 算法的关键值 `1732584193`(不做过多解释,具体请必应搜索),最终定位到位置!
> 为了便于测试,我会将 `window.UIFID` 的值(也就是 `webid` 第一部分的值)替换成 `123456`,这样找的时候能快速发现相关的线索。
>
> 可以通过全局搜索 `return new e(t).finalize(n)` 快速定位到这个位置!
---
# 番外
因为以后我可能不会更新了,所以还是将 `wid、fid` 的生成逻辑说明吧,现在没有校验不代表以后不会,下面就更加迅猛了。
> 还是建议不要盯着电脑的网页版了。
## wid 的生成逻辑
如图所示:
> 最开始的 `webid` (也就是下图标号 `1` 处)来自于视频播放页的 `HTML` 中哟。也就是说它和 `window['UIFID']` 在同一个 `HTML` 文档中啦。
## fid 的生成逻辑
```js
// 可以为任意的内容,只要满足 32 位长度、16 进制数组成即可
```
如图所示:
那么上述的 `cookie fpk1` 是怎么生成的呢?其实它是在**计算浏览器指纹**。既然如此 `fid` 的值就可以任意改了!
---
# end 来个解密纯算好调用一下! 大佬出个工具 虽然看得懂,但是你叫我弄我是直接睡觉的,保头发要紧{:1_918:} 楼高百尺倚云端,
主客欢声震九天。
牛气冲天惊日月,
逼得神仙也下凡。
我也来一个:lol 666,我今天调试刚找到vmp,准备明天再看来着.... 藏头诗!高高高! 不错不错啊,很好的分析 oncall24 发表于 2024-7-1 01:33
楼高百尺倚云端,
主客欢声震九天。
牛气冲天惊日月,
哈哈,睡觉睡觉了:sleepy: {:1_921:} 牛逼,这么块就搞定东瓜了! 湿人湿人,楼主多才多艺。:lol 楼主不仅多才而且多艺