【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.hqwc.cn/news/166656.html

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

相关文章

蓝桥杯国一,非ACMer选手保姆级经验分享

目录 一、前言二、蓝桥杯简介三、0基础计算机新手小白,赛前如何准备提高自己的获奖率?3.1 每两周参加一次【蓝桥算法双周赛】3.2 多练真题3.3 参加每一场官方校内模拟赛 四、结语 一、前言 hello,大家好,我是大赛哥(弟)&#xff…

如何用Java高效地存入一万条数据?这可能是你面试成功的关键!

大家好,我是你们的小米,一个热爱技术、喜欢分享的29岁程序猿。今天我要和大家聊一聊一个常见的面试题:在Java中,当我们需要将一万条数据存储到数据库时,如何能够提高存储效率呢? 在面试过程中,…

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项和动量因子

11-08 周三 图解机器学习之实现逻辑异或,理解输出层误差和隐藏层误差项 时间版本修改人描述2023年11月8日14:36:36V0.1宋全恒新建文档 简介 最近笔者完成了《图解机器学习》这本书的阅读,由于最近深度学习网络大行其是,所以也想要好好的弄清…

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm)

强力解决使用node版本管理工具 NVM 出现的问题(找不到 node,或者找不到 npm) node与npm版本对应关系 nvm是好用的Nodejs版本管理工具, 通过它可以方便地在本地调换Node版本。 2020-05-28 Node当前长期稳定版12.17.0,…

机器学习模板代码(期末考试复习)自用存档

机器学习复习代码 利用sklearn实现knn import numpy as np import pandas as pd from sklearn.neighbors import KNeighborsClassifier from sklearn.model_selection import GridSearchCVdef model_selection(x_train, y_train):## 第一个是网格搜索## p是选择查找方式:1是欧…

YOLO目标检测——海洋目标检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:海洋监管、海洋资源开发、海洋科学研究数据集说明:海洋目标检测数据集,真实场景的高质量图片数据,数据场景丰富,含有“金属”、“未知”、“橡胶”、“平台”、“塑料”、“木材”、“布”、“纸张”、“…

《QT从基础到进阶·十六》QT实现客户端和服务端的简单交互

QT版本:5.15.2 VS版本:2019 客户端程序主要包含三块:连接服务器,发送消息,关闭客户端 服务端程序主要包含三块:打开消息监听,接收消息并反馈,关闭服务端 1、先打开服务端监听功能 …

GIS入门,xyz地图瓦片是什么,xyz数据格式详解,如何发布离线XYZ瓦片到nginx或者tomcat中

XYZ介绍 XYZ瓦片是一种在线地图数据格式,由goole公司开发。 与其他瓦片地图类似,XYZ瓦片将地图数据分解为一系列小的图像块,以提高地图显示效率和性能。 XYZ瓦片提供了一种开放的地图平台,使开发者可以轻松地将地图集成到自己的应用程序中。同时,它还提供了高分辨率图像和…

如何在时间循环里最优决策——时间旅行者的最优决策

文章目录 每日一句正能量前言时间旅行和平行宇宙强化学习策略梯度算法代码案例推荐阅读赠书活动 每日一句正能量 做一个决定,并不难,难的是付诸行动,并且坚持到底。 前言 时间循环是一类热门的影视题材,其设定常常如下&#xff1…

Spring Data JPA 项目配置与QueryDSL集成

一、说明 Spring Data JPA通过Spring Initializer创建时勾选相关依赖即可引入,QueryDSL需要单独引入。Spring JPA针对QueryDSL有比较好的兼容性,可以实现优雅的SQL构建。 二、设置JPA默认配置(yaml格式) spring:jpa:hibernate:…

2023.11.8 hadoop学习-概述,hdfs dfs的shell命令

目录 1.分布式和集群 2.Hadoop框架 3.版本更新 4.hadoop架构详解 5.页面访问端口 6.Hadoop-HDFS HDFS架构 HDFS副本 7.SHELL命令 8.启动hive服务 1.分布式和集群 分布式: 多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)集 群:…

HTTP-HTTPS区别详解

一、HTTP协议 1. GET和POST的请求的区别 Post 和 Get 是 HTTP 请求的两种方法,其区别如下: 应用场景: GET 请求是一个幂等的请求,一般 Get 请求用于对服务器资源不会产生影响的场景,比如说请求一个网页的资源。而 Po…