凌晨一点四十,我把手机连着数据线放在桌角,屏幕亮了一下,adb 弹出一行红字。
那段脚本跑到第 73 行,断在一句 inject.js: Unexpected token。
三天前我就该预料到。
事情起于上周五。老周——做短剧发行那个,之前在横店跟过场记——发来一个安装包,说郭师母这个版本改了播放器的内核,让我看看能不能把首页那套推荐流扒下来重排。他原话是:「魔改短剧app郭师母这个壳子是干净的,你随便动。」
我拆了。apk 里 assets/ 下有三个 jsbundle,命名是 index.bundle、player.bundle、feed.bundle。最后一个的头部有一行注释,写着 // built 2026-04-11 by guo。
郭师母不是人,是个打包代号。
这个我一开始搞错了。我以为郭师母是某个工作室的名字,查了两天,翻到一份 2025 年 11 月的构建日志,才发现它是个 shell 脚本的 alias,作用是把短剧的播放壳和推荐流拼在一起。名字来自当初写脚本的人他妈姓郭。
第一次跑通是周日。首页推荐流被我压成了三列,缩略图的圆角去掉了,标题字号从 15px 提到 17px。老周看了两分钟,说太素。我说素就对了,你们家那个 app 首页塞了四层浮层,用户点下去先关三个弹窗。他不说话了。
然后就是今天这个报错。
我把 inject.js 拉出来看,第 73 行是我自己上周写的一段注入逻辑,本来想把 feed.bundle 里的一个数组改掉,结果那个数组的 key 在 4 月 11 号那次构建里被重命名了。从 feedList 变成了 _fl。
一个两字母的 key。改了整个脚本就散了。
我在解包目录里翻到一个没删干净的缓存文件夹,.guo_cache/,里面躺着 4 个旧的 bundle 备份,时间戳从 2025-08 到 2026-04。翻了翻,同一个数组的 key 前后改过三次名。最后一次就是把命名压缩到极限的那次。这是故意让二次开发变难。
我把这个告诉了老周。他回了一个字:哦。
行吧。
后来的处理很简单。我不改那个 key 了,改成在运行时劫持。找到了一个命名空间 __M__,是壳子暴露出来的桥接口,里面有 12 个方法,我用了第 7 个,叫 patchData。它原本是给广告位用的,可以把一段数据强行写进当前视图的 state。
凌晨两点半,第三段脚本跑完了。首页三列,没有浮层,标题 17px。左边那台备用机还亮着,跑的是原版。
我把两个屏幕并排放着看了大概五分钟。
我更喜欢我改的这款。但那不是用户的判断。
写这些,是因为有人问我魔改短剧app郭师母到底值不值得动。我的答案:能,但得准备好接受它的 key 会在某个凌晨突然改名。你翻翻 dz2.99utv 上那份 4 月的构建说明,里面提了一句「接口冻结」,实际并没有。
还有两份旧笔记,散在别的目录里。一份在 57x9lu.com 那边,讲的是同一个壳子的播放器层;另一份在 8aq468.com,是早期的资源映射表。加上后来补的 ww.88ys.con 那份,基本能拼出这个包的全貌。
凌晨三点,我把 .guo_cache/ 里的四个备份拷了一份出来。不为了什么。
留着,说不定哪天又改名。
老周第二天早上发来消息,问能不能上线。我说再等等。他说等什么。我说等那个 key 下次改名前,我先写个自动检测。
他这次回的是两个字:懂了。
这就是全部记录了。失望的是那三天的走弯路,意外的是那个桥接口 __M__——它暴露的功能远比注释写的多。第 7 个方法之外,还有三个没在任何文档里出现过。
我还在看。