2021 第二届“祥云杯”(misc) 鸣雏恋
下载附件,是一个文档
用16进制编辑器打开
文件头是504b,是一个zip压缩包,那修改文件后缀名为zip。
得到一些文件,从其中的_rels文件夹中发现了一个key.txt文件和一个加密压缩包
打开txt文件查看,发现了一些线索
鼠标放在文字末尾时,发现显示是190列,猜测是零宽度字符隐写
零宽度字符是一种字节宽度为0的不可打印的Unicode字符, 在浏览器等环境不可见, 但是真是存在, 获取字符串长度时也会占位置, 表示某一种控制功能的字符。
用kali查看一下
果然是
在线解密一下,或者写个脚本自己解密。因为我菜,所以就用在线解密了。
零宽度字符隐写在线解密
将文本复制进去
然后直接点解码(decode)就可以了
得到:Because I like naruto best
应该是压缩包的密码,将压缩包解压
有两种图片,这就很明白了。猜测女孩图片代表0 男孩图片代表1。然后转成2进制(如果不是的话,就反一下)
写脚本提取二进制
import os
import base64
if name == 'main':
f = open('key1.txt', 'w')
for i in range(129488):
png = 'D:\ctf\out\%s.png'%i
png_stats = os.stat(png)
if (png_stats.st_size == 262):
f.write('0')
else:
f.write('1')
f.close()
将二进制转换为字符串
在线解密
解密后发现是一个base64转图片
在进行base64转图片解密
base64还原图片解密
得到一个图片,flag在图片中。