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

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

直接获取 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 回帖
  • 逆向
    6 引用 • 4 回帖

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 402 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    131 引用 • 1114 回帖 • 131 关注
  • 前端

    前端技术一般分为前端设计和前端开发,前端设计可以理解为网站的视觉设计,前端开发则是网站的前台代码实现,包括 HTML、CSS 以及 JavaScript 等。

    247 引用 • 1347 回帖
  • 小薇

    小薇是一个用 Java 写的 QQ 聊天机器人 Web 服务,可以用于社群互动。

    由于 Smart QQ 从 2019 年 1 月 1 日起停止服务,所以该项目也已经停止维护了!

    34 引用 • 467 回帖 • 740 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • 招聘

    哪里都缺人,哪里都不缺人。

    190 引用 • 1057 回帖 • 1 关注
  • Spark

    Spark 是 UC Berkeley AMP lab 所开源的类 Hadoop MapReduce 的通用并行框架。Spark 拥有 Hadoop MapReduce 所具有的优点;但不同于 MapReduce 的是 Job 中间输出结果可以保存在内存中,从而不再需要读写 HDFS,因此 Spark 能更好地适用于数据挖掘与机器学习等需要迭代的 MapReduce 的算法。

    74 引用 • 46 回帖 • 561 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • MyBatis

    MyBatis 本是 Apache 软件基金会 的一个开源项目 iBatis,2010 年这个项目由 Apache 软件基金会迁移到了 google code,并且改名为 MyBatis ,2013 年 11 月再次迁移到了 GitHub。

    170 引用 • 414 回帖 • 383 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 2 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • 互联网

    互联网(Internet),又称网际网络,或音译因特网、英特网。互联网始于 1969 年美国的阿帕网,是网络与网络之间所串连成的庞大网络,这些网络以一组通用的协议相连,形成逻辑上的单一巨大国际网络。

    98 引用 • 344 回帖
  • JetBrains

    JetBrains 是一家捷克的软件开发公司,该公司位于捷克的布拉格,并在俄国的圣彼得堡及美国麻州波士顿都设有办公室,该公司最为人所熟知的产品是 Java 编程语言开发撰写时所用的集成开发环境:IntelliJ IDEA

    18 引用 • 54 回帖
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 478 关注
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    35 引用 • 200 回帖 • 15 关注
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 17 关注
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 505 关注
  • OnlyOffice
    4 引用 • 1 关注
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 18 关注
  • 996
    13 引用 • 200 回帖 • 2 关注
  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    728 引用 • 1326 回帖
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖 • 4 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 335 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖
  • 音乐

    你听到信仰的声音了么?

    60 引用 • 511 回帖 • 1 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 212 关注
  • Rust

    Rust 是一门赋予每个人构建可靠且高效软件能力的语言。Rust 由 Mozilla 开发,最早发布于 2014 年 9 月。

    58 引用 • 22 回帖 • 4 关注