bili漫画新版下载解码过程简述

b漫24年底更新之后,加入了大量加密,之前写的下载工具不能用了。这次重新读了源码重写了程序,记录一下。

首先是我的各大平台解码下载图片的chrome插件项目:https://github.com/heixxxxxx/ebook_comic_download

b漫这次更新后我已经修改代码,能支持现在的下载了。

这次更新主要就是在原本基础上对图片二进制内容进行了加密。

1.生成密钥对

//生成密钥对
 const keyPair = await window.crypto.subtle.generateKey(
        {
            name: "ECDH",
            namedCurve: "P-256", // 椭圆曲线 P-256
        },
        true, // 是否可以导出密钥
        ["deriveKey", "deriveBits"] // 密钥用途
    );

//导出公钥 ArrayBuffer(65)
 const rawKey = await window.crypto.subtle.exportKey(
        "raw", // 导出为原始格式
        keyPair.publicKey
    );

//导出私钥
 const jwkKey = await window.crypto.subtle.exportKey(
        "jwk", // 导出为 JWK 格式
      keyPair. privateKey
    );

2.关键api:/ImageToken 入参增加了一个nov

https://manga.bilibili.com/twirp/comic.v1.Comic/ImageToken?device=pc&platform=web&nov=25

请求参数为: urls:前一个api(https://manga.bilibili.com/twirp/comic.v1.Comic/GetImageIndex?device=pc&platform=web) 获得的图片列表

m1:公钥

{ 
m1: btoa(String['fromCharCode'].apply(null, new Uint8Array(rawKey))), 
urls: JSON.stringify(imgList) //图片列表,从上一个api获取
}

响应返回值为携带了token等参数的图片地址。

3.从源码中获得的解密文件:​​​​​https://activity.hdslb.com/blackboard/static/20241213/79521623691a9889a71defd0f4d0a43b/QXcpEfojI5.js

直接引入使用就行。这个js会在window上暴露一个方法,render_hw

该方法接收两个参数,第一个参数为上述返回的带token的图片地址,第二个参数是私钥

 render_hw(url, btoa(JSON['stringify'](jwkKey)))

该方法在运行过程中返回blob链接即为图片链接。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值