「配枪朱丽叶。」

RootのCTF学习笔记。

湖南省赛2019/BUUCTF-Misc:Findme

题目下载

这道题挺恶熏的T T记录一哈。感谢群里提供WP的师傅和RichardTang师傅。

1.png
其中第一张根据做题经验明显需要修改宽高。
CRC爆破宽和高的脚本:

import zlib
import struct
file = '1.png'
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.write(newpic) 
            fw.close 

宽高修改完毕仍然发现图片是花的。。
原因是png的chunk2和3位置开头需要改为IDAT(讲真好偏。。
修改它需要用到010editor(10.0版本,戳我下载破解版提取码2agf
加载png模板后,在变量这里可以看到各个数据块(chunk):
https://s2.ax1x.com/2020/01/15/lLJ99U.png
修改完毕后保存图片应该就显示正常啦。放到stegsolve图片隐写神器里扒拉几下可以看到一张二维码图。保存反色扫描得到:ZmxhZ3s0X3

2.png
文件尾处有7z的字样,把尾处的数据都提取出来,不难发现它(37 7A 03 04)和zip(50 4B 03 04)的格式很像。
把所有的7z替换成PK:
https://s2.ax1x.com/2020/01/15/lLYaIx.png
里面有1000个文件,其中618.txt大小和其他的都不同,得到:You find it: 1RVcmVfc

3.png
chunk[0]-chunk[6]每一个数据块的crc值像一个可打印的ascii字符:
https://s2.ax1x.com/2020/01/15/lLYqwn.png
连起来得到:
https://s2.ax1x.com/2020/01/15/lLYvWT.png
3RlZ30=

4.png
exiftool:
https://s2.ax1x.com/2020/01/15/lLtiwR.png
another part:cExlX1BsY

5.png
文件尾:I give U a gift:Yzcllfc0lN

将得到的这些base64片段排列组合(15423),解码得到flag。