【js逆向实战】某sakura动漫视频逆向

写在前面

再写一个逆向实战,后面写点爬虫程序来实现一下。

网站简介与逆向目标

经典的一个视频网站,大多数视频网站走的是M3U8协议,就是一个分段传输,其实这里就有两个分支。

  1. 通过传统的m3u8协议,我们可以直接进行分段下载,爬取视频。

  2. 通过逆向,找到视频源地址,直接访问视频资源

其实,这里就是传统爬虫和逆向区别的一些体现。

限制绕过

主页如下
在这里插入图片描述

随便点一个视频,点击播放,f12debug住了
在这里插入图片描述

查看一下堆栈,前两个是vm里运行,直接跟到play.js里,这个地方发出调用,拼接了一个’debug‘
在这里插入图片描述

尝试注释掉debug的语句,这里是用的f12自带的override,拉代码到本地,然后再注释掉出现debug的地方
在这里插入图片描述

可以进行正常调试了,视频也可以播放

逻辑分析

现在查m3u8链接发起位置
在这里插入图片描述

显然,这里是GET带参数访问
在这里插入图片描述

查看响应如下,响应了视频的详细信息,初始化了整个视频。
那么就是这个特殊的参数被接口解析之后,得到了目标资源
在这里插入图片描述

现在转换为主要分析两个点,一个是请求的特殊参数,一个是响应中getVideoInfo逻辑。

搜索一下这个特殊字符怎么来的
在这里插入图片描述

它就是主页的一个参数,直接var出来的,那主页直接取就可以。
在这里插入图片描述

现在再看响应中的逻辑。这里其实也给出了提示,注释里说了这是视频链接。

"url": getVideoInfo("hE/ki2qR70yi9v3W+RSl0k9BzEY9RC4r/vAmlV6cSo6YK6LjZXa+ETksG67sfAmbtPOmhsv9EGQ7wfBhVSWj5icOmB2PGyDCoK94GVGj7tr/2sFl8pIJb/ZFj+nv5XfZpfxn/dMWuaxH+35gEkiKYk0/m5NtX75D48kQWscgvw+t04ZQg2q5WODgeqwpXkc+Ez+r3FUkuw3KUZ4m8kqNlkVlBCzzMIxQtRx9BWQDT1W0zj9MDtPC5xNKMdOeCqjIMx5r5O8k/EprOcBmNhSS/YZkA6F4/MTwXHWBZD2HNacaj63qlcvlP+IdkEHGmAW4f7BarIvTojstPy5JCHvZxfEFS/FtnfkvWy6lu8FMgsMZINC/kQt8oRhDDMryU3cQoa+6E4bMvVWLRu7iBQaot68oIuTFAIlvwMciUdcWMzQ3XrT7rGEySvQi76KXr2hDCqC4opAHfzGh2Lh3CcPGk5c1FhJsH6gG38SzH/+cE2Kw2ssCGFLSBwezhZ3ic2Mt57YHYyEsyKIQ4wcaOzj6EmCeStKj5GhRxU32rexIrn9wLyzKubEvAEy/8gJEffhCXylZlRqI7j3B7hFuFiK0eNJ0d6hwjuILIe9pYlf7dZY="),//视频链接

查找getVideoInfo函数的逻辑
在这里插入图片描述
打断点看看逻辑,果然在这个地方停了下来,那么这里就是关键点了,这个函数还涉及到了v_encryptv_decrypt等函数,直接把他们一并取下来

核心加密

把代码取下来,有提示到是js加密的v6版本
在这里插入图片描述
jsjiami.com本身就是一个网站,详情查看如下
https://www.jsjiami.com/

用AST脚本进行解密
在这里插入图片描述

看起来正常了不少,现在替换回网站进行测试
在这里插入图片描述
仍然可以进行正常播放

在这里插入图片描述
下断点,看看链接在哪,这里看到第一层解密就得到了链接
在这里插入图片描述

逆向结果

把这段代码单独扣下来,就得到了核心算法。

搜索一下缺少的参数,然后补上去,脚本如下

//const CryptoJS = require('crypto-js');//var bt_token = ""; //you own tokenvar _token_key = CryptoJS["enc"]["Utf8"]["parse"]("57A891D97E332A9D");
var _token_iv = CryptoJS["enc"]["Utf8"]["parse"](bt_token);function v_decrypt(_0x2f61c9, _0x14dd13, _0x2bf4a2) {return CryptoJS["AES"]["decrypt"](_0x2f61c9, _0x14dd13, {"iv": _0x2bf4a2})["toString"](CryptoJS["enc"]["Utf8"]);}function getVideoInfo(_0x285840) {return v_decrypt(_0x285840, _token_key, _token_iv);}var url = "" //videoinfo urlres = getVideoInfo(url);
console.log(res);

得到了mp4资源,可以直接播放和转储了
在这里插入图片描述

了解更多

(关于该文章的 ast反混淆的详解,真实脚本编写)
请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/188837.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

建行广东省江门市分行走进农村地区开展反假货币宣传

人民对美好生活的向往,涉及方方面面,小至“钱袋子”安全。建行广东省江门市分行落实当地监管部门部署,积极扛起维护国家金融安全的重要政治责任,深入农村地区开展反假货币宣传工作,助力构建农村反假货币工作长效机制。…

拓扑排序软件设计——ToplogicalSort_app(含有源码、需求分析、可行性分析、概要设计、用户使用手册)

拓扑排序软件设计 前言1. 需求分析2. 可行性分析2.1 简介2.2 技术可行性分析2.2.1 技术实现方案2.2.2 开发人员技能要求2.2.3 可行性 2.3 操作可行性分析2.4 结论 3. 项目报告3.1 修订历史记录3.2 软硬件环境3.3 需求分析3.4 详细设计3.4.1 类设计3.4.2 核心流程描述3.4.3 核心…

安全通信网络(设备和技术注解)

网络安全等级保护相关标准参考《GB/T 22239-2019 网络安全等级保护基本要求》和《GB/T 28448-2019 网络安全等级保护测评要求》 密码应用安全性相关标准参考《GB/T 39786-2021 信息系统密码应用基本要求》和《GM/T 0115-2021 信息系统密码应用测评要求》 1网络架构 1.1保证网络…

Zephyr-7B论文解析及全量训练、Lora训练

文章目录 一、Zephyr:Direct Distillation of LM Alignment1.1 开发经过1.1.1 Zephyr-7B-alpha1.1.2 Zephyr-7B-beta 1.2 摘要1.3 相关工作1.4 算法1.4.1 蒸馏监督微调(dSFT)1.4.2 基于偏好的AI反馈 (AIF)1.4.3 直接蒸馏偏好优化&…

论文阅读[121]使用CAE+XGBoost从荧光光谱中检测和识别饮用水中的有机污染物

【论文基本信息】 标题:Detection and Identification of Organic Pollutants in Drinking Water from Fluorescence Spectra Based on Deep Learning Using Convolutional Autoencoder 标题译名:基于使用卷积自动编码器的深度学习,从荧光光谱…

Clickhouse学习笔记(8)—— 建表优化

数据类型 时间字段 建表时能用数值型或日期时间类型(DateTime)表示的字段就不要用字符串 因为clickhouse进行分区时一般使用时间字段来进行分区,而将时间字段使用DateTime表示,不需要经过函数转换处理,执行效率高、…

黑窗口连接远程服务

ssh root192.168.x.x 回车输入密码 查看docker docker ps 停止正在运行的服务 docker stop xxxxx 删除服务 docker rm xxxxx 查看镜像 docker images 删除镜像 docker rmi xxxxx 删除镜像 启动并运行整个服务 docker compose up -d jar包名称 idea 使用tcp方式连接docker 配置d…

深度探究深度学习常见数据类型INT8 FP32 FP16的区别即优缺点

定点和浮点都是数值的表示(representation),它们区别在于,将整数(integer)部分和小数(fractional)部分分开的点,点在哪里。定点保留特定位数整数和小数,而浮点…

webpack babel

构建工具 简介 当我们习惯了在node中编写代码的方式后,在回到前端编写html、css、js这些东西会感觉到各种的不便。比如:不能放心的使用模块化规范(浏览器兼容性问题)、即使可以使用模块化规范也会面临模块过多时的加载问题。我们…

S7-1200PLC和SMART PLC开放式以太网通信(UDP双向通信)

S7-1200PLC的以太网通信UDP通信相关介绍还可以参考下面文章链接: 博途PLC开放式以太网通信TRCV_C指令应用编程(运动传感器UDP通信)-CSDN博客文章浏览阅读2.8k次。博途PLC开放式以太网通信TSENG_C指令应用,请参看下面的文章链接:博途PLC 1200/1500PLC开放式以太网通信TSEND_…

图书销售数据大屏可视化【可视化项目案例-03】

🎉🎊🎉 你的技术旅程将在这里启航! 🚀🚀 本文选自专栏:可视化技术专栏100例 可视化技术专栏100例,包括但不限于大屏可视化、图表可视化等等。订阅专栏用户在文章底部可下载对应案例源码以供大家深入的学习研究。 🎓 每一个案例都会提供完整代码和详细的讲解,不…

k8s 裸金属集群部署metalLB软负载均衡 —— 筑梦之路

metalLB 官方网站 Repo:https://github.com/metallb/metallb 官网:https://metallb.universe.tf/installation metalLB解决什么问题? MetalLB 是一个用于裸机 Kubernetes 集群的负载均衡器实现,使用标准路由协议。 k8s 并没有为裸…

【m98】webrtc vs2017构建带符号的debug库

调试有符号 调试 无符号 试试exe不输出到独立的文件? -】 直接输出到sln下面

(2023|CVPR,扩散,主体标识符,先验保存损失)DreamBooth:微调文本到图像的扩散模型以实现主题驱动的生成

DreamBooth: Fine Tuning Text-to-Image Diffusion Models for Subject-Driven Generation 公众号:EDPJ(添加 VX:CV_EDPJ 或直接进 Q 交流群:922230617 获取资料) 目录 0. 摘要 1. 简介 2. 相关工作 3. 方法 3.…

C语言--从键盘输入当月利润I,求应发奖金总数。

题目描述: 企业发放的奖金根据利润提成。利润I低于或等于100000元的,奖金可提成10%; 利润高于100000 元,低于200000元(1000001000000时,超过1000000元的部分按 1%提成。从键盘输入当月利润I,求应发奖金总数。 int main() {int m…

使用MybatisPlus时出现的java.lang.NullPointerException异常~

错误描述如下所示: 错误原因:Junit的导包错误 单元测试的包有如下所示两个 我们应该根据springboot的版本进行选择, 在Spring Boot 2.2.X以后使用import org.junit.jupiter.api.Test Junit5 在Spring Boot 2.2.x之前使用import org.junit.T…

junit写搜索树测试

用法 assertTrue(range.contains("Two")); 2个参数,右边错就打印左边. AbstractSelfBalancingBinarySearchTree abt; AbstractBinarySearchTree.Node node; Before public void setUp() { abt new AbstractSelfBalancingBinarySearchTree() { Override protecte…

javaEE案例,前后端交互,计算机和用户登录

加法计算机,前端的代码如下 : 浏览器访问的效果如图 : 后端的代码如下 再在浏览器进行输入点击相加,就能获得结果 开发中程序报错,如何定位问题 1.先定位前端还是后端(通过日志分析) 1)前端 : F12 看控制台 2)后端 : 接口,控制台日志 举个例子: 如果出现了错误,我们就在后端…

【h5 uniapp】 滚动 滚动条,数据跟着变化

uniapp项目 需求: 向下滑动时,数据增加,上方的日历标题日期也跟着变化 向上滑动时,上方的日历标题日期跟着变化 实现思路: 初次加载目前月份的数据 以及下个月的数据 this.getdate()触底加载 下个月份的数据 onReach…

Panda3d 场景管理

Panda3d 场景管理 文章目录 Panda3d 场景管理有关分层场景图的重要信息NodePathNodePath 以及 Node 的函数调用模型文件文件格式加载模型文件将模型放置在场景图中模型缓存压缩模型异步加载模型通过回调函数进行 常见的状态变化修改节点的位置和姿态改变父级节点改变颜色隐藏和…