题目给出提示,神秘数字0x50
下载附件后是一个打不开的png,用010打开看下内容:
结合异或和0x50的提示,可以发现0xD9^0x50=0x89,0x00^0x50=0x50,0x1E^0x50=0x4E……所以很明显了文件开头应该恢复成89 50 4E 47,接下来借助Python做文件读写的操作就能解题了,先读取每个字符(8bit),然后与0x50异或后写入新的文件:
f=open('misc5.png','rb')
d=f.read() #d就是文件内容,d是bytes类型
with open('wuwuwu.png','wb') as ff:
for dd in d:
ff.write(bytes([dd^0x50]))
然后恢复出来的wuwuwu.png上就能看到flag:
用微信里的图片文字提取可以拿出flag,新发现mac自带的图片预览竟然能直接复制出图片里的flag了,针不戳。
ctfshow{030d0f5073ab4681d30866d1fdf10ab1}
反正是我搞了半天才把修改后的每个字符写入新的文件,因为写入文件的内容要求是bytes的格式,然后我比较笨笨,一时不知道怎么处理,最后找了一种很简单的方法,也就是bytes([int类型的数]),这里一定要写成byte()里面还有一层[ ]的形式,否则就不对……
但是这个方法吧,运行之后会出来一大堆的1……可能是代表成功写入了,但是咋能让它不显示这么多1呢???
还是好菜啊QAQ
更新:bytes([x])这种形式其实不就是bytes()函数里面放着list吗?所以,可以在处理每个数字后先把每次得到的数追加到一个list中,最后再将list整体转换成bytes再写入文件,就不会出现那么多“1”了。