盲水印是一种肉眼不可见的水印方式,对图片资源使用图片盲水印或者文字水印,借此避免数字媒体未经授权的复制和拷贝,可通过对原图进行解码操作,得到水印图来证明版权归属。

这类盲水印是怎样实现的呢?原理并不复杂,通常是将图片进行离散余弦、小波或者傅里叶变换,得到图片的频谱信息,再将水印的编码信息叠加到图片的频谱上,然后再进行一次逆变换,生成的图片就带有几乎无法检测、但又可以确切还原出来的盲水印了。

盲水印的特性

  1. 隐蔽性由于不希望被察觉、不希望干扰用户体验、不希望被模仿等等原因,我们的水印不可见,也就是隐匿性。
  2. 强健性强健性通常也被称作鲁棒性,来自于其英文名称(Robustness)的音译。加了水印的图即使经过各种修改如压缩 、裁剪、涂画,旋转,也依然可以提取出水印。
  3. 不易移除性不易移除性跟鲁棒性有些相似, 不同的是:鲁棒性更加强调的是数字资源在传播过程中不要被不自觉地干扰和破坏。不易移除性是在别有用心者察觉了盲水印的存在后,不被他们自觉地移除或者破坏。

而这样的盲水印制作GitHub就有开源算法可以实现

 https://github.com/chishaxie/BlindWaterMark#blindwatermark  

ctf解题

攻防世界 misc 4-1

盲水印java 盲水印怎么去除_安全

附件链接:https://adworld.xctf.org.cn/media/file/task/94bcfe60a3d3409bb77823c70a4c0245.zip

下载得到zip解压得到PNG图片

盲水印java 盲水印怎么去除_压缩包_02

 Kali下binwalk分析文件发现隐写zip foremost分离文件

盲水印java 盲水印怎么去除_压缩包_03

 

盲水印java 盲水印怎么去除_盲水印java_04

解压分离后的zip得到一个压缩包和一个小提示

盲水印java 盲水印怎么去除_安全_05

小提示

盲水印java 盲水印怎么去除_安全_06

解压压缩包得到两张图片

 

盲水印java 盲水印怎么去除_安全_07

考点是盲水印

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图片

盲水印java 盲水印怎么去除_python_08

得到flag

盲水印java 盲水印怎么去除_盲水印java_09

破坏测试

原图,水印图

盲水印java 盲水印怎么去除_压缩包_10

                       

盲水印java 盲水印怎么去除_安全_11

 加了盲水印的图及提取出来的水印图

 

盲水印java 盲水印怎么去除_python_12

                     

盲水印java 盲水印怎么去除_压缩包_13

 光线攻击及提取出来的水印图

盲水印java 盲水印怎么去除_压缩包_14

                    

盲水印java 盲水印怎么去除_python_15

多遮挡攻击及提取出来的水印图

盲水印java 盲水印怎么去除_python_16

                     

盲水印java 盲水印怎么去除_压缩包_17

 涂画攻击及提取出来的水印图

 

盲水印java 盲水印怎么去除_压缩包_18

                    

盲水印java 盲水印怎么去除_安全_19