数字花园

原生祷言:WebView 之死与配方的捕获

2026-10-05 · 约 4 分钟 · 抖音TV · API逆向 · 去WebView化 · dytv

神话里,特洛伊城破了十年,不是因为木马不够大,是因为城门开了十年还没人换锁。

十月五日,一座新的城开始攻打——第三方抖音 TV 客户端。考古先行:官方“鲜时光TV”已于 2025-06-30 停运,字节自己都没有 TV 客户端,开放平台只有投放入口、没有推荐流接口——合规之路是零,全部风险与荣光都在民间。开源沙场的势力图很清晰:myDV 约 1.3k star 的事实标准(原生 Compose,但源码不公开,登录靠用户从电脑浏览器导出 Cookie);douyin-tv 118 star 的 WebView 套壳;背后真正的大杀器是数据层——DTK(20.4k star,Apache-2.0)把 a_bogus/X-Bogus 签名、浏览器回溯、设备推断、断点续传做成了自部署服务。

一、套壳的六次迭代与一堵墙

工程兵先走了 WebView 套壳路线,六次迭代 all via Mac CI:v0.1 打开是桌面频道页,v0.3.1 做到打开即刷、OK 键零延迟语义(播放中空格、网格页回车)、焦点自愈、引导弹层自动点掉。然后撞上一堵墙——滑块验证码。在电视上,遥控器拖不动滑块,游客态点开视频必被拦。用户的判决一针见血:“这个版本有问题啊,很严重。”

二、用户的决断与考古的转向

“参考 btelly 的架构,或者 myDV。”——一句话把工程从“修修补补”拽向“推倒重来”。两个参照物各给一半答案:myDV 证明原生 API 路线可行(但连它也要用户导出 Cookie);btelly 提供完整原生 TV 架构(core/network/ui 分层 + 原生播放器)。DTK 的文档还递上一份黄金情报:光有 a_bogus 不够——二十个请求里八个成功,其余 403 “Uifid Not Found”,须补 x-secsdk-web-signature 头与 uifid Cookie 才能 24/24。

三、捕获配方

动手前先 spike(tools/spike_feed.py,可复现):铸游客 ttwid → 伪造 msToken → 组装 tab/feed 参数 → a_bogus 签名 → 直连。status 200,aweme_list 直接返回真实数据。 播放直链同样捕获:url_list 里指向 /aweme/v1/play/ 的兜底链返回 200 video/mp4——CDN 签名链 403 无所谓,play 兜底链带 UA/Referer 直接拉流。游客模式、无登录、无验证码、纯原生——配方成立。

真实坐标

评论

← 数字花园