知乎动态头像注入器

知乎保存头像时会用 canvas 截第一帧,动图秒变静态。但图床显示时只看内容不认后缀。把 toBlob 的返回值偷换成完整动图,知乎就会乖乖帮你存下它。选一张动图,这里帮你生成注入脚本,还能先在本页模拟器里验货。

原理:一帧之差

同样点一次「保存」,有没有注入,走向完全不同。

正常流程:被截帧
选一张动图 canvas 画当前帧 toBlob 只留这一帧 上传静态图 头像不会动
注入之后:偷梁换柱
随便选一张图 canvas 走个过场 toBlob 被拦截换包 上传完整动图 头像动了

关键在图床:知乎显示头像时直接加载文件,不看后缀。所以只要文件内容是动图,前端就能动起来。

第一步:选一张动图

最终必须是动态 webp。gif 直传会被知乎转成静态图,选 gif 后请先点「转成 webp」。也可以先用内置样例跑通流程。

点击选择,或把动图拖进来

动态 webp / gif,gif 会自动提示先转换

第二步:复制注入脚本

脚本已把你的动图以 base64 内嵌进去,粘贴即用。先别急着去知乎,第三步可以在本页先验证。

未生成
选好动图后,脚本会出现在这里。

第三步:本页先模拟一遍

下面两张卡模拟知乎的「保存头像」。左边走原生逻辑,右边先注入再保存。两张结果图放一起,差别一眼可见。

正常上传(原生)

不注入,直接 canvas.toBlob。知乎每天都在这么干。

还没跑
注入后上传

先把脚本注入到本页,再点保存。和知乎实战完全一致。

注入状态:未注入
还没跑

注入只对当前页面生效,刷新即失效。左边那张卡始终走原生逻辑,方便随时对比。

第四步:去知乎实战

模拟器里看到动图之后,就可以动真格的了。

  1. 复制第二步生成的脚本。
  2. 打开知乎「我的主页」,确认已登录。
  3. 按 F12 打开开发者工具,切到 Console。
  4. 首次粘贴会弹警告,按提示输入 allow pasting。
  5. 粘贴脚本,按回车,看到「注入成功」。
  6. 走正常换头像流程,随便选一张图。
  7. 点保存,上传的其实是你的动图。
  8. 去任意回答的点赞列表,看头像动起来。
必须用动态 webp,gif 上传后会被转成静态图。
刷新页面后注入失效,需要重新粘贴执行。
头像有 CDN 缓存,生效前多刷新几次。
app 端仅在部分场景生效,比如点赞列表。
主页封面图也能用同样方法换成动图。

常见问题

粘贴后报 Invalid or unexpected token?

脚本被截断了。回到第二步,用「复制脚本」按钮完整复制一遍。

报 not correctly encoded?

base64 没复制全,同样重新完整复制一次。手动选中容易漏头漏尾。

gif 能直接注入吗?

不行。实测 gif 上传后还是静态的,知乎会把 gif 转成静态图。必须先转成动态 webp 再注入。

转换是本地做的吗?

不是。页面把 gif 发到服务器,在服务端转成 webp,不占用你的浏览器算力。

这算漏洞吗?

算图床校验不严。仅供学习研究,别上传违规内容。