CTFSHOW菜狗杯解析

杂项签到

本题考察的是基础的图片隐写,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}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值