某解析 b 站 MP4 视频的逆向获取

本贴最后更新于 1539 天前,其中的信息可能已经物是人非

直接获取 B 站视频 找到的都是分段的合成视频,于是乎在网上看到一个工具他做的视频解析可以解析出 mp4 的地址,遂转而直接研究从解析网站拿到视频地址,

分析思路:

  1. 首先模拟正常的请求,发现网址在这个地方,禁止 js 之后发现这个位置就空白了,很明显这段显示是 js 动态处理了

  2. image.png

  3. 然后,我猜测是不是,有 ajax 请求发送,但是 network 之后发现,并没有 xhr 请求出现,突然在 ifream 请求中看到了 url,但是在网页源码中并没有发现这个网址,那么他是怎么来的?经大佬点播之后,明白了,网址最开始得 post 请求就已经拿到了,然后做了加密,js 渲染部分代码做了混淆,所以看不到请求操作。
    image.png

  4. 继续查看网页源码,通过搜索 bvid,看到了两处很奇怪的代码,sojson.v4 sojson.v5 一种 sojson 字符串加密的方法
    image.png

    image.png

  5. 没见过这两种加密方法,网上百度,截图中的代码一看就是经过加密混淆的,所以首先反混淆解密一下看看

[https://jsdec.js.org/](https://jsdec.js.org/) 1. v4 /* *Progcessed By JSDec in 0.00s *JSDec - [JSDec.js.org](http://jsdec.js.org/) */ $("#mp4-url").attr("href",decrypt(hahaha)); $("#mp4-url2").text(decrypt(hahaha)); $("#player").attr("src", "[https://xbeibeix.com/api/player/?s=1&url=](https://xbeibeix.com/api/player/?s=1&url=)" + encodeURIComponent(decrypt($("#list").val()))); $("#list").change(function() { if ($("#list").val() != "false") { $("#player").attr("src", "[https://xbeibeix.com/api/player/?s=1&url=](https://xbeibeix.com/api/player/?s=1&url=)" + encodeURIComponent(decrypt($("#list").val()))); } }) 2. v5 /* *Progcessed By JSDec in 0.01s *JSDec - [JSDec.js.org](http://jsdec.js.org/) */ function encrypt(_0x336ffa) { var _0x456166 = { 'hhmwg': 'beibeidouyu12345', 'VlneJ': 'beibei1234567890' }; var _0x9fab4 = CryptoJS['enc']['Latin1']['parse'](_0x456166['hhmwg']); var _0x4cc587 = CryptoJS['enc']['Latin1']['parse'](_0x456166['VlneJ']); var _0x518a60 = CryptoJS['AES']['encrypt'](_0x336ffa, _0x9fab4, { 'iv': _0x4cc587, 'mode': CryptoJS['mode']['CBC'], 'adding': CryptoJS['pad']['ZeroPadding'] })['toString'](); return _0x518a60; } function decrypt(_0x55cd15) { var _0x2b29a5 = CryptoJS['enc']['Latin1']['parse']('beibeidouyu12345'); var _0x431fea = CryptoJS['enc']['Latin1']['parse']('beibei1234567890'); var _0x28806e = CryptoJS['AES']['decrypt'](_0x55cd15, _0x2b29a5, { 'iv': _0x431fea, 'mode': CryptoJS['mode']['CBC'], 'adding': CryptoJS['pad']['ZeroPadding'] })['toString'](CryptoJS['enc']['Utf8']); return _0x28806e; }; if (!(typeof encode_version !== 'undefined' && encode_version === 'sojson.v5')) { window['alert']('不能删除sojson.v5'); };

从代码和截图中我们可以很清楚的看到 hahaha 经过了调用 decrypt 方法进行了解密,生了 mp4 得网址,那么我们需要知道,hahaha 字符串是什么加密方法,搜索 decrypt 方法,我们看到了上方左边图片得一对代码,decrypt 就在其中不过全部被混淆了看不到,所以使用工具反混淆一下,看看到底是什么
image.png

对比一看原来是 aes 加密,并且使用得是 cbc 得模式,密钥我么都可以拿到了,接下来直接使用 python 得 AES 解密方法直接解密就可以了,安装 pycryptodomex 模块,好了至此完成一波,逆向破解

import requests import base64 from Crypto.Cipher import AES import re def get_encry_mp4(bvid): headers = { 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36', } # bvid = "BV1qJ411c7pA" interface_ini = f"[https://www.bilibili.com/video/](https://www.bilibili.com/video/){bvid}" url = "[https://xbeibeix.com/api/bilibili/](https://xbeibeix.com/api/bilibili/)" data = { "bilibiliurl11081": interface_ini, "zengqiang": "true" } result = requests.post(url, data=data, verify=False, headers=headers) try: encry_mp4_url = re.search('var hahaha = (.*?);', result.text).group(1) return encry_mp4_url except Exception as e: print(e) # 密钥(key), 密斯偏移量(vi) CBC模式加密 def AES_Decrypt(data): key = 'beibeidouyu12345' vi = 'beibei1234567890' data = data.encode('utf8') encodebytes = base64.decodebytes(data) # 将加密数据转换位bytes类型数据 cipher = AES.new(key.encode('utf8'), AES.MODE_CBC, vi.encode('utf8')) text_decrypted = cipher.decrypt(encodebytes) text_decrypted = text_decrypted.rstrip(b'\0') # 去补位 text_decrypted = text_decrypted.decode('utf8') return text_decrypted if __name__ == '__main__': vid = 'BV16i4y1L7mw' encry_mp4_url = get_encry_mp4(vid) encry_mp4_url = mp4_decrypted = AES_Decrypt(encry_mp4_url).strip('\x0f') print(repr(mp4_decrypted))
  • 爬虫

    网络爬虫(Spider、Crawler),是一种按照一定的规则,自动地抓取万维网信息的程序。

    106 引用 • 275 回帖
  • 逆向
    7 引用 • 4 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 759 关注
  • Logseq

    Logseq 是一个隐私优先、开源的知识库工具。

    Logseq is a joyful, open-source outliner that works on top of local plain-text Markdown and Org-mode files. Use it to write, organize and share your thoughts, keep your to-do list, and build your own digital garden.

    7 引用 • 69 回帖 • 1 关注
  • Hadoop

    Hadoop 是由 Apache 基金会所开发的一个分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。

    89 引用 • 122 回帖 • 616 关注
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 553 关注
  • 阿里云

    阿里云是阿里巴巴集团旗下公司,是全球领先的云计算及人工智能科技公司。提供云服务器、云数据库、云安全等云计算服务,以及大数据、人工智能服务、精准定制基于场景的行业解决方案。

    84 引用 • 324 回帖
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 29 关注
  • 黑曜石

    黑曜石是一款强大的知识库工具,支持本地 Markdown 文件编辑,支持双向链接和关系图。

    A second brain, for you, forever.

    22 引用 • 214 回帖 • 1 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 114 关注
  • 开源中国

    开源中国是目前中国最大的开源技术社区。传播开源的理念,推广开源项目,为 IT 开发者提供了一个发现、使用、并交流开源技术的平台。目前开源中国社区已收录超过两万款开源软件。

    7 引用 • 86 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    498 引用 • 1395 回帖 • 250 关注
  • 负能量

    上帝为你关上了一扇门,然后就去睡觉了....努力不一定能成功,但不努力一定很轻松 (° ー °〃)

    89 引用 • 1243 回帖 • 410 关注
  • 反馈

    Communication channel for makers and users.

    121 引用 • 907 回帖 • 271 关注
  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    25240 引用 • 104115 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    21 引用 • 245 回帖 • 228 关注
  • 大疆创新

    深圳市大疆创新科技有限公司(DJI-Innovations,简称 DJI),成立于 2006 年,是全球领先的无人飞行器控制系统及无人机解决方案的研发和生产商,客户遍布全球 100 多个国家。通过持续的创新,大疆致力于为无人机工业、行业用户以及专业航拍应用提供性能最强、体验最佳的革命性智能飞控产品和解决方案。

    2 引用 • 14 回帖
  • ZeroNet

    ZeroNet 是一个基于比特币加密技术和 BT 网络技术的去中心化的、开放开源的网络和交流系统。

    1 引用 • 21 回帖 • 647 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    127 引用 • 169 回帖 • 2 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • 心情

    心是产生任何想法的源泉,心本体会陷入到对自己本体不能理解的状态中,因为心能产生任何想法,不能分出对错,不能分出自己。

    59 引用 • 369 回帖 • 4 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖 • 2 关注
  • Access
    1 引用 • 3 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • 智能合约

    智能合约(Smart contract)是一种旨在以信息化方式传播、验证或执行合同的计算机协议。智能合约允许在没有第三方的情况下进行可信交易,这些交易可追踪且不可逆转。智能合约概念于 1994 年由 Nick Szabo 首次提出。

    1 引用 • 11 回帖 • 2 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 2 关注
  • GAE

    Google App Engine(GAE)是 Google 管理的数据中心中用于 WEB 应用程序的开发和托管的平台。2008 年 4 月 发布第一个测试版本。目前支持 Python、Java 和 Go 开发部署。全球已有数十万的开发者在其上开发了众多的应用。

    14 引用 • 42 回帖 • 814 关注
  • Maven

    Maven 是基于项目对象模型(POM)、通过一小段描述信息来管理项目的构建、报告和文档的软件项目管理工具。

    187 引用 • 318 回帖 • 256 关注