ctfshow-Misc入门 图片篇(50-56)

Posted z.volcano

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ctfshow-Misc入门 图片篇(50-56)相关的知识,希望对你有一定的参考价值。

八神出的misc入门系列

图片篇

图片篇(颜色通道)

misc50

考察Stegsolve的使用



flag:ctfshow84470883ee1eec2e886436461bf79111

misc51

提示:你会数数吗。

背景颜色杂乱无章,各个通道看了也没有思路,后面八神师傅提示了一下大致方向,才顺利解出来

统计一下每种颜色像素点的个数,发现绝大多数颜色只出现过1-3次,而(64, 96, 128)出现过282次,(128, 96, 64)出现过279

from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))

dic = 

for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        dic[s] = dic.get(s,0)+1
lt = list(dic.items())
lt.sort(key = lambda x:x[-1])
print(lt)

思路清晰了,Image.new新建一个黑色背景的图像,再遍历一次,如果坐标(x,y)对应的颜色为上述两种其一,则把该坐标对应的像素点变成白色

from PIL import Image
im=Image.open('misc51.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))

for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        if s == (64, 96, 128) or s == (128, 96, 64):
            img.putpixel([h, w], (255, 255, 255))
img.show()

misc52

提示:不会数数没关系,这次可以用眼睛瞪。

和上一题不一样的地方在于,在某些通道可以依稀看到flag

大概做法和misc51一样,但是不同的是,这题颜色的出现更有规律,每种颜色的出现次数在199-585

八神师傅非常贴心,这里只要选择出现次数最少的十种即可,不需要猜或是爆破

from PIL import Image
im=Image.open('misc52.png')
im = im.convert('RGB')
img = Image.new("RGB",(900,150))
lt = [(130, 176, 116),(72, 217, 123),(146, 16, 141),(130, 241, 105),(251, 160, 136),(5, 129, 88),(167, 46, 187),(20, 65, 141),(96, 231, 225),(196, 144, 18)]
for h in range(900):
    for w in range(150):
        s = im.getpixel((h,w))
        if s in lt:
            img.putpixel([h, w], (255, 255, 255))
img.show()

misc53

提示:开始愉快的LSB部分。

关于LSB隐写的基本概念可以参考LSB隐写(最低有效位隐写)

在做题时,如果遇到图片是pngbmp格式,就有可能是LSB隐写

大多数情况下,可以用zsteg一把梭

但是如果出题人稍加操作,就梭不出来了,所以还是得学会使用stegsolve

R0B0G0通道都发现lsb隐写痕迹

使用Analyse中的data extract,选上对应选项

misc54

提示:还是愉快的LSB部分。

这个题就没办法用zsteg一把梭,使用stegsolve分析

Alpha0B0G0通道均发现lsb隐写痕迹,而且和misc53不同的是,这里是竖向排列的,即按列(column)

勾选上对应选项

misc55

提示:怎么又是愉快的LSB部分。

R0、G0、B0通道均有隐写痕迹,但是提取不出有用信息。

注意到图片是上下翻转的,写脚本把图片翻转回来

from PIL import Image

img = Image.open('misc55.png')

img.transpose(Image.FLIP_TOP_BOTTOM).save('out.png')

接着可以正常提取出数据,解压拿flag

misc56

提示:怎么老是愉快的LSB部分。

R4、R2、R1、G4、G2、G1通道有隐写痕迹

misc60

提示:LSB之一零二四好人一生平安。

发现RGB Plane的0-4通道都有隐写痕迹

而且题目已经说了Plane Order = RGB,那么还需要确定通道的顺序,提示中的一零二四指出这里的顺序是1-0-2-4

from PIL import Image

img = Image.open('misc60.png')

def f(img,axis):
    p = img.convert('RGB').getpixel(axis)
    out = ''
    for i in p:
        tmp = bin(i)[2:].zfill(8)
        for j in [1,0,2,4]:
            out += tmp[7-j]
    return out

ans = ''
length = 28

for i in range(length):
    ans += f(img,(i,0))
for i in range(len(ans)//8):
    print(chr(int(ans[8*i:8*(i+1)],2)),end='')

以上是关于ctfshow-Misc入门 图片篇(50-56)的主要内容,如果未能解决你的问题,请参考以下文章

ctfshow-Misc入门 图片篇(50-60)

ctfshow-Misc入门

ctfshow刷题笔记-misc入门

C# 10分钟完成百度图片提取文字(文字识别)——入门篇

HTML CSS入门必备知识 编写一篇博客(基础标签和图片下载) 个人简历的表格练习

C语言数字图像处理---入门总结篇