菜狗杯Misc打不开的图wp

一、原题

原题是给了一个zip压缩包,解压后是一个命名为misc5.5的png图片,但无法预览。
题目给的文件

二、解题步骤

既然无法直接预览,先用010editor打开一下吧:
010打开png文件
联想到png文件开头应该是89 50 4E 47,观察下题目给的png的开头是77 B0 B2 B9,会发现0x89+0x77=0x100, 0x50+0xB0=0x100, 0x4E+0xB2=0x100, 0x47+0xB9=0x100, 所以,只要用0x100减去现在png文件中的每个字节的16进制数即可恢复出可以预览的png图片
但是要注意这里还有一个小坑,就是0x100是十进制数的256,而bytes格式最大只能表示到255,出现256会报错,所以题目原png文件中是0的位置,还是0,不能用0x100去减
具体可以写Python脚本来做,而且做这道题的过程中,解决了上次做异或题目(也是菜狗杯的Misc题目之前写了博客)遇到的问题,其实就是把整个文件处理后的结果(int类型)放在list中再把整个list放在bytes()中即可转换成bytes格式写入新的文件中,得到恢复的文件。而上次是计算一个数就转一次bytes写入新文件,就会在命令行中出来好多1.

三、解题用的Python脚本

ff=open('./misc5.5.png','rb')
data=ff.read()
l=[]
for dd in data:
    if dd==0:
        l.append(dd)
    else:
        l.append(0x100-dd) 
ff=open('./1234.png','wb') #会新建一个可写入的新文件1234.png
ff.write(bytes(l))
ff.close()

将list整体转换bytes再写入新文件,执行后命令行中就不再出现很多1,而是301933,应该是文件大小:
执行后命令行不再出现很多1
运行后就可以看到恢复出的图片1234.png了,图上有flag。
得到恢复出的图片
拿到flag
ctfshow{84a3ca656e6d01e25bcb7e5f415491fa}
可能直接复制图片中的文本有时会把{变成(,交flag时还是要先仔细看下~

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值