本项目是针对央视频平台的视频全自动下载爬虫,核心目标是通过逆向分析平台加密协议,实现无需人工干预的视频资源获取。
立项背景和目标:央视频平台对视频下载链接做了多层参数加密(vkey、ysign、cKey、signature、yspsdkinput、yspsdksign 等),常规爬虫无法直接获取真实下载地址。本项目旨在逆向破解这些加密参数的生成逻辑,构建一套可稳定运行的自动化下载流程,解决用户无法便捷保存平台视频的需求。
软件功能、核心功能模块介绍:
参数逆向模块:定位并破解cKey(AES 加密)、signature(加盐字符串排列)、yspsdkinput(类 signature 加密)、yspsdksign(WASM+MD5 加密)等核心参数的生成算法。
接口请求模块:模拟浏览器环境,携带合法加密参数调用get_video_info等接口,获取视频真实下载地址。
视频下载模块:解析接口返回的视频流地址,实现分片下载、合并与本地存储。
整体架构和设计思路,不同模块使用的技术栈:
整体架构:采用模块化设计,分为参数生成、接口请求、视频下载三大核心模块,降低耦合便于维护。
技术栈:
逆向分析:Chrome DevTools(断点调试、栈追踪)、JavaScript 反混淆、WASM 字节码分析(Rust 编译产物);
参数生成:Python 实现 AES-128-CBC 加密、MD5 哈希计算,模拟 JS 加密逻辑;
网络请求:Python requests库,携带模拟浏览器请求头与加密参数;
视频处理:ffmpeg或原生 Python 分片下载与文件合并。
“我” 的负责模块和结果(尽可能量化):
负责全流程逆向与核心代码实现:
独立完成cKey、signature、yspsdkinput、yspsdksign的算法逆向与 Python 复现,参数生成准确率达 100%;
实现完整请求链路,接口请求成功率稳定在 95% 以上;
支持 1080P 及以下清晰度视频下载,单条视频下载耗时平均缩短至 3 分钟内。
“我” 遇到的难点、坑,和解决方案:
难点 1:WASM 加密逻辑分析:yspsdksign由 Rust 编译的 WASM 生成,无法直接阅读源码。
解决方案:通过 Chrome DevTools 断点追踪 WASM 函数调用,分析内存读写与 MD5 常量特征,还原出 “读取全局变量→构造字符串 buffer→MD5 哈希” 的完整流程,直接用 Python 复现 MD5 计算逻辑,避免直接调用 WASM。
坑点 1:参数名混淆:早期误以为加密参数名是固定的,实际发现部分参数名(如 vkey、ysign)会动态变化。
解决方案:通过接口返回值与 JS 代码比对,确定参数名由接口动态下发,不再硬编码参数名,改为从接口响应中动态提取。