[闲聊] vd_source

楼主: involution (内卷是好文明)   2024-09-24 03:46:53
最近整理书签 发现有些B站的重复加了
看了一下发现是因为除了 AV/BV 号后面还会偷加一些东西造成网址不同
而 vd_source 这个参数如果在登入状态下
甚至手动删除也会帮你加回来
查了一下有人说是 uid 的加盐 md5 但我一开始没找到具体的作法
(等我真的自己逆完之后就在知乎搜到了= =)
所以我就试着看 vd_source 怎么生成的
首先因为没跳转 url就变了 应该是 pushState 或 replaceState
hook 这两个之后打一下 trace
发现一个叫 checkLoginInfoForHeaderV3 的很可疑
跟进去之后果然就中了 之后能追到一个显然是 md5 的 function
真的看一遍后 发现不是直接 md5 的原因是
如果输入是 string 则会呼叫他写的 stringToBytes
但如果不是 string 又不是 array-like 则会呼叫 toString
我看到就 ??? 你到底要 string 还是 bytes
而在 checkLoginInfoForHeaderV3 里丢的是数所以这里会被转成 string
然后因为 32-bit 一组 他执行 bytesToWords 时(所以显然他要的是 bytes)
做 left shift 操作时把字串隐式转成 number 了 js魅力时刻
所以假如 uid = 12345 其实最后的结果是 md5("\x01\x02\x03\x04\x05")
并不是什么加盐
用我自己 uid 也对的上
后来在知乎查到 实际上B站的 vd_source 有两种版本
如果是按转发产生的连结 就是直接 md5(uid)
去查了一下发现果然因为传进去的是 this.userInfo.mid.toString()
传进去的是 string 所以有被正常处理
草台班子.jpg
好搞笑 明明是程式写错 但碰巧加大了难度
不过以B站顶多 10^9 用户的数量级
即使在本地慢慢跑 想要从 vd_source 反推 uid 也是绰绰有余的
作者: sustainer123 (caster)   2024-09-24 06:25:00
大师

Links booklink

Contact Us: admin [ a t ] ucptt.com