Hardcore Watermark 01
预期
cv2库安装:pip3 install opencv-python
图片中每个像素可以通过三个值(通道)来表示,常见的是R(red)G(green)B(blue)
模式。而本题用到的通道是YCrCb
(我也不知道为什么)。通过python的cv2库
对img图片数据进行色彩空间转换,即可得到三个通道的数据,然后再对三个通道中的数据根据奇偶做二值化处理,也即判断数据的最低位:
|
|
得到灰常清楚的部分二维码,拼合在一起扫一下就行。
非预期
谷歌识图搜原图
注意:题目图片像素为
4176 × 2784
,下载的图片像素应该一样,否则无法在stegsolve中图片拼接运算。
选择Image Combiner
功能,插入原图,点击下面小箭头到Sub
运算。然后将保存的图片使用stegsolve打开,颜色属性调成反向(Xor),得到类似二维码的图。
观察发现有三个部分,且三个部分都是二维码的三分之一。本来以为是图片拼接,只要找到隐写的剩下部分就行,但是找不到。仔细一看,发现二维码的格子有红绿蓝三种颜色,这很有可能是图片重叠,需要根据红绿蓝颜色分别提取。
打开尘封已久的ps,切换通道,果然在每个颜色通道显示的二维码部分不同,只要将他们提取后拼接起来就行。
切换通道,照着图像在QrazyBox对着填,最后扫一下就出flag。但是这样比较费眼睛,所以推荐下面一种方法:脚本提取
。
但是这里出现了一个小问题:尽管找到的最接近原图的图片进行Image Combiner
还是无法完全还原二维码图,导致提取出来的二维码清晰度甚至不如ps切换通道。现在我还不知道该如何解决。。。(wtcl)
贴一下提取脚本:(提取蓝色部分)
|
|
最终结论:手撸>>脚本(bushi
Hardcore Watermark 02
预期
太复杂,看不懂(其实是想偷懒)
非预期
图像使用stegsolve打开,调整颜色属性为Blue plane时发现上面有隐藏的方格,谷歌识图搜原图(原图像素为3000×2000),用ps打开。
将两张图像放在两个图层中(原图在上面),将原图的混合模式选为差值,并且打开蓝色通道。然而我又遇到了技术问题,无法呈现像ByteCTF 2020 Misc WriteUp一样清晰的图。
没有什么好的解决办法,ps咱也不会用,通过选择选择-色彩范围
然后调整颜色容差,点一下观察区域(方格区域)。此时会有较清楚(也没多清楚)的黑白三角形,一黑一白组成了一条线段的方向,然后手撸转二进制。
注意:调整颜色容差后不要关闭设置框,停留在最适合观察三角形方向的地方即可。
得到:
010000100111100101110100011001010100001101010100010001100111101101100010011101110110110101010100011001010110000101101101001000010111110100100000001000000010000000100000001000000100
转成字符串就是flag。