WorkBuddy 入门6:自动签到失败了?我把它修好了

•林小卫很行

这是「WorkBuddy 入门」系列。

在之前的 入门 4 里,我们让 AI 装了个自动签到脚本,替我每天领 100 积分,跑了三个多星期,一天没落下。

这篇是个续集。官方客户端一更新,脚本突然哑了。讲讲发生了什么,我们怎么把它修回来,以及解法已经进了开源仓库,装过的朋友更新一下就能恢复。

9 月 23 日,WorkBuddy 桌面端更了个新版。我顺手点了更新,没多想。

两天后的晚上,我发现签到断了,把这事丢给 AI,说帮我看看。

一查日志,躺着一长串 401。签到接口在说,你没登录。

WorkBuddy 签到脚本日志显示 401 未登录报错

可我明明登录着。客户端用得好好的。

说来有意思,在写 入门 4 时我留过一句话:自动化失灵的时候,得会喊我一声。当时埋的那个弹窗防线,这次一直在忠实履职,脚本每半小时跑一次,检测到失败就弹窗提醒重新登录。

只是这次的病根不在登录态,重新登录也治不好。 因为客户端本身就是登录着的。

加密了

AI 顺着查下去,在客户端存登录态的那个文件(workbuddy-desktop.info)里发现了变化。

以前,登录令牌是明文写在文件里的。脚本每天从那儿读令牌,去接口领积分,相安无事。

新版客户端把这层给改了。文件里那个位置,现在躺着的不是令牌,是一段加密后的密文,还打了个标记,告诉读的人,我是加密过的。

文件体积也从 3.4K 涨到 7.2K,差不多翻倍。

打个比方。以前客户端把家门钥匙放在门口垫子底下,谁路过都能拿去用。现在钥匙锁进保险柜了,垫子底下放的变成了保险柜的照片。我的脚本每天按老习惯掀垫子,拿到的自然开不了门,接口就回它一句 401。

坦率地讲,这是个合理的改动。令牌明文躺在磁盘上,本来就不算安全,官方把它加密,是在做好事。只是这一加密,把我的脚本也顺手锁外面了。

找钥匙

那怎么办呢?无非两条路,要么把钥匙找出来,要么放弃自动化。

我和 AI 顺着线索翻。加密用的算法先搞清楚了,AES-GCM,业界标准货。密文的格式也拼出来了,nonce、校验签、密文,一格一格码得整整齐齐。

卡在最后一步。解密还差一把主密钥,这把钥匙在磁盘上找不到,系统钥匙串里也没有。

它只活在客户端的内存里。

翻到这儿,按剧本该去啃客户端的二进制文件了。那是个体力活,还不一定有结果。

转机来得有点滑稽。我们注意到 WorkBuddy 本身是个 Electron 应用,自带一个命令行模式。试着用这个模式问了一句,你内存里那把密钥,能不能借我看看。

它给了。

很痛快,连密钥带用法,一起递了出来。

通过 WorkBuddy 命令行模式获取内存解密密钥与调用说明

安全这事得说清楚

听到这儿你可能会嘀咕,这算不算破解?靠谱吗?

我的理解是这样的。这把密钥本来就长在我自己的电脑上,护着的是我自己的登录态,脚本读的也是我自己机器上的东西,没碰任何别人的数据。官方没把门焊死,只是换了个地方放钥匙,我们从正门进去拿的。

另外处理得很干净。密钥每次运行时现取,用完就丢,不写进任何文件,也不打印出来。将来官方要是换了锁,脚本跟着拿新钥匙就行,不用再修一轮。

已经同步到开源仓库

解法做完当晚就推上去了,仓库还是这一个: github.com/DavidLam-oss/workbuddy-auto-signin

之前装过的朋友,把仓库更新一下就恢复,签到和成长中心的领奖都回来了。实测当晚就领回了那 100 积分,连签也没断。

WorkBuddy 自动签到脚本修复后成功领回 100 积分且连签未断

新来的朋友照 README 走就行,现在的版本已经内置这套解密,装好就是能用的状态。

另外,这次排查的路径整理成了一节排查指南,也写进了 README。客户端这种更新以后多半还会有,下次再出什么变化,照着走能少绕很多路。

坑既然踩过了,就让它变成别人少踩一次的台阶。上一篇是这么说的,这篇继续算数。


上一篇文章的结尾说,自动化可以替我记住,但它失灵的时候,得会喊我一声。

这篇算是补了下半句。喊完之后,得有人应。这次应得挺快,我们当晚修好,解法回到了仓库里。

官方会继续更新,脚本大概还会再哑。没关系,哑了就修。

有便宜,咱还是得占着。


进阶阅读

还没看过前几篇的朋友,建议顺着补上。自动签到的来龙去脉、按作息调的三道防线、失灵喊人的弹窗,前篇的铺垫全在里面: