WP CTF-Misc 攻防世界 CSFJ0967 Let_god_knows

「附件」

题目描述:
让苍天知道,你不认输?

附件下载解压,得到一个bmp图片

「思路」

使用Stegsolve找图片隐写,在Red plane 0 中发现清晰二维码。

CQR扫码得到flag。

「工具」

  • Stegsolve
  • CQR

「知识拓展」

转载:官方WP

出题思路

使用传统图片隐写方法LSBS,将270270px的二维码图片分解为2727的方块矩阵,去除上下左右10px宽度的白色边框后变为2525的方块矩阵,将黑色方块看做1,白色方块看做0,变成一个2525的矩阵。
自RGB图0x233*0x233px的位置开始,将二维码的01矩阵隐写入R通道的最后1bit中。

def encode(): img = cv2.imread(data_path + "test.jpg") flag = cv2.imread(data_path + "flag.png") start = 0x233 for i in range(start, start + 25): for j in range(start, start + 25): if list(flag[(2+i-start)*10-5][(2+j-start)*10-5]) == [255, 255, 255]: img[i][j][2] = img[i][j][2] & 254 # white: 0 else: img[i][j][2] = img[i][j][2] | 1 # black: 1 cv2.imwrite(data_path + "Let_god_knows.bmp", img)

解题思路

使用StegSolve工具找到Red plane 0,保存图片后放大即可看到二维码,扫码得flag。

python还原二维码逆过程代码如下:

def decode(): img2 = cv2.imread(data_path + "Let_god_knows.bmp") start = 0x233 resolve = [[[255, 255, 255] for i in range(27)]] for i in range(start, start + 25): col = [[255, 255, 255]] for j in range(start, start + 25): if img2[i][j][2] & 1 == 0: col.append([255, 255, 255]) else: col.append([0, 0, 0]) col.append([255, 255, 255]) resolve.append(col) resolve.append([[255, 255, 255] for i in range(27)]) cv2.imwrite(data_path + "recovered.bmp", np.array(resolve))

__EOF__

本文作者stonechen
本文链接https://www.cnblogs.com/stonechen/p/CSFJ0967.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   没事摸摸小肚子  阅读(311)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示