【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脚本进行解密

看起来正常了不少,现在替换回网站进行测试

仍然可以进行正常播放

下断点,看看链接在哪,这里看到第一层解密就得到了链接

逆向结果

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

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

javascript 复制代码
//const CryptoJS = require('crypto-js');

//var bt_token = ""; //you own token

var _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 url

res = getVideoInfo(url);
console.log(res);

得到了mp4资源,可以直接播放和转储了

了解更多

(关于该文章的 ast反混淆的详解,真实脚本编写)

相关推荐
云空12 分钟前
《Three.js 3D坦克对战【AI单机版】》
javascript·人工智能·3d·three.js
默_笙18 分钟前
🚲 手写一个"Claude Code":我用 LangChain + ReAct 循环,让 AI 自己读文件、解释代码
前端·javascript
等咸鱼的狸猫1 小时前
# JS 核心六大主题:闭包内存模型、原型链查找、事件流机制与 Promise / Event Loop 实现视角复盘
前端·javascript
gis开发之家2 小时前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
柒和远方2 小时前
LeetCode 139. 单词拆分 —— 从暴力回溯到 DP 完全背包
javascript·python·算法
先吃饱再说2 小时前
流式输出完全指南:让 AI 对话像打字机一样流畅
javascript·vue.js
小小小小钰儿4 小时前
网络安全名词术语!
安全·web安全·计算机·网络安全·黑客·编程
এ慕ོ冬℘゜4 小时前
原生 JS 实现自定义单选日历组件(无 UI 库、纯手写、禁用过去日期)
开发语言·javascript·ui
mONESY4 小时前
Skill 技能与 MCP 协议的底层逻辑与协同真相
javascript
南川琼语5 小时前
HTTP——AJAX
前端·javascript·ajax