V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
edis0n0
V2EX  ›  程序员

类似 DRM 的“可逆水印”在技术上能实现吗?

  •  
  •   edis0n0 · 2023-02-26 20:36:50 +08:00 · 1904 次点击
    这是一个创建于 662 天前的主题,其中的信息可能已经有所发展或是发生改变。
    一个合作了很久的客户网站图片经常被爬让我帮他想个办法,最好能实现在自己网站上显示时没水印,被别人采集或者保存时满屏水印。我想到了我常看的日本电子书网站 melonbooks 、bookwalker 的 DRM ,浏览器下载到的都是洗牌后的图片,在前端还原成原始图片。有没办法现成的算法实现服务器传都是水印的图片,在前端通过预设密钥(水印原文一类的东西)把水印消掉?最好是 WASM ,逆向困难一些。截图拍屏这类非无损的做法就不用管了。
    11 条回复    2023-02-27 22:49:46 +08:00
    hoky
        1
    hoky  
       2023-02-26 20:42:57 +08:00
    跟普通的防盗链一个原理呀,只要能判断是盗链就行。
    edis0n0
        2
    edis0n0  
    OP
       2023-02-26 20:44:29 +08:00
    @hoky #1 判断不了,采集者用的工具很高级,日志里完全看不出特征,WAF 的防 bot 已经拉满了,只能做前端解密。
    dearmymy
        3
    dearmymy  
       2023-02-26 21:11:14 +08:00
    没必要非要做水印处理阿。既然要防止爬,直接传加密图片就行,干嘛还想着加水印。
    edis0n0
        4
    edis0n0  
    OP
       2023-02-26 21:31:56 +08:00
    @dearmymy #3 客户觉得让别人爬到全是水印的图片效果更好
    billccn
        5
    billccn  
       2023-02-26 22:21:00 +08:00   ❤️ 2
    很大的一个问题是除非你可以控制客户端,要不然在经济利益的驱使下总是可以绕过的,你只能提高破解的成本。

    我给客户设计过一个是把图片转换成视频然后用加上 HDCP ,这样可以抵御截图,最后研究的时候发现国内带解码功能的采集卡太多了,绕过成本比我们加密的成本还低,只好作罢。

    你想做的可以用我这个思路的变体,就是你把图片挖一些透明的水印,在透明部分后面放加上版权保护的视频,正好把透明的部分填上(互补)。相对我本来的设计,这个视频像素和帧率都可以比较低,占用编码器时间少,应该还是比较经济的。(注 JPEG 不支持透明色,需要用 PNG/GIF/WEBP/HEIC)

    这个视频还可以做高级一些,比如利用各种视觉暂留的技巧(dithering 、interlacing)让单帧截图都可以看出来水印,只有连续放映的时候才是原来的颜色,这样的话即使解密采集卡也没用,一定程度上还可以抵御拍照。你觉得这个技巧就足够的话也可以用 GIF 动画实现,不需要加密视频。
    flyqie
        6
    flyqie  
       2023-02-26 22:28:24 +08:00
    有个问题,既然都上 wasm 了,为啥还要明文传输图片?

    后端直接传加密后的图片然后前端用 wasm 解密后通过各种方式显示出来不就完事了?

    显示的话可以直接全图或块拼接(块拼接需要额外写 css)。
    flyqie
        7
    flyqie  
       2023-02-26 22:35:15 +08:00
    @flyqie #6

    看到楼主回复了。。。

    还有个办法,除了传有水印图片外,再传一个加密的无水印 diff 数据(怎么传看你心情)。

    前端显示的时候,wasm 用 diff 生成一个新图层并覆盖在水印图片上,然后再合并输出成一个正常的无水印图片。
    rus4db
        8
    rus4db  
       2023-02-26 23:47:53 +08:00
    模拟漏洞( Analog hole )是堵不了的
    lianyue
        9
    lianyue  
       2023-02-27 00:04:43 +08:00
    生成两张图
    a + b = 一张完整的图
    a 图片 布满水印文字文字颜色:透明
    b 图片 布满水印文字文字颜色:图片原来的颜色 其他都是透明

    b 图片设置成 背景 底层 这样通过右键保存是 a 图片
    litchinn
        10
    litchinn  
       2023-02-27 08:46:31 +08:00
    数字水印适合吗
    kenvix
        11
    kenvix  
       2023-02-27 22:49:46 +08:00
    @litchinn 数字水印只能用来追溯,不能反爬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   978 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:27 · PVG 05:27 · LAX 13:27 · JFK 16:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.