背景:一次针对 Windows 画图的逆向工程
独立研究员 xusheng.dev 用 Binary Ninja MCP 配合 Codex,逆向分析了 Windows 11 自带的画图(Paint)与照片(Photos)应用,发现了一个此前无人披露的事实:这两款应用在本地生成 AI 图像时,会往像素里嵌入一个由微软服务器签发的 GUID 隐形水印,用户无法关闭,甚至完全无感知。
核心发现:本地生成,远程审核
Copilot+ PC 上,画图确实内置了本地 Stable Diffusion 模型,图像生成在本地完成。但在生成之前,应用会把提示词发送到远程审核服务器(apsaiservices 的 moderate-prompt 接口),服务器返回改写后的提示词、promptGenerationId,以及一个 watermarkId(GUID)。这个 GUID 随后被写进本地生成图像的像素里。也就是说,”本地生成”并不等于”全链路本地”——提示词审核是远程的,每个图像都携带服务器分配的独特 ID。
技术细节:SVD 风格的隐形水印
逆向结果显示:WmkWriteWatermark 把 GUID 构造成 18 字节消息(0x4c 前缀 + 16 字节 GUID + 校验和),扩展成 144 个比特,每个比特至少被放置 3 次,要求图像不小于 192×192。嵌入过程对选定的图像块做量化微调,属于内容自适应的块域 SVD 风格水印。测试中,一张 512×512 的合成图有 193,376 / 262,144 个像素被改动——肉眼不可见,但确实存在。另有一个独立的”可见水印”设置,与该隐形水印毫无关系。
双重保险:C2PA 元数据同步加持
除了像素级水印,画图还会为 AI 图像附加 C2PA Content Credentials(实测 PNG 中出现 18,979 字节的 caBX 块,由服务器签名)。服务器同时掌握 watermarkId 与 promptGenerationId,因此能把签名请求与像素中已存在的水印关联起来。为保留这些元数据,AI 生成图像的保存格式被限制为 PNG、JPEG、GIF 和 .paint。
社区反响:隐私与真实性的天平
HN 上 216 条评论讨论激烈。提交者 ComputerGuru 补充:可见水印可关闭,隐形水印不能且静默发生。有用户抱怨误报——只是用画图缩放一张截图,就被打上”AI 生成”横幅,气得换装 Paint.net;也有用户为真实性辩护:”希望所有相机都能对照片做数字签名,这样就能证明照片是真的”;还有人调侃:”谢谢微软替我在作品上签名,200 年后博物馆展出时,后人一查就知道这画出自我的电脑。” 讨论最终落在一个根本问题上:当”防伪”与”隐私”冲突时,平台有没有权利在用户本地内容上悄悄盖章?