盲水印是一种肉眼不可见的水印方式,对图片资源使用图片盲水印或者文字水印,借此避免数字媒体未经授权的复制和拷贝,可通过对原图进行解码操作,得到水印图来证明版权归属。
这类盲水印是怎样实现的呢?原理并不复杂,通常是将图片进行离散余弦、小波或者傅里叶变换,得到图片的频谱信息,再将水印的编码信息叠加到图片的频谱上,然后再进行一次逆变换,生成的图片就带有几乎无法检测、但又可以确切还原出来的盲水印了。
盲水印的特性
- 隐蔽性由于不希望被察觉、不希望干扰用户体验、不希望被模仿等等原因,我们的水印不可见,也就是隐匿性。
- 强健性强健性通常也被称作鲁棒性,来自于其英文名称(Robustness)的音译。加了水印的图即使经过各种修改如压缩 、裁剪、涂画,旋转,也依然可以提取出水印。
- 不易移除性不易移除性跟鲁棒性有些相似, 不同的是:鲁棒性更加强调的是数字资源在传播过程中不要被不自觉地干扰和破坏。不易移除性是在别有用心者察觉了盲水印的存在后,不被他们自觉地移除或者破坏。
而这样的盲水印制作GitHub就有开源算法可以实现
https://github.com/chishaxie/BlindWaterMark#blindwatermark
ctf解题
攻防世界 misc 4-1
附件链接:https://adworld.xctf.org.cn/media/file/task/94bcfe60a3d3409bb77823c70a4c0245.zip
下载得到zip解压得到PNG图片
Kali下binwalk分析文件发现隐写zip foremost分离文件
解压分离后的zip得到一个压缩包和一个小提示
小提示
解压压缩包得到两张图片
考点是盲水印
Python实现盲水印提取
运行脚本前需要安装两个模块
先需要安装opencv
选择如下其中一条命令安装
pip install opencv-python
pip3 install opencv-python
安装matplotlib
python -m pip install matplotlib
使用如下其中一条命令提取盲水印(选择哪条取决于运行的是Python2脚本还是Python3)
python2 bwm.py decode day1.png day2.png flag.png
python bwmforpy3.py decode day1.png day2.png flag.png --oldseed
生成一个flag.png图片
得到flag
破坏测试
原图,水印图
加了盲水印的图及提取出来的水印图
光线攻击及提取出来的水印图
多遮挡攻击及提取出来的水印图
涂画攻击及提取出来的水印图