一、MD5 哈希:最基础的文件指纹

每一张图片文件在计算机底层都是一串二进制数据。MD5(Message Digest Algorithm 5)算法将这串数据压缩为一个 128 位(32 个十六进制字符)的哈希值。两个文件只要有任何一个比特不同,其 MD5 值就会完全不同;而如果文件完全相同,MD5 必然一致。

广告平台在你上传素材的瞬间就会计算 MD5 哈希,并将其存入关联数据库。如果平台发现账号 A 和账号 B 上传了 MD5 完全相同的素材,这两个账号就会被打上一条关联边(association edge)。当关联信号积累到阈值,批量封禁就会触发。

这就是为什么最基础的素材去重手段是"改 MD5"——只要在文件尾部注入几个随机字节,或者重新编码一次 JPEG,MD5 就会发生变化。这一步操作可以有效对抗 MD5 层面的比对。

但问题是:MD5 只能检测字节级别的完全相同。平台真的只用这一种方法吗?

二、感知哈希:平台的"视觉指纹"

答案是否定的。主流广告平台(Facebook、TikTok、Google Ads)都同时使用感知哈希(Perceptual Hash)技术来进行视觉层面的素材比对。

感知哈希的核心原理是:将一张图片缩小到极低分辨率(通常 8×8 或 32×32 像素),转为灰度,然后通过特定算法(如 DCT 离散余弦变换)提取出一个 64 位的二进制指纹。两张视觉内容相似的图片,即使尺寸、格式、压缩率不同,其感知哈希的汉明距离(Hamming Distance)也会很小——通常小于 5 就判定为"相似"。

常见的感知哈希算法包括:

  • aHash(Average Hash):基于像素与均值的比较,速度最快但精度较低
  • pHash(Perceptual Hash):基于 DCT 变换,Facebook 等主流平台采用的核心算法
  • dHash(Difference Hash):基于相邻像素差值,对渐变和微调更敏感
关键洞察:你修改了 MD5,但如果图片的视觉内容没有变化,pHash 值依然一致。平台只需计算汉明距离就能判定这是"同一张素材的变体"。只改 MD5 等于只锁了前门却开着后窗。

三、像素偏移技术:从"相同图片"到"不同素材"

要真正对抗感知哈希,需要在像素层面对图片进行修改。这类操作统称为"像素偏移"(Pixel Shifting),具体手段包括:

亮度/对比度微调:将整体亮度上调或下调 1-3%,或者微调对比度曲线。人眼几乎无法察觉这种级别的变化,但 DCT 变换后的频域系数会发生改变,从而导致 pHash 偏移。

色彩通道偏移:对 RGB 三个通道分别施加 ±1~3 的数值偏移。例如 R+2、G-1、B+1,这会在不影响视觉效果的情况下改变像素矩阵,使 dHash 产生差异。

单像素裁切:从图片的某一边裁掉 1-2 个像素。这改变了图片的分辨率和像素对齐方式,对 aHash 和 pHash 都有显著影响。

高斯噪声注入:在随机位置添加极低强度的噪声。这相当于在像素矩阵中制造微小的随机扰动,使感知哈希的每一个 bit 都可能发生翻转。

这些操作的代价极低——对 JPEG 图片而言,这些修改引入的信噪比远低于 JPEG 压缩本身的量化噪声。换句话说,图片质量几乎没有损失,但指纹已经完全不同了。

四、Exif 元数据:被忽视的设备指纹

很多卖家只关注 MD5 和像素,却忽略了藏在图片文件头中的Exif(Exchangeable Image File Format)元数据。这些数据是图片的"身份证",携带着大量设备和环境信息。

元数据类别 包含字段 关联风险
设备信息 相机/手机型号、序列号、固件版本 同一设备拍摄的所有图片可被关联
地理位置 GPS 经纬度、海拔、方向 暴露拍摄地点,跨账号地理一致性
时间戳 拍摄时间、修改时间、时区 时间模式分析(同一人操作多账号)
软件信息 编辑软件名称和版本 使用相同工具链可被标记
ICC 色彩配置 色彩空间描述、渲染意图 特定设备/软件的色彩配置可作为指纹
IPTC / XMP 版权信息、标签、作者、描述 编辑流程元数据可泄露身份

一个真实案例:某卖家用同一部 iPhone 拍摄产品图,分别上传到 5 个 Facebook 广告账号。虽然他修改了 MD5 并使用了不同的代理 IP,但 Exif 中的设备序列号和 GPS 坐标完全一致。Facebook 在 48 小时内关联了所有 5 个账号,全部封禁。

因此,元数据清理必须是全面的、非选择性的——不是只删 GPS,而是要清除所有 Exif、IPTC、XMP 和 ICC 配置文件中的可识别信息。

五、Facebook / TikTok 的多层素材指纹体系

理解了上述三个维度(MD5、感知哈希、元数据),我们就可以看到平台的完整素材指纹体系:

第一层:MD5 / SHA-256 字节哈希 — 检测完全相同的文件。绕过难度最低,只需重新编码即可。

第二层:pHash / dHash 感知哈希 — 检测视觉相似的内容。需要像素级修改才能绕过。

第三层:Exif / IPTC / XMP 元数据 — 检测设备和工具链指纹。需要完整的元数据剥离。

第四层:上传环境指纹 — 包括上传时的 IP 地址、User-Agent、上传时间模式等。这不属于素材本身,但与素材关联分析协同工作。

这四层构成了一个"素材黑名单"(Creative Blacklist)系统。任何一层的匹配都会给关联图谱增加一条边,而多层同时匹配的权重是指数级叠加的。这就是为什么只做单层防护注定失败——你需要同时处理所有层级

六、实战建议:构建完整的素材去重流程

基于上述分析,一个完整的素材去重流程应该覆盖所有四个层级:

Step 1:原始素材准备 — 为每个账号创建素材的独立副本。不要从同一个文件出发做微调,而是为每个账号单独处理一遍。

Step 2:元数据清理 — 使用工具彻底剥离所有 Exif、IPTC、XMP 数据和 ICC 色彩配置。这一步要在像素修改之前或之后都进行一次。

Step 3:像素级修改 — 对图片进行轻微的亮度、对比度或色彩通道偏移。幅度控制在 1-3% 以内,确保视觉效果不变但 pHash 充分偏移。

Step 4:重新编码 — 以不同的 JPEG 质量参数(如 92 vs 93)重新保存,确保 MD5 完全不同。

Step 5:环境隔离上传 — 每个账号使用独立的浏览器环境和 IP 地址上传素材,避免上传环境指纹重叠。