杂项签到
本题考察的是基础的图片隐写,flag直接隐藏在数据内容中
使用010Editor打开文件,直接搜索ctfshow就行
ctfshow{a62b0b55682d81f7f652b26147c49040}
损坏的压缩包
本题考察的是文件格式的头尾标识
根据文件所标识的格式信息,该文件应该为png图片,并不是zip压缩包,将文件后缀改为png查看
flag直接显示在图片上,用OCR识别即可
迷之栅栏
下载解压后是两个图片文件,根据图片文件的名称推测应该要对比两个文件的不同之处,直接放到010editor中进行比较
发现只有一段内容两个文件时不同的,直接复制出来cfhwfaab2cb4af5a5820}tso{06071f997b5bdd1a,发现不是想要的flag{***},在根据题目迷之栅栏,推测需要使用栅栏密码解密,使用2栏解密得到flag:ctfshow{f0a6a0b721cfb949a7fb55ab5d8d210a}
你会数数吗
直接放到010editor中,发现单纯的就是一堆数字
结合题目,统计一下各个字符出现的频率,按照高->低排列
结果出来了,后面只需要复制下来,整理一下格式即可ctfshow{a1b2d3e4g56i7j8k9l0}
flag一分为二
先放在010editor里看一下文件格式和宽高是不是被修改了
文件格式正确,爆破一下宽高
import zlib import struct filename = ("C:/Users/user/Desktop/miku.png") with open(filename, "rb") as f: all_b = f.read() crc32key = int(all_b[29:33].hex(), 16) # png 格式的crc校验 data = bytearray(all_b[12:29]) n = 4095 # 理论上0xffffffff,但考虑到屏幕实际/cpu,0x0fff就差不多了 for w in range(n): # 高和宽一起爆破 width = bytearray(struct.pack(">i", w)) # q为8字节,i为4字节,h为2字节 for h in range(n): height = bytearray(struct.pack(">i", h)) for x in range(4): data[x + 4] = width[x] # 两重循环爆破crc data[x + 8] = height[x] crc32result = zlib.crc32(data) if crc32result == crc32key: print("0x" + data.hex()) print("宽为:", end="") print(width.hex()) print("高为:", end="") print("0x" + height.hex()) exit(0)
得到结果2048*1024,目前的长度为2048*900,说明高度被修改了,修改回原本的高度
发现得到的flag不全,试了LSB隐写发现也不是,那么试一下盲水印
得到了另一半flag,拼接起来得到ctfshow{FirstP@RTSecondP@rTMikumiku~}
我是谁?
YOU AND ME
你会异或吗?
根据题目和文件,推测要对文件的十六进制字节数进行异或操作,直接使用010editor
得到结果
重新打开文件得到flag:ctfshow{030d0f5073ab4681d30866d1fdf10ab1}