【js逆向实战】某sakura动漫视频逆向
写在前面
再写一个逆向实战,后面写点爬虫程序来实现一下。
网站简介与逆向目标
经典的一个视频网站,大多数视频网站走的是M3U8协议,就是一个分段传输,其实这里就有两个分支。
-
通过传统的m3u8协议,我们可以直接进行分段下载,爬取视频。
-
通过逆向,找到视频源地址,直接访问视频资源
其实,这里就是传统爬虫和逆向区别的一些体现。
限制绕过
主页如下
随便点一个视频,点击播放,f12
被debug
住了
查看一下堆栈,前两个是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_encrypt
,v_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反混淆的详解,真实脚本编写)
相关文章:

【js逆向实战】某sakura动漫视频逆向
写在前面 再写一个逆向实战,后面写点爬虫程序来实现一下。 网站简介与逆向目标 经典的一个视频网站,大多数视频网站走的是M3U8协议,就是一个分段传输,其实这里就有两个分支。 通过传统的m3u8协议,我们可以直接进行分…...
L2-015 互评成绩
学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输入格式…...

【Docker安装RockeMQ:基于Windows宿主机,并重点解决docker rocketMQ安装情况下控制台无法访问的问题】
拉取镜像 docker pull rocketmqinc/rocketmq创建网络 docker network create rocketmq-net构建namesrv容器 docker run -d -p 9876:9876 -v D:/dockerFile/rocketmq/namesrv/logs:/root/logs -v D:/dockerFile/rocketmq/namesrv/store:/root/store --network rocketmq-net -…...
Android Studio——android项目运行main()函数
报错: 解决: 如图,在 .idea 的 gradle.xml 中标注的位置增加如下一行代码即可<option name"delegatedBuild" value"false" />...

移动医疗科技:开发互联网医院系统源码
在这个数字化时代,互联网医院系统成为了提供便捷、高效医疗服务的重要手段。本文将介绍利用移动医疗科技开发互联网医院系统的源码,为医疗行业的数字化转型提供有力支持。 智慧医疗、互联网医院这一类平台可以通过线上的形式进行部分医疗服务ÿ…...
代码审计, 介绍, 思路总结
代码审计 一, 代码审计介绍 渗透测试中的代码审计是一个关键步骤,它涉及到深入检查应用程序的源代码,以发现安全漏洞、弱点或不合规的编码实践。这种审计通常由专业的安全工程师或渗透测试人员执行,并侧重于识别可能被黑客利用的安全缺陷。…...
2023NOIP A层联测27 总结
T1 一棵树,操作是把一个点染黑,查询点 x x x 到黑点路径上的最小编号, n ≤ 1 0 6 n\le10^6 n≤106。当时的思路是把树分成几部分,中间和周围的散块,发现不会,就没思路了,就去打了25pts暴力。赛…...

2022最新版-李宏毅机器学习深度学习课程-P34 自注意力机制类别总结
在课程的transformer视频中,李老师详细介绍了部分self-attention内容,但是self-attention其实还有各种各样的变化形式: 一、Self-attention运算存在的问题 在self-attention中,假设输入序列(query)长度是N…...
css sprite 的优缺点,使用方法和示例
CSS Sprite是一种网页图片应用处理方式。 CSS Sprite的原理是将一个网页或者一个模块所用到的零碎的icon整合拼接到一张大图里,再把这张大图作为背景图放入到网页中,当访问该页面时,加载的图片就不会像以前那样一幅一幅地慢慢显示出来了。 …...

通过Cookie和Session来实现网站中登录账号的功能
文章目录 一、Cookie和Session二、基于Cookie和Session实现登录账号的功能2.1步骤一2.2步骤二2.3步骤三2.4总结通过Cookie和Session来实现登录功能2.5运行截图 一、Cookie和Session cookie是http请求header中的一个属性,是浏览器持久化存储数据的一种机制ÿ…...

QWidget 实现九宫格图案解锁
前言 最近需要实现一个九宫格图案解锁功能,查看网上的方案,基于QWidget的方案全网搜来搜去就一篇 Qt编写自定义控件:图案密码锁, 都是炒来炒去的同一篇,代码还比较复杂,运行后在PC端还是可以的,但是运行在arm机器上,就卡顿,或者容易断开手势连接线,各种不友好,于是自…...
设计模式-适配器模式(Adapter)
设计模式-适配器模式(Adapter) 一、适配器模式概述1.1 什么是适配器模式1.2 简单实现适配器模式1.3 使用适配器模式注意事项 二、适配器模式的用途三、实现适配器模式的方式3.1 继承适配器模式(Inheritance Adapter)3.2 组合适配器…...
react:创建项目
一: 使用create-react-app // 默认创建reactjs的webpack打包项目 npm i create-react-app -g create-react-app 项目名// 创建ts项目打包项目 sudo npx create-react-app my-app --template typescript 二: 使用vite npm create vitelatest // 创建react…...

RabbitMQ集群
RabbitMQ概述 1.RabbiMQ简介 RabbiMQ是⽤Erang开发的,集群⾮常⽅便,因为Erlang天⽣就是⼀⻔分布式语⾔,但其本身并不⽀持负载均衡。支持高并发,支持可扩展。支持AJAX,持久化,用于在分布式系统中存储转发消…...

Qt QtCreator调试Qt源码配置
目录 前言1、编译debug版Qt2、QtCreator配置3、调试测试4、总结 前言 本篇主要介绍了在麒麟V10系统下,如何编译debug版qt,并通过配置QtCreator实现调试Qt源码的目的。通过调试源码,我们可以对Qt框架的运行机制进一步深入了解,同时…...

JavaScript如何实现钟表效果,时分秒针指向当前时间,并显示当前年月日,及2024春节倒计时,源码奉上
本篇有运用jQuery,记得引入jQuery库,否则不会执行的喔~ <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title></title> <meta name"chenc" content"Runoob"> <met…...

重生奇迹MU套装大全中的极品属性
在重生奇迹MU之中,你不能如其他游戏一般只看攻击与防御,你更要看属性,这才是重生奇迹中的王道!属性好,才是极品,属性不佳,即便攻击、防御再出色,也只能沦落成为一件替用品࿰…...
用Python解决猴子分桃问题
1 问题 海滩上有一堆桃子,五只猴子来分。第一只猴子把这堆桃子平均分为五份,多了一个,这只猴子把多的一个扔入海中,拿走了一份。第二只猴子把剩下的桃子又平均分成五份,又多了一个,它同样把多的一个扔入海中…...

YOLOv8-Seg改进:分割注意力系列篇 | 新型的多尺度卷积注意力(MSCA)模块
🚀🚀🚀本文改进: 新型的多尺度卷积注意力(MSCA)模块,实现创新,MSCA包含三个部分:深度卷积聚合局部信息,多分支深度条卷积捕获多尺度上下文,以及11卷积建模不同通道之间的关系。 🚀🚀🚀MSCA多尺度特性在小目标分割检测领域表现优异 🚀🚀🚀YOLOv8-seg…...

基于springboot实现致远汽车租赁平台管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现致远汽车租赁平台管理系统演示 摘要 首先,论文一开始便是清楚的论述了系统的研究内容。其次,剖析系统需求分析,弄明白“做什么”,分析包括业务分析和业务流程的分析以及用例分析,更进一步明确系统的需求。然后在明白了系统的需求基础上需要进一步地设计系统…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
【ROS】Nav2源码之nav2_behavior_tree-行为树节点列表
1、行为树节点分类 在 Nav2(Navigation2)的行为树框架中,行为树节点插件按照功能分为 Action(动作节点)、Condition(条件节点)、Control(控制节点) 和 Decorator(装饰节点) 四类。 1.1 动作节点 Action 执行具体的机器人操作或任务,直接与硬件、传感器或外部系统…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南
文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果 核心…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...

macOS 终端智能代理检测
🧠 终端智能代理检测:自动判断是否需要设置代理访问 GitHub 在开发中,使用 GitHub 是非常常见的需求。但有时候我们会发现某些命令失败、插件无法更新,例如: fatal: unable to access https://github.com/ohmyzsh/oh…...
怎么开发一个网络协议模块(C语言框架)之(六) ——通用对象池总结(核心)
+---------------------------+ | operEntryTbl[] | ← 操作对象池 (对象数组) +---------------------------+ | 0 | 1 | 2 | ... | N-1 | +---------------------------+↓ 初始化时全部加入 +------------------------+ +-------------------------+ | …...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

goreplay
1.github地址 https://github.com/buger/goreplay 2.简单介绍 GoReplay 是一个开源的网络监控工具,可以记录用户的实时流量并将其用于镜像、负载测试、监控和详细分析。 3.出现背景 随着应用程序的增长,测试它所需的工作量也会呈指数级增长。GoRepl…...