当前位置: 首页 > news >正文

【油猴脚本 0】某动漫网站视频地址解析

之前写的 动漫弹幕播放 地址解析失效了,当时是参考
【js逆向实战】某sakura动漫视频逆向-CSDN博客 进行地址解析的,更新地址解析代码的同时复盘一下原理。

原始地址

https://www.xxxxx.com/play/9173-1-14.html

m3u8

f12
寻找 iframe src 地址

/m3u8.php?url=GedenPN%2BvT6sm7p2fL7D0OMsqPKxfGPSEkAezxSENXU2351XtA4gUXeOJhbKTFVl%2B5XQx1MyQ8rwrxZlKY8FNw%3D%3D

这类网站都通过 m3u8 解析获取到真实播放地址,
直接请求过去发现有这样一段代码

var bt_token = "8d312e8d3cde6cbb"; 
var config = {
    "id": "5bb98936c37650c19658b90b1d9a4427",
	"api":"//danmu.yhdmjx.com",//弹幕接口   前面架设自己的域名 防止后台弹幕库报错    例如   https://www.baidu.co
	"key": "yhdm",//应用KEY码,如果不填将获取全部弹幕信息(填写后指定应用弹幕)
	"url": getVideoInfo("S1F4zX4rxgsapgLUueZYH0tkIbh6aSGHuBMN9xwB3t+mcaEYyz33s53RHoVrZT2yapHbTQjce54UrA8IO1/bQA8xGzbJeZ8QE/EoBgg6U754+TCPYaemx8KaWWTBstZMxF9uzI0tmOgjxRRfQ+kNiZ2fYYaSJfm1jDmLCaxP19e+Uiwh6w3yIxJJkQnjDj93jsr4fMqafxyqPZv3+8y7t8OJ6rYNUWlER9HhASNxtLTPHEwCps3ZAdtAc/rNkKiDLefVTcYEpuBiuaGg/gLmXwnVhk1mdFDHxNI1zFOgXpE45NZREYzBEzWlcmO2996W5egDJN0F5pCnnjZfcG5FIUAUYtJM7irpHqYT8TPqPD3kxTWwtuoZHxP+ZAy7+1OvIQnAXLm2M0e35CUCiyUN67g7yBVjzthHipRn4lXQ783cf0ZWoiR/6zC1pANxTs7mx53AxhEpUtlJy8XYzg9kp4gTOOMqvawJ3w4rGRsy3rgL2KwUqP1EwL5mIVMaMSsEi7hMLiMXNdZXbbxOrNbbW5h+zwjD8VIVRIsB2g5rJ2Bnl9gnVwMqivj49uEGO6u4vRDndiebegMEStdj/D8dxRtFtGlX408we0fwbVlmi4c="),//视频链接
	"sid":"",//集数id
	"pic":"",//视频封面
	"title":"",//视频标题
	"next":"",//下一集链接
	"user": "",//用户名
	"group": "",//用户组
	}
lele.start()

getVideoInfo 将一长串的加密信息最终转换成 url
js/play.js 下有该函数

var _0xod4 = 'jsjiami.com.v6'

用了 js 混淆加密

js 混淆解密

将 play.js 用下面工具解密
https://github.com/NXY666/Jsjiemi
解密原理是用了 AST
AST是Abstract Syntax Tree的缩写,可直译为抽象语法树。
编译原理的东西,可以大概理解为将代码转换成 ast 然后转回来。

解密后可得

var _token_key=CryptoJS.enc.Utf8.parse('57A891D97E332A9D');
var _token_iv=CryptoJS.enc.Utf8.parse(bt_token);
var key_token=CryptoJS.enc.Utf8.parse(randomRange(16));
function v_encrypt(_0x40b5a1,_0x247525,_0x40a45a){
	return CryptoJS.AES.encrypt(_0x40b5a1,_0x247525,{'iv':_0x40a45a,'mode':CryptoJS.mode.CBC}).toString();
}
function v_decrypt(_0x2f61c9,_0x14dd13,_0x2bf4a2){
	return CryptoJS.AES.decrypt(_0x2f61c9,_0x14dd13,{'iv':_0x2bf4a2}).toString(CryptoJS.enc.Utf8);
}
function getVideoInfo(_0x285840){
	return v_encrypt(v_decrypt(_0x285840,_token_key,_token_iv),_token_key,key_token);
}

结合前面 bt_token 构造 AES 解密代码

import CryptoJS from "crypto-js";

const key = CryptoJS.enc.Utf8.parse("57A891D97E332A9D");  //十六位十六进制数作为密钥
const iv = CryptoJS.enc.Utf8.parse('8d312e8d3cde6cbb');   //十六位十六进制数作为密钥偏移量

// 解密
function Decrypt(srcs, key, iv) {
    let decrypt = CryptoJS.AES.decrypt(srcs, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });
    let decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr.toString();
}

let code = "A1RPrijP4vh3r8Uz1+gcfGKhWHsIIqPbdEnVzTOhvFr/DJZB+wW5/Xz3cXO+CfwroFZx6ZA5rCXZ8/uVsFSbrwDyLMSAIw71/GJxqZx1HpKnPUWF65kGlcl7rCFu406OXMRI57tRHR3rZ5GoMfaUKvJuQ+Vanez+PHaM+qUQ0ArDFpdnnz3Te5Ul/1Oo4LUEWct93jw7Wl6xkF0JgmrvZIGeQSu1oICQqbwjV8vIt1xZ9VZxnpyg6Jy9z1c+9OukcAV/HjPl2oEYy0m6+ZXhhEzOQfWgz1dGu3VCK3WV/PEQNpFZ72Xv7Bk3UsCZY1iIyDTaywvKAwP51Vk0S1sdOsQdqN9BmhIQWHQnJKYJe4u2q5HlqCd7ga37zYcYCVN4LdzqX967quG1tcYOReP+cRi1HhYoFs/4VEkcaxWuK8EYwuUD8KRWviylrgQEgEP5T3VnQA7wSo6iA7NF3P0rTA1KWUSUKrHL0Qj+KRYJVMWcxU/gldgRi9g8XEPwsdOXRPAJrR95OEPG3HEafU1kq46mKMGIm30+gJBmzRUSIloI2wbjF9aHcW41JuiFCrYCaq/8ti81EpRghHB9fwKucuAFiLWMtagoRGBhEZQnykc="

const key = CryptoJS.enc.Utf8.parse("57A891D97E332A9D");  //十六位十六进制数作为密钥

const iv = CryptoJS.enc.Utf8.parse('8d312e8d3cde6cbb');   //十六位十六进制数作为密钥偏移量

let url = Decrypt(code, key, iv)

// url = 'https://v16.xxxxx.app/e1739d3a35cbeedf39ca374d1a56b77f/67fa42d3/video/tos/alisg/tos-alisg-ve-0051c001-sg/ogL5bdsyPQgfGnDo1CeF4PMEI5Dn0oAIyAfbRM/?a=602253&bti=Nzg3NWYzLTQ6&ch=0&cr=0&dr=0&er=0&lr=default&cd=0%7C0%7C0%7C0&br=2908&bt=1454&cs=0&ds=4&ft=cYsxXfz7ThWH-kU~SGZmo0P&mime_type=video_mp4&qs=0&rc=M2Q2ZGk3OWdnPGY3MzM4ZEBpMzhsNG45cmZ3eTMzODYzNEBfLjFfLzU0Ni0xMWE1YjJiYSNvNWdhMmRrM3BgLS1kMC1zcw%3D%3D&vvpl=1&l=2025041204151530B19915264C682B4169&btag=e000a8000'

console.log(url)

解密出 url 可以打开直接播放下载
这里不知道为什么 url host 解密开头总有乱码,但补上 host 后面解密出来地址都是可以打开的。
有懂的大佬还请指导下 🧐

最后

其实播放器直接右键也是可以看到原始地址的。
这里之所以用代码解密的方式是之前油猴脚本 动漫弹幕播放 实现方式需要,不过其实如果浏览器都有播放地址,油猴脚本应该也能获取到这个地址,但尝试过没能实现,不知道有没有大佬不吝赐教 🤔

相关文章:

  • LabVIEW 控制电机需注意的关键问题
  • CSS 轮廓(Outline)属性学习笔记
  • Qt C++内存泄漏排查方法
  • 【vue】基础
  • 自动化测试工具playwright中文文档-------12.身份验证
  • Spring Boot 自定义商标(Logo)的完整示例及配置说明( banner.txt 文件和配置文件属性信息)
  • Linux的基本指令
  • 在 Ubuntu 系统中安装字符集(字体或语言支持)特殊符号以及输出标点符号的方法
  • 归并排序法排序数组(js版)
  • 安装Istio
  • 洛谷题目:P2371 [CTSC 中国信息学国家集训队] 墨墨的等式 题解(本题难)
  • GoogleAgent-quickstart 学习笔记
  • 23种GoF设计模式
  • 【开题报告+文档+源码】基于SpringBoot教学评价评教系统
  • 数据采集与Web组态显示的技术实现路径解析
  • Android 16应用适配指南
  • 数据集成工具推荐,支持数据库、API、消息文件等集成技术,并具备低代码与可视化配置特性
  • ps 人像学习
  • 方案精读:51页 财政数据信息资源目录数据标准存储及大数据资产化规划方案【附全文阅读】
  • langchain之agent系列:zero-shot-react-description agent
  • 济南高新区一季度GDP增长8.5%,第二产业增加值同比增长14.4%
  • 智能终端出海服务创新联合体成立
  • 中老铁路跨境国际旅客突破50万人次
  • 新希望一季度归母净利润4.45亿,上年同期为-19.34亿
  • 南京航空航天大学启动扁平化改革:管理岗规模控制在20%,不再统一设科级机构
  • 2024“好评中国”网络评论大赛结果揭晓