前言

博客也很久没水了,从日更周更到N月更,不知道写一些什么好…
这次是Bilibili客户端播放API的一个加解密算法,也折腾了我一段时间,
东西写好很久了,一直懒就没写…

BiliBili

如果研究的朋友,可能都抓过包看过数据包的情况

如图所示,播放计数的API,以及请求头、请求体、返回值

API: https://api.bilibili.com/x/report/click/android2

请求头的数据还是比较正常,但是看到请求体部分,瞬间懵圈了
是一片乱码字符串,看了整个播放过程的API,只有这个是加密乱码的
如果不是某段时间出现的代码,我也不知道这个是什么算法。

加解密必要秘钥等

NAME VALUE TYPE DESCRIBE
AES_KEY fd6b639dbcff0c2a1b03b389ec763c4b string null
AES_IV 77b07a672d57d64c string null
SHA256_SALT 9cafa6466a028bfb string null

这只适用于安卓客户端,和ios客户端等是不通用的

解密

解密,主要是为了解出请求参数有些什么,就不贴太多代码在博客上了

解密过程主要就是一个AES解密,暂时用不到Sha256 salt

图中红框内黑色部分数据就是加密的请求体,下面我们来解密参数

黑色部分数据Copy as Base64(因为我的解密代码是基于Base64的)

拆分出来的一部分加解密代码放到了Github
哔哩哔哩-App客户端播放参数加解密

解密部分我就不多说了,秘钥等都贴出来了,能折腾的就慢慢折腾
我就直接直接贴出解出来的参数,参数比较多

这是登陆后的播放参数

NAME VALUE DESCRIBE
access_key f3ae492*0c51 null
aid 123456 null
auto_play 0 可为0-2
cid 654321 null
did BT**4a 和设备相关
epid 0 null
ftime 1558340481 null
lv 4 null
mid 1234 null
part 1 分P
sid 0 null
stime 1558416933 null
sub_type 0 null
type 3 null
sign 22bb3**cdb01b9 sha256加密

这是不登陆的播放参数

NAME VALUE DESCRIBE
aid 123456 null
cid 654321 null
did BT**4a 和设备相关
ftime 1558416933 null
lv 0 null
mid null 值为空
part 1 分P
stime 1558416933 null

设备、版本不同可能存在参数差异

加密

大概的加密过程

AES加密( 参数排序(para) + Sha256Hash+salt加密(sign) )

我就贴一下一部分代码,知道怎么用就好了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
data = {
'aid': '123456',
'cid': '654321',
'did': 'string',
'ftime': '112233',
'lv': '0',
'mid': '',
'part': '1',
'stime': '112233'
}
temp_data = urlencode(data)
print(temp_data)
# aid=123456&cid=654********=&part=1&stime=112233
payload = aes_enc(f"{temp_data}&sign={hashlib_sha256(temp_data)}")
print(payload)
# b'\xb2\x8a%\xef\xc0\x18******************0'

代码环境Python3,参数随便写的,还是得按照你自己的解密参数来
贴出来的代码只是一部分,基于github上的代码

SHA256 HASH SALT

1
2
3
4
5
6
def hashlib_sha256(data, salt='9cafa6466a028bfb'):
data = bytes(data, encoding='utf-8')
salt = bytes(salt, encoding='utf-8')
hash = hashlib.sha256(data)
hash.update(salt)
return hash.hexdigest()

AES ENC DEC

AES的就不贴了,有点长,可以自己去看

总结

文章写的比较乱不全,只会贴出加解密部分,剩下的东西自己分析了
该文章代码只为学习,麻烦未经允许禁止转载哦
最后再贴一遍仓库地址 哔哩哔哩-App客户端播放参数加解密

靠别人写全部代码,不太可能,大家都是鸽子,咕咕咕!

END.