
微软画图和照片应用嵌入隐形水印
逆向工程揭示了画图和照片应用将服务器颁发的 GUID 嵌入到本地生成的 AI 图像像素中。
内容概要
微软画图支持本地和云端图像生成,且画图和照片应用搭载了本地 AI 模型。这两款应用会将提示词发送到远程服务器审核,服务器返回 GUID 及审核后的提示词,该 GUID 会作为隐形水印嵌入本地生成的图像中。单独的可见水印设置不控制这个隐形水印。在支持 Copilot 的 PC 上,图像生成本地进行,但提示词审核仍在远程。微软披露画图会在 AI 生成的图像中添加 C2PA 元数据,且 AI 生成的图像只能保存为支持 C2PA 的格式:PNG、JPEG、GIF 和 `.paint`。
对微软画图的好奇探索
这项研究源于对画图应用的好奇。此前在探索 Windows 功能方面有成果,且知道微软在画图应用中添加了 AI 功能。原以为它简单调用远程 API 生成图像,分析后发现微软在 Windows 中作为 Copilot 的一部分提供了本地模型。画图应用位于特定路径,有四个扩展名为 `.onnxe` 的模型文件,`seg.onnxe` 格式已知,其他三个最初看起来不同,实际是微软更换了密钥。解密后,`onnx.checker.check_model()` 对所有文件都适用。
可见水印
查看文件时发现 `Watermarker.dll`,使用画图应用时发现有设置可在生成的图像中嵌入可见水印,可见水印是图像右下角的小 Copilot 标志。因文件大小异常大,且受 Claude Code 的文本水印公告影响,决定让 AI 分析该 DLL 是否嵌入隐形水印。
隐形水印
可见水印由 `AddPerceptibleWatermark` 添加,还有 `WmkWriteWatermark` 函数,跟踪调用树发现它在本地 Stable Diffusion 图像生成之后调用,若失败,画图会将整个生成过程转换为错误。传入的 `payload` 必须是 16 字节,实际是一个 GUID,`WmkWriteWatermark` 的包装器会构造 18 字节的消息。编码器有特定的操作流程,嵌入循环对选定图像块进行量化更改,这是一种内容自适应的块域 SVD 风格的水印。测试表明添加水印后很多像素发生变化。
来自远程提示词审核的 GUID
反向追踪发现 16 字节的水印有效负载是 GUID,它来自网络请求。`AIServices.dll` 会将提示词和风格发送到特定地址,请求是 JSON 格式,响应解析器期望特定格式。通过发送提示词测试,服务器返回不同的 GUID,`containsHumanReference` 字段是服务器端对提示词是否涉及人类的分类。画图会解析并存储该字段及 ID,但不控制水印步骤。
C2PA 元数据中的相同水印 GUID
画图会在保存的文件中附加 C2PA 内容凭证,本地 Stable Diffusion 路径有特定流程。签名请求发送 `PromptGenerationId`,图像中已包含 `watermarkId`,服务器可关联签名请求与已存在的水印。检查保存的图像 PNG 块,发现包含已签名的 C2PA 清单,解码后显示相关信息,服务器的 `watermarkId`、嵌入像素中的标识符以及 C2PA 的 `c2pa.soft-binding.value` 每一代都相同,这是软绑定。
画图为何在本地添加水印
画图有两条不同的生成路径。图像创建器功能使用 `Azure OpenAI ImageGen`,生成等操作可在微软云端进行,画图接收成品图像。Cocreator 在支持 Copilot 的 PC 上,本地生成图像,但仍需微软账户和互联网连接,这可能是画图需要本地水印实现的原因。画图保存生成结果时格式受限,与 C2PA 支持的格式一致,若允许导出为 BMP,文件级的 C2PA 清单会消失。这也引发了关于云端路径的安全问题,存在多种可能性。
照片应用也有相同操作
微软照片应用中包含同名的 `Watermarker.dll`,其图像创建器和重新样式化图像功能背后有本地 Stable Diffusion 操作,都会指向同一个水印包装器。照片应用和画图应用在失败处理方式上有细微区别。
微软的披露信息
微软在图像创建器支持页面披露了系统的一些相关部分,如应用内容过滤、生成的图像包含 C2PA 清单等,但未解释 C2PA 清单包含标识隐形像素水印的 GUID 以及画图本地生成路径获取水印 GUID 的方式。
结论
这是第一项记录并分析画图和照片应用隐形水印行为的研究。AI 生成图像上的可见和隐形水印都不新鲜。微软披露了画图使用远程内容过滤并添加 C2PA 内容凭证,新证据表明元数据与隐形像素水印有关。本地和云端路径解释了分工情况,且“本地”不意味着离线。这可能与欧盟 AI 法案有关,微软未披露相关细节。此外,有可能修改应用绕过提示词审核和水印添加,但无新能力。


被折叠的 条评论
为什么被折叠?



