Misc——图片隐写

图片隐写

flag直接写在图片的16进制文件中

BUUCTF-MISC-隐藏的钥匙
将图片使用WinHex打开,搜索“flag”(ASCII编码),
Misc——图片隐写_第1张图片
发现有flag的base4编码,
Misc——图片隐写_第2张图片
解密得到flag。

修改图片宽高

BUUCTF-MISC-大白从steglove中的file format report中可以看到crc检验不一致,说明宽高被修改过,加长高,保存图片即可得到flag。

gif动图

buuctf-gif
使用ps分离gif的每一帧,即可得到flag。

将文件数据放置在图片的二进制文件后

BUUCTF-MISC-爱因斯坦放入WinHex发现有隐藏文件,在kali中使用binwalk分离出压缩包,发现被加密;
Misc——图片隐写_第3张图片
怀疑是伪加密,使用WinHex更改压缩包数据0900为0000,发现不行,看来是真加密了。
题目中也没有什么提示,想爆破也没有头绪,看来只能从图片下手找线索了。(其实没有什么头绪,看了几个笔记,发现详情里有线索~;真的是啥都得看一看啊)
查看一下图片的详细信息,发现有一个备注:
Misc——图片隐写_第4张图片咱就是说,着实有点此地无银三百两了……把它粘到密码框中,发现成功解密~(芜湖!)

LSB隐写

BUUCTF-MISC-LSB
没有什么密码的提示,所以可能没有加密,就不使用cloacked-pixel了,
使用StegeSlove工具,使用数据分析(data analyse)模式,选中R,G,B三种颜色的0位(最低位),发现应该是png格式的图片,于是将分离出来的二进制数据保存为output.pn(不能保存为文本哦)。
Misc——图片隐写_第5张图片
发现是个二维码,使用PsQREdit工具,解析得到flag。
Misc——图片隐写_第6张图片

F5隐写

BUUCTF-MISC-刷新过的图片
使用f5隐写工具:F5-steganography

Misc——图片隐写_第7张图片分离出隐写进去的文件output.txt;
Misc——图片隐写_第8张图片
放进WinHex发现应该是压缩包,更改后缀名,解压得到flag文件。

Base64隐写

BUUCTF-MISC-Base64隐写
就是将文件内容全部使用base64加密,这也不属于图片隐写了,只是一种隐写方式,另外还有文本隐写什么的,就是将文件中的数据
下面是看的其他大佬写的解密代码(python2环境)

def get_base64_diff_value(s1, s2):
    base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
    res = 0
    for i in xrange(len(s2)):
        if s1[i] != s2[i]:
            return abs(base64chars.index(s1[i]) - base64chars.index(s2[i]))
    return res


def solve_stego():
    with open('ComeOn!.txt', 'rb') as f:
        file_lines = f.readlines()
        bin_str = ''
        for line in file_lines:
            steg_line = line.replace('\n', '')
            norm_line = line.replace('\n', '').decode('base64').encode('base64').replace('\n', '')
            diff = get_base64_diff_value(steg_line, norm_line)
            print diff
            pads_num = steg_line.count('=')
            if diff:
                bin_str += bin(diff)[2:].zfill(pads_num * 2)
            else:
                bin_str += '0' * pads_num * 2
            print goflag(bin_str)


def goflag(bin_str):
    res_str = ''
    for i in xrange(0, len(bin_str), 8):
        res_str += chr(int(bin_str[i:i + 8], 2))
    return res_str


if __name__ == '__main__':
    solve_stego()

盲水印

盲水印分为加文字盲水印和图片盲水印,

附加一个二维码修复的题:

信码修复+盲水印+DES解密
Misc——图片隐写_第9张图片图中有一个没有定位符的二维码,属于汉信码。

中国自主可信的二维码——汉信码,是一种矩阵式二维条码,具有知识产权免费、汉字编码能力强、抗污损、抗畸变、信息容量大等特点。可使用“中国编码”app扫描识别。
Misc——图片隐写_第10张图片

首先使用PS将此汉信码补全。先从网上生成一个汉信码,截取下来一个定位符,然后在ps中补全二维码。得到下面的图。
Misc——图片隐写_第11张图片使用“中国编码”app(手机终端,电脑没有)扫码,得到一串数据:

U2FsdGVkX1+VyTFFHJKE1vOpn6xKFfzogSZcRQYb8YlXxvKw7Y3mmyGR9OA9aG5aGUZTlRa8jNlyFU8bKdnQSg==

看起来应该是base64编码,或者是非对称加密,使用base64解密发现还是乱码,判断应该是非对称加密了,那就再继续找找线索吧。。。。
尝试分离文件,发现没有隐藏文件,应该也没有lsb隐写,尝试一下盲水印,发现了key(文中的图不行了,已经被CSDN加过水印了,大家就是看一下过程):

在使用盲水印工具的时候也出现了一点点问题:首先有一些工具需要有原图才能解析出水印,那么我用了一个java编写的开源工具BlindWatermark:(Java) 盲水印,下载之后需要编译成jar包才能使用,第一次用我在这里也花了一些时间,使用IDEA编译好后就可以使用其命令进行解析,一共有两种解码方式:cosine变换和fourier(傅里叶)变换,使用consine解码出来的图片没有信息,于是就试了试傅里叶,发现成功解码。

Misc——图片隐写_第12张图片
然后使用key来解密,使用DES解密,得到flag。
Misc——图片隐写_第13张图片

综合例题

知识点:宽高,图片文件格式,压缩包文件格式,图片隐写,LSB隐写,EXIF,二维码,base64编码
BUUCTF-湖南赛findme
打开有五张图,第一个很不正常,按理说应该是跟后面几个差不多的图,所以图有问题,宽高可能也有问题,
使用脚本改成正确宽高:

import zlib
import struct
file = '1.png'
#file = input("please input png's path:")
fr = open(file,'rb').read()
data = bytearray(fr[12:29])
#crc32key = eval(str(fr[29:33]).replace('\\x','').replace("b'",'0x').replace("'",''))
crc32key = 0xC4ED3
#data = bytearray(b'\x49\x48\x44\x52\x00\x00\x01\xF4\x00\x00\x01\xF1\x08\x06\x00\x00\x00')
n = 4095
for w in range(n):
    width = bytearray(struct.pack('>i', w))
    for h in range(n):
        height = bytearray(struct.pack('>i', h))
        for x in range(4):
            data[x+4] = width[x]
            data[x+8] = height[x]
            #print(data)
        crc32result = zlib.crc32(data)
        if crc32result == crc32key:
            print(width,height)
            print(data)
            newpic = bytearray(fr)
            for x in range(4):
                newpic[x+16] = width[x]
                newpic[x+20] = height[x]
                #           fw = open(file+'.png','wb')
            fw = open(file, 'wb')
            fw.write(newpic)
            fw.close
            print("It's done!")

发现果然是差不多的图,但是图有损坏,使用010editor改正损坏的“IDAT”数据块,图像显示正常。
但是看里面没有隐藏的信息或者文件,于是猜想可能是LSB隐写,使用stegsolve,轮流看一下发现在蓝色2通道有一张二维码,
Misc——图片隐写_第14张图片看他跟正常二维码有些不太一样,应该是黑白颜色反了,于是需要用QR Research扫码,得到一串字符:ZmxhZ3s0X3

再看2.png,里面应该有个压缩包,尝试分离,但是分离不出来,于是手动分离,但还是发现7z不能解压缩,于是在winhex又仔细看了看,跟504B0304很像,应该是把PK都换成了7z来迷惑!!于是全部替换回去,之后可以正常解压,找到不一样的文件,得到另一部分字符:1RVcmVfc
Misc——图片隐写_第15张图片3.png的真真看不出来‍♀️,使用010editor,发现他们的IDAT数据块都不一样,但是真的想不到是将全部数据块的crc校验值当做ascii码得到字符串,得到数据:
Misc——图片隐写_第16张图片
将他们转换成字符后为:3RlZ30=
后面4.png从EXIF信息查看器中可以查询到提示(真真也想不到。。。)

Misc——图片隐写_第17张图片4和5直接放进winhex也可以看到字符:cExlX1BsY(但是他后面还有个=,所以这种方式很有可能混淆出错)和Yzcllfc0lN
于是将这五部分字符组合,看起来应该是base64编码的,Z开头的应该是最开始,=应该是结尾,于是随机组合中间三个:最后得到1+5+4+2+3是正确顺序,拿到flag。

你可能感兴趣的:(安全)