ByteCTF2020盲水印复现

Hardcore Watermark 01

预期

cv2库安装:pip3 install opencv-python

      图片中每个像素可以通过三个值(通道)来表示,常见的是R(red)G(green)B(blue)模式。而本题用到的通道是YCrCb(我也不知道为什么)。通过python的cv2库对img图片数据进行色彩空间转换,即可得到三个通道的数据,然后再对三个通道中的数据根据奇偶做二值化处理,也即判断数据的最低位:

1
2
3
4
5
6
7
from cv2 import cv2 as cv
img = cv.imread('ByteDance.png')
src = cv.cvtColor(img, cv.COLOR_BGR2YCrCb)
Y, Cr, Cb = cv.split(src)
cv.imwrite('Y.png', (Y % 2) * 255)
cv.imwrite('Cr.png', (Cr % 2) * 255)
cv.imwrite('Cb.png', (Cb % 2) * 255)

得到灰常清楚的部分二维码,拼合在一起扫一下就行。

非预期

谷歌识图搜原图

注意:题目图片像素为 4176 × 2784,下载的图片像素应该一样,否则无法在stegsolve中图片拼接运算。

      选择Image Combiner功能,插入原图,点击下面小箭头到Sub运算。然后将保存的图片使用stegsolve打开,颜色属性调成反向(Xor),得到类似二维码的图。

      观察发现有三个部分,且三个部分都是二维码的三分之一。本来以为是图片拼接,只要找到隐写的剩下部分就行,但是找不到。仔细一看,发现二维码的格子有红绿蓝三种颜色,这很有可能是图片重叠,需要根据红绿蓝颜色分别提取。

      打开尘封已久的ps,切换通道,果然在每个颜色通道显示的二维码部分不同,只要将他们提取后拼接起来就行。

切换通道,照着图像在QrazyBox对着填,最后扫一下就出flag。但是这样比较费眼睛,所以推荐下面一种方法:脚本提取

      但是这里出现了一个小问题:尽管找到的最接近原图的图片进行Image Combiner还是无法完全还原二维码图,导致提取出来的二维码清晰度甚至不如ps切换通道。现在我还不知道该如何解决。。。(wtcl)

贴一下提取脚本:(提取蓝色部分)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from PIL import Image

im = Image.open('solved.bmp')
width = im.size[0]
height = im.size[1]
p = Image.new("RGB", (width, height), (255, 255, 255))
for h in range(height):
    for w in range(width):
        pixel = im.getpixel((w, h))
        if pixel[1] > 240 and pixel[2] > 240:
            p.putpixel((w, h), pixel)

p.save('1.png')

最终结论:手撸>>脚本(bushi

Hardcore Watermark 02

预期

太复杂,看不懂(其实是想偷懒)

Hardcore Watermark 02

非预期

      图像使用stegsolve打开,调整颜色属性为Blue plane时发现上面有隐藏的方格,谷歌识图搜原图(原图像素为3000×2000),用ps打开。

      将两张图像放在两个图层中(原图在上面),将原图的混合模式选为差值,并且打开蓝色通道。然而我又遇到了技术问题,无法呈现像ByteCTF 2020 Misc WriteUp一样清晰的图。

没有什么好的解决办法,ps咱也不会用,通过选择选择-色彩范围然后调整颜色容差,点一下观察区域(方格区域)。此时会有较清楚(也没多清楚)的黑白三角形,一黑一白组成了一条线段的方向,然后手撸转二进制。

注意:调整颜色容差后不要关闭设置框,停留在最适合观察三角形方向的地方即可。

得到:

010000100111100101110100011001010100001101010100010001100111101101100010011101110110110101010100011001010110000101101101001000010111110100100000001000000010000000100000001000000100

转成字符串就是flag。

参考

ByteCTF 2020 Misc WriteUp

ByteCTF 2020 部分题目 官方Writeup