DASCTF2021三月赛-简单的png隐写

1. 首先

这是一个需要解密的压缩包,托到winhex中

2. 伪加密

结构体的前四个字节50 4B 03 04叫做目录中文件文件头标记;14 00是压缩使用的 pkware 版本; 14 00是解压文件所需 pkware 版本;09 00是全局方式位标记(这里是判断第二个有无加密的地点,00 00为没有加密,09 00 为有加密;伪加密的题目只需要将上面的两个全局方式位标记位改为00 00即可无密码解密!

猜测是伪加密,将09 00改为00 00

解压成功,得到两张图片

3. 查看hint.png

3.1 方法一

利用pngcheck工具查看hint.png图片

1
pngcheck -v hint.png

IDAT长度异常,按理说最多只有最后的一个IDAT长度不一致,但是这个有两条异常,所以初步判断,这个包含两张图片。

把图片托到winhex中,删掉第一段IDAT,保留下面一个。

3.2 方法二

使用工具tweakpng,查看hint.png并且删除多余IDAT

所以是outguess加密,key为89504E。

4. outguess解密

1
outguess -k 89504E -r flag.jpg -t output.txt

1
MUY4QjA4MDg5MTgwNzg1RTAwMDM2NjZDNjE2NzJFNzQ3ODc0MDA0QkNCNDk0Q0FGMzZCMDMwMzQ0RDM1NDlCNjRDMzMzNTMzMzRCMTQ4MzVCNzQ4NEEzNTMzNDg0OTMyMzU0QjRFMzUzMTQ5MzFCNUFDRTVFMjAyMDA0NjhCMjIzRjI4MDAwMDAw

猜测是base64,解密

1
1F8B08089180785E0003666C61672E747874004BCB494CAF36B030344D3549B64C33353334B14835B7484A3533484932354B4E35314931B5ACE5E20200468B223F28000000

看着像十六进制,猜测需要十六进制转ASCII,转换为:

1
‹‘€x^flag.txtKËIL¯6°04M5I¶L3534±H5·HJ53HI25KN51I1µ¬åâF‹"?(

5. 十六进制转文件

5.1 方法一(winhex)

发现有flag.txt字样,猜测可能是个压缩文件,需要将十六进制变成文件,打开winhex->新建->size:4->将十六进制字符粘贴进去->选择ASCII-Hex

保存文件,后缀为gz,zip都可以,如果不知道这个是什么文件,可以拖到kali中file一下。

5.2 方法二(python)

利用python脚本

1
2
3
4
5
from binascii import *

hexdata = "1F8B08089180785E0003666C61672E747874004BCB494CAF36B030344D3549B64C33353334B14835B7484A3533484932354B4E35314931B5ACE5E20200468B223F28000000"
with open('flag.gz','wb') as f:
f.write(unhexlify(hexdata))

5.3 方法三(CyberChef)

利用CyberChef工具解密

直接可以base64->hex->Gzip(左边直接search,找到后双击就会移动到recipe中)