之前的姐妹篇 :最新版B站刷播放量接口协议参数(w_rid、aid、cid、buvid3、b_lsid、cookie),加密算法全流程解析_b站播放量接口-CSDN博客
实现了刷播的功能, 但是PC端有很多缺陷, 导致刷不动的情况, 今天带来全新升级版,解决行业痛点 !~
PC端刷播和 App刷播最大的区别在于, PC端 从开发播放到结束播放 一个视频,期间有15次心跳握手, 你要构建15次请求, 才能刷一个播放量 ,
而App端只需要2次心跳握手, 所以,毫不留情砍掉PC端业务, 上马App刷播业务刻不容缓!!
先分析抓包的App , 影响到视频播放量的api接口 url是这个
反编译App , 发现是使用的Retrofit 网络框架 , hook一下 拦截器 ,看下请求头和请求体data
headers={
"accept-length":"gzip",
"content-type":"application/json; charset=utf-8",
"user-agent": "android Mozilla/5.0 (Linux; Android 8.1.0; MI 8 Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/62.0.3202.84 Mobile Safari/537.36 phh_android_version/6.7.0 phh_android_build/a72fd0555b207d23fee0c81e74603d04fef3621e phh_android_channel/hw pversion/0",
"env":"prod",
"app-key":"android",
"buvid":self.buvid,
"device_id":self.device_id,
"session_id":self.session_id,
"fp_local":self.fp_local,
"fp_remote":self.fp_remote,
},
请求体是明文 , 通过hook和验证 ,密文是通过sha256和AES两重加密生成, 中间还夹杂了请求字符串的拼接处理
算法放出来, 以飨读者:
SALT="9cafai466a028bfb"
KEY="fd6b635dbcf4rc0c2a1b93b389ec763c4b"
IV="77b07asdg2d57d64c"
def sha_256_encrypt(data_string):
sha=hashlib.sha256()
sha.update(data_string.encode('utf-8'))
sha.update(SALT.encode('utf-8'))
return sha.hexdigest()
def aes_encrypt(data_string):
aes=AES.new(
key=KEY.encode('utf-8'),
mode=AES.MODE_ECB,
iv=IV.encode('utf-8')
)
raw=pad(data_string.encode('utf-8'),16)
影响视频播放增长, 设备检测信息的因素如下:
尽量让设备信息随机起来
def create_random_mac(self, sep=":"): # 随机生成Mac地址
data_list = []
for i in range(1, 7):
part = "".join(random.sample("0123456789ABCDEF", 2))
data_list.append(part)
mac = sep.join(data_list)
return mac
心跳和完播率 :
为了让刷播效率更真实, 因为B站服务器对播放的检测是多维度的
播放时间使用该视频实际时长 !
模拟播放, 模拟观看视频 , 心跳开始, 心跳结束 (做戏做全套。)。
最终刷播效果展现(不限播放量, 任意刷):
可对外提供测试 !!