最近,广州多益公司的一则主动降薪通知上了头条,作为吃瓜群众中的一员,在震惊多益负责人迷之操作之余,也对他们是如何通过截图找到举报人产生了好奇。
“不是没人见过截图过程吗?”,“截图上不是没有水印吗?”。
前段时间,在一篇关于暗水印的文章上,我找到了答案。根据文章介绍,定位截图人,目前除了显式水印,还有两种比较隐蔽的方法。一种是通过监听用户的截图事件,在截图的时候通过服务器上报截图人信息。另外一种是事先在需要防止截图的数据中植入用户信息,形成数字水印。
1、基于监听截图事件,上报截图人信息
这种方式实现起来较为简单,目前主流的操作系统基本上都有与监听截图事件相关的接口。比如:
在安卓中:
- 利用FileObserver监听某个目录中资源变化情况
- 利用ContentObserver监听全部资源的变化
- 监听截屏快捷按键 ( 由于厂商自定义Android系统的多样性,再加上快捷键的不同以及第三方应用,监听截屏快捷键这事基本不靠谱,可以直接忽略 )
在IOS中:
不过,由于这种方法依赖于上报,所以如果网络出现问题,那用户信息上报也可能会出现问题。
2、基于植入关于用户信息的数字水印
这种方式不依赖于客户端的上报,而且安全性也比较高,在很多场景下都有应用。
数字水印技术是一种基于内容的、非密码机制的计算机信息隐藏技术。是保护信息安全、实现防伪溯源、版权保护的有效办法。是信息隐藏技术研究领域的重要分支和研究方向。数字水印一般分为明水印与暗水印。多数职场人都了解明水印,但对于暗水印基本属于无知状态。因为明水印打在背景上,肉眼可见,还很容易被移除,但暗水印肉眼是不可见的,且较难移除。(注:暗水印,是指人感知不到的水印,不但你看不到,即使嵌入音频里,你也听不见)
下面我们拿网上一名网友的图做个案例。
1、添加水印
添加水印的过程是一个编码的过程。
如上原图,尺寸300*240。进行傅里叶变换后,生成如下频域图像:
下图是要加的水印,尺寸200*100。
进行编码后,生成如下图像:
说明:编码方式采用随机序列编码,通过编码,水印分布到随机分布到各个频率,并且对水印进行了加密。
将上图与原图的频谱叠加,生成如下新的图像。
从上图可见,新的叠加图像的频谱已经发生了巨大的变化。此时,如果再将叠加水印的频谱进行傅里叶逆变换,就可以得到叠加数字水印后的图像了。如下:
从上图看,肉眼几乎看不出叠加水印后的图像与原图的差异。
原图添加暗水印的过程,实际上是把水印以噪声的形式添加到原图像中。下图是在空域上的加水印图与原图的残差(调整了对比度,不然残差调小看不见)
可以看出,实际上上述方法是通过频域添加冗余信息(像噪声一样)。这些噪声遍布全图,在空域上并不容易破坏。
2、提取水印
水印提取是一个解码的过程,与水印叠加的过程相反。
如下是截屏后我手动抠出要测试的图像区域,并且抽样或者插值到原图尺寸,
进行水印提取操作后,得到如下图片:
从图中,我们可以清晰看到之前添加进去的水印。这说明,截图并不能隐藏原图的里面的水印信息。
实际上,不仅截图不能,涂抹、剪切、伸缩、旋转、压缩、PS等操作也不能,据某网友实验发现,目前最有可能可以的大概只有屏摄了。
哎,真是道高一尺魔高一丈。截图有风险,泄密需谨慎!