吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3470|回复: 12
收起左侧

[Web逆向] python获取m3u8真实地址下载视频

[复制链接]
cainfish 发表于 2022-12-13 00:00
本帖最后由 cainfish 于 2022-12-28 20:32 编辑

**python 下载m3u8文件,将喜欢的视频存储到本地**
一、 获取真实的地址
书接上回,在经过三层解密之后,终于在开发者工具中将JS跑起来了
    不知道咋回事的朋友可以看[https://www.52pojie.cn/thread-1725564-1-1.html](http://)  这一帖。


   在每次重新发送请求的时候,有个请求的链接,映入我的眼帘,因为每次请求index.m3u8 文件失败后,就会出现这个链接以请求新的资源文件。
image.png
对的就是以video.php 开头的那个链接,后面的参数_t有没有觉得好面熟,是不是像个时间戳?双击链接直接打开

发现浏览器竟然直接将index.m3u8,下载下来了。汗:rggrg:rggrg:rggrg:rggrg:rggrg:rggrg(让我情何以堪,上一篇还过了三关才跑起来的JS)。
这里的API ,竟然直接不用任何JS就可以访问到了,想想就气,但是貌似如果不过三关,也发现不了这个API。

连续刷新了几次链接,发现每次都会下载一个新的m3u8文件,文件内容不一致,所以推断文件是随机下载的。

image.png

index*.m3u8  文件内容如下:
image.png

回到开发者工具的网络选项:

注意看下图中的 箭头指向  
image.png

302  跳转了,注意上下两个地址发生了变化。
用上面的m3u8中地址加上跳转后的域名,拼接出来新的请求地址,请求后得到下面的内容:
image.png


Ts的文件终于出现了,但是文件存在加密,但是不怕因为URI=  后面对应的就是key的地址啊。加密方式也写出来了 AES-128啊。
其实请求到真实的m3u8 地址之后,有牛人早就写出来工具了,直接填写真实地址下载即可:

分享github   m3u8-downloader

image.png

并且大牛写的工具已经实现了自动AES-解密,还可以再油猴上面添加,直接嗅探页面的视频。
image.png

另外推荐一个工具就是youtube-dl   也是可以直接命令行  下载m3u8的并且能实现自动解密(不过要基于ffmpeg,需要下载ffmpeg,并将其所在的目录添加到环境变量)。

直接 pip install  youtube-dl  安装即可。

二、 python  自动下载对应视频


既然流程已经搞清楚了,接下来就是用python 实现下载视频的时候了,但是再开始之前我们还是要确定一下 那个_t 参数是不是时间戳,直接开发者工具搜索 _t

image.png
找到了js实现 _t 参数的地方,Math.random() 的作用就是娶个大于零小于一的随机双浮点小数,奶奶的,分析完了发现不加应该也可以,起初还以为时间戳。

写程序最重要的是思路,而决定思路的就是上面一步步访问的流程,梳理如下:
1、 访问 domain+/video.php?_t=随机值 ,通过重定向url,获得第一层的m3u8文件内容。
2、 访问 重定向后的domian+ m3u8文件内容得到,真实的m3u8地址。
3.    自己编写Aes-128解密信息(或通过youtube-dl)实现下载。

其实把上面的思路理清楚了,程序自然就出来了,python 代码如下:

1、 访问上面的地址video.php地址一千次,得到一个列表(这些代码还是我一次爬取的时候写的那个,现在有个优化版的,所以下面的—t参数还是用的原来的时间戳形式)。
[Python] 纯文本查看 复制代码
# 模块导入
import requests
import time

# 定义变量

domain = "http://XXXXXXXX.cn/"
search = "video.php?_t"
now = time.time()


# 定义函数
def get_html(url):
    try:
        r = requests.get(url, timeout=30)
        with open("result.txt", "a") as f:
            f.write(r.text)
            f.close()
        r.close()
        print(r.text)
    except (ValueError):
        return "产生异常"


# 主函数

    for i in range(1, 1000):
        print("正在爬取第" + str(i + 1) + "页")
        time = "=0." + (str(now).replace('.', ''))
        get_html(domain + search + time)


经过我10几次实验,也就是访问了10000多次后,去除重复后发现仅剩余649个地址,也就基本探测出这个网站的小视频再650个左右。

2、 通过读取result.txt 去重后得到 剩余的不重复的地址:

[Python] 纯文本查看 复制代码

# 读取result.txt文件,并返回以/开始的行  不知道为什么这样写的可以看上面的 第一层m3u8 文件  因为前面两行都是以 # 开头的

domain_301="XXXXX"

def get_m3u8():
    with open("result.txt", "r") as f:
        for line in f.readlines():
            if line.startswith("/"):
                with open("m3u8.txt", "a") as file:
                    file.write(domain_301 + line)
                    file.close()
        f.close()


3.   去重复上面生成的 m3u8.txt

[Python] 纯文本查看 复制代码
# 读取m3u8.txt文件,并去除重复行
def get_m3u8():
    with open("m3u8.txt", "r") as f:
        lines = f.readlines()
        print(len(lines))
        lines = list(set(lines))
        print(len(lines))
        f.close()
        with open("m3u8.txt", "w") as file:
            file.writelines(lines)
            file.close()


小分享:列表的set 函数可以去除重复的值哦,不记得的赶紧去复习!!!

4.  遍历新的文件,youtube-dl 下载
[Asm] 纯文本查看 复制代码
# 导入模块
import os
from multiprocessing.pool import ThreadPool

# 定义变量
save_path = 'D:\\video\\download\\movie\\'
filetype = ".mp4 "
oerder = "youtube-dl -o "


# 读取m3u8.txt,并返回列表
def get_m3u8():
    with open("m3u8.txt", "r") as f:
        lines = f.readlines()
        print(len(lines))
        f.close()
    return lines


# 运行youtube-dl,下载视频
def get_video(url):
    os.chdir(save_path)
    filename = url.split('/')[4]
    if os.path.exists(filename + filetype):
        print("文件已经存在")
    else:
        os.system(oerder + filename + filetype + url)


# 线程函数
def thread_task(lock, data_set):
    lock.acquire()
    get_video(data_set)
    lock.release()


# 主函数
if __name__ == '__main__':
    data_set = get_m3u8()
    with ThreadPool(10) as pool:
        pool.map(get_video, data_set, chunksize=1)


嘿嘿嘿,顺带写了一个多线程。  

三、后记

其实后面优化了上面的程序,但是为了符合流程及一步步的写了代码,这样更便于像我一样的小白编写程序。顺带炫耀一下我的战利品!
image.png

哈哈哈,必须要码啊!!!



image.png
forum.png

免费评分

参与人数 2吾爱币 +8 热心值 +1 收起 理由
wangxb2555 + 1 用心讨论,共获提升!
涛之雨 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| cainfish 发表于 2022-12-17 01:21
隔壁家的王二狗 发表于 2022-12-16 17:58
把视频网站以base64发出来呗 不然怎么学习 哈哈

哈哈哈,AES+DES+base64,我也不敢发出来啊
 楼主| cainfish 发表于 2022-12-22 19:00
Colarier 发表于 2022-12-20 11:58
类似网站很多,可是都能用这方法吗

我尝试了三个哈哈哈,都能用,还有破解vip的
 楼主| cainfish 发表于 2022-12-13 22:31
 楼主| cainfish 发表于 2022-12-14 14:18
这是顶了个寂寞,哈哈哈,还没审核通过!
隔壁家的王二狗 发表于 2022-12-16 17:58
把视频网站以base64发出来呗 不然怎么学习 哈哈
qfxldhw 发表于 2022-12-18 14:55
网站在哪呢
 楼主| cainfish 发表于 2022-12-18 15:20

哈哈哈,类似的网站很多,但是我不告诉你,危险危险危险!
cu29 发表于 2022-12-20 11:42

仔细一点,再看看。帖子里已经泄露网站地址了
Colarier 发表于 2022-12-20 11:58
类似网站很多,可是都能用这方法吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-5-17 07:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表