学习日志|利用Bilibili视频分享链接反查uid

众所周知,Bilibili会在分享链接中加上与分享者有关的参数,这样在其他人通过链接点进内容时,便可自动关联二者的账号,从而在算法上实现精准推送,这就是为什么有时你能在B站刷到某位群友的视频或是在推荐关注列表里发现他的账号。

  • 上图为在网页中获得的分享链接,正是vd_source参数暴露了分享者信息。

有人或许已经为了不泄露隐私开始有意地在分享前删去参数或是干脆用插件屏蔽掉所有无关参数,但从好处想,如果我们能直接通过这个参数找到群友的帐号,那不就能更加愉快的()()ta们了吗()

而事实的确如此,该参数是通过MD5算法加密uid后得到的。对于现代计算机来说,暴力计算强行匹配并非难事,很容易就能得到结果。1

按下方python代码进行简单尝试,测得遍历四亿个数字大约需要300秒,用其他算法或语言应该会更快。(仅适用分享链接中的vd_source,网址栏的加密方法略有不同,是在将uid分割为列表后进行的加密,如MD5(str([1,2,3,4])) )

import hashlib
import time

start_time = time.time()

def MD5(uid):
    md5_obj = hashlib.md5()
    md5_obj.update(uid.encode())
    md5_result = md5_obj.hexdigest()
    return md5_result

uid=0
vd_resource = ""
while 1:
    if vd_resource==MD5(str(uid)):
        print(uid)
        break 
    uid+=1

end_time = time.time()
print(f"代码运行时间: {end_time - start_time:.5f} 秒")

也可以直接使用AICU的api,在浏览器中输入以下链接并在后面加上vd_resource的值后访问会返回一串json,其中uid对应的值就是结果。

https://api.aicu.cc/api/v3/tool/hash2uid?hash=

此外需要注意的是,该方法仅适用于网页分享获得的链接,app分享获得的参数采用了其他加密方法,目前暂时无法破译。


本文参考自B站专栏(见注释一),关于此内容的详细分析以及相关拓展请访问原文链接。

转载请注明本文出处。

  1. vd_source参数分析——哔哩哔哩 ↩︎
上一篇