ctfshow新手必刷菜狗杯 部分misc

刷刷misc ctfshow_新手必刷_菜狗杯

参考:ctfshow 菜狗杯 (opens new window)

# 谜之栅栏

解压拿到两个图片,放在010editor里比较文件

0

找到图片不同的部分,把两部分编码放一起,栅栏密码解密

1

解密第一个比较像flag了,凑个格式提交flag

2

分析:出题似乎可以在winhex里添加两部分不同内容,在相同地址,插入等长数据,如果不等长,后面的地址数据也都变成不同部分了。插入数据,可能会出现这种,插坏图片了,出现两个花图

# 你会数数吗

winhex打开这个没有扩展名的文件,文件内容没有什么规则,结合题目名字,像是词频统计

3

在010editor里打开词频统计,按从高到低排序,拿到flag

4

分析:通过词频统计出题,flag里的每个字母都只能用一次了,可能会比较短?

# 你会异或吗

题目提示神秘数字0x50,winhex打开题目附件png,格式坏掉了,在图片的16进制数据里,前几个字节和0x50异或

5

data = ['d9','00','1e','17','5d','5a','4a']
data1 = []

for i in data:
    data1.append(hex(int(i, 16) ^ 0x50))
# ['0x89', '0x50', '0x4e', '0x47', '0xd', '0xa', '0x1a']
print(data1)
1
2
3
4
5
6
7

得到0x89 0x50 0x4e 0x47 0x0d 0xa 0x1a,是png的文件头,写个脚本把文件修复一下

f=open("./misc5.png",'rb')
# 二进制形式
con=f.read()
with open('flag.png','wb') as nfile:
    for b in con:
        # 这里的b是int形式,要转换成bytes时,使用bytes(),且里面的内容需要加[]
        nfile.write(bytes([b^0x50]))
1
2
3
4
5
6
7

6

# flag一分为二

放到StegSolve里文件分析一下,又get到了,原来StegSolve可以分析图片,可以通过CRC了解图片是否被修改过,看到计算出的CRC和显示的CRC已经对不上了

7

试试修改文件高度,文件宽高0010h:00 00 08 00为宽度,00 00 03 84为高度,winhex把高度改大一点

8

改到1000(4096)试试,放大可以看到第二部分flag了,另一部分不在这里

9

这个手动修改不够完美和优雅,如果手动修改达到看到信息的方法,后续再用这个图片,可能会报错导致不能再次打开图片。推荐一款开源工具【Deformed-Image-Restorer】 (opens new window)CTFer的福音,Misc手的利器,自动爆破PNG图片宽高并一键修复离线脚本工具

10

11

提取出来的盲水印有不可见字符?

12

分析:修改高度,通过winhex修改图片宽高位置,达到隐藏部分信息,不使用脚本,手改难以准确恢复真实宽高。盲水印看起来也挺好玩的

最后一次更新于: 2025/01/19, 23:04:33