文章目录
一、前言
WP不完整,仅供参考!
除WEB外,其余附件均已打包完毕,在这里也是非常感谢师傅的附件支持!
123网盘下载:
二、MISC
unzip-png
解题思路
附件下载,得到一个txt,打开仔细观察不难发现这个头部有点像zlib的头部(789c),可能有的师傅刷题刷的少,zlib是什么他不知道,不过没关系哈,这里我们也简单说说:
zlib文件
我们在分析文件时,
789C
是 zlib 数据流 的一个特征性的起始字节,我们可以通过这些字节来识别它是 zlib 格式的压缩数据。这是因为 zlib 压缩流的开头包含一个压缩头部,并且其中的前两个字节具有特殊的含义。
- zlib 头部格式
zlib 数据流的头部由两个字节组成,具体格式如下:
- 第一个字节(8位):压缩方法和信息(
CMF
,即Compression Method and Flags
) - 第二个字节(8位):额外的标志和校验值(
FLG
,即Flags
)
- 具体含义
- 78 :第一个字节
78
的前四位0111
表示使用 DEFLATE 压缩算法(zlib 默认使用 DEFLATE),后四位表示压缩窗口大小。 - 9C :第二个字节
9C
代表某种默认设置,且最后5位是用来计算校验和(FCHECK)的。
- 常见的 zlib 头部
zlib 文件头的常见前两字节是:
78 01
:表示最低压缩级别,几乎不压缩78 9C
:表示默认压缩级别(常见,压缩比和速度均衡)78 DA
:表示最高压缩级别(压缩率最高,但速度较慢)
TXT文本
当然这里如果一时半会看不出是zlib也没有关系,我们可以直接请出我们的工具:cyberchef
哎,这里有的师傅可能就有疑问了,比赛不是离线的嘛?怎么还可以使用在线工具呢?因为人家"cyberchef"本来就是可供本地下载离线解码!
直接将1.txt拖进去即可,cyberchef会自动识别并且帮助解码(当然只能识别出一些简单的,复杂一些的就需自己分辨了)
最后经过一次"From Hex"解码,以及"Detect File Type"也是成功识别出是zlib文件(这里全程是cyberchef自动识别出的)
那既然已知晓是zlib,这里我们直接将用于自动识别文件的Detect File Type进行替换Zlib Inflate即可
直接在cyberchef的搜索栏中查找关键词zlib就能发现,接着选中Zlib Inflate进行拖动至Recipe中进行解码即可,最后看见89 50 4E 47
就熟悉多了吧?
最后导出解码的数据,保存即可:
哎,那这里有的师傅可能就要急了,他可能会直接将刚刚导出的download.dat直接改一个后缀,修改为download.png,以为就能直接显示图片,但其实并不是这样操作的:
在cyberchef中,导出的数据都是原数据,这是什么意思呢?通俗易懂来说,你就只是单纯导出了
89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52
这一串数字,人家并不会直接帮你转换为png图片(也并不是单纯修改后缀为png那么简单),当然我们可以选中导出的download.dat使用010打开分析一下
这样一打开来进行查看,跟普通的png图片是不是少了些什么?那我们到底要怎么做呢,其实也很简单,这里以010为例,我们可以直接新建一个十六进制的文件,将刚刚得到的数据复制并且"Ctrl+shift+v"粘贴至新建的十六进制的文件中:
得到
最后Ctrl+s保存为1.png即可,这时候我们再去打开图片,会发现还是什么也看不见:
那既然不能正常显示,肯定是图片数据出现了问题,那我们接着返回010中仔细观察一下:
那这里我们首先来简单的了解一下PNG图片的组成部分;
一个 PNG 图片 一般由多个部分组成,主要包括几个关键的 数据块(chunk) ,其中最常见的部分有 IHDR 和 IDAT 块。
PNG 文件的主要组成部分:
-
文件签名(PNG Signature):
- PNG 文件以一个 8 字节的固定签名开始,标识文件是 PNG 格式。
- 这个签名的十六进制值是
89 50 4E 47 0D 0A 1A 0A
。
-
数据块(Chunks): PNG 文件接下来的部分由一系列数据块组成,每个数据块有其特定的功能。每个数据块包含四部分:长度、类型、数据和 CRC 校验。
常见的数据块有:
-
IHDR(Image Header Chunk):
- 这是 PNG 图片的头部,它是第一个数据块,包含图片的基本信息,比如宽度、高度、位深度、颜色类型、压缩方法、滤波器方法和交错方法。
- IHDR 块非常重要,任何 PNG 图片都必须有一个 IHDR 块。
- 大小通常是 13 字节。
-
PLTE(Palette Chunk,调色板块):
- 用于定义图像的调色板(仅在使用调色板的 PNG 图片中出现)。这部分包含索引颜色值。
-
IDAT(Image Data Chunk):
- IDAT 块包含图像的压缩数据 ,可以有多个 IDAT 块。PNG 使用 zlib/DEFLATE 算法对图像数据进行压缩。
- IDAT 块的数据在解压后会还原为图像的像素数据。
-
IEND(Image End Chunk):
- 标志着 PNG 文件的结束,IEND 是最后一个数据块。
- 没有数据内容,只有一个结束标志。
-
其他数据块(可选):
- tEXt / zTXt / iTXt:用于存储文本信息,比如作者、版权等。
- gAMA:用于定义图像的伽马值。
- tIME:用于记录图像的修改时间。
小结:
- IHDR 是 PNG 文件的头部数据块,定义了图像的基本信息。
- IDAT 是存储图像压缩数据的主要部分,通常会有多个 IDAT 块。
- IEND 是结束块,标志着 PNG 文件的结束。
所以,IHDR 和 IDAT 都是 PNG 图片的重要组成部分,IHDR 提供基本信息,而 IDAT 主要包含压缩后的图像数据。
所以这里我们重新使用010打开1.png,就会发现原本IDAT的位置被CTF2/CTF1所占据了!
那这里我们肯定是要将CTF2/CTF1替换为IDAT,所以这里我们直接将IDAT进行Hex编码进行最后进行插入!
得到:49 44 41 54
进行替换
最后Ctrl+s进行保存,打开图片:
发现打开是可以打开了,但是奇怪的是什么也没有,如果有的师傅靠自己做到这里,其实已经很好了,因为后面这一步有点考验脑洞了,为什么这样说呢?如果在修改IDAT之前有观察仔细的师傅会发现他是CTF2在前CTF1在后,那这能代表什么嘛?其实就是变相的在告诉你:我chunk数据块弄反了,你要改回来!
那如果这里实在想不到呢?想不到就出不来呗~
那这里我们可以直接新建一个十六进制文件,将文件头部(chunk[0])先复制过去:
得到:
将chunl[2]复制过去:
得到:
接着再将chunl[1]复制过去:
最后再将图片的尾部一一进行复制粘贴补全即可,Ctrl+s进行保存2.png,打开2.png即可发现:
最后得出一张图片,一眼看过去就感觉宽高有一些问题,当然如果不确定我们可以直接丢进工具:随波逐流中进行分析一下,或者kali,它们都是可以自动校验png图片的CRC:
这里我是直接丢进随波逐流中(当然也可以自己手动修改一下宽高):
最后它会直接帮你修复原本的png图片宽高,打开即可发现flag:
至此;
flag{d01adf92-f7a8-7fc6-c89f-0e6cf6f68e6a}
拓展
Detect File Type简介
在 CyberChef 工具中,Detect File Type 是用来自动检测输入文件或数据的类型的操作。它通过分析输入的二进制数据或文本,识别出该数据的格式或文件类型。
工作原理:
- 文件头检测:它会首先分析文件的头部,查找已知文件类型的标识(魔数)。
- 模式匹配:通过匹配已知文件结构的特征,判断文件的格式。
- 内容分析:有些情况下,它可能会分析文件的整体内容特征,比如文本编码或压缩格式。
示例:
- 如果输入一个 PNG 图片文件,CyberChef 的
Detect File Type
会识别出 "PNG image"。 - 如果输入一个 ZIP 压缩文件,它会显示 "ZIP archive"。
- 如果输入一段 zlib 压缩数据,它也可能检测出 "zlib compressed data"。
第47张图片
解题思路
附件下载,得到一张图片jpg图片:
我们使用010打开简单分析一下:
往下翻一些很快就发现一个可能是ROT47的编码
不是很了解的ROT47编码特征的师傅也没关系,这里我们正好来一起简单说说:
ROT47 的编码特征:
-
字符范围 :ROT47 对应的字符集是 33-126 的 ASCII 字符,包含可打印的符号、数字、字母和一些标点符号,总共有 94 个字符。
- 例如,常见的字母 (
A-Z
,a-z
)、数字 (0-9
)、标点符号(如!
,@
,#
,&
,*
)等都在此范围内。
- 例如,常见的字母 (
-
字符旋转 :每个字符通过向右"旋转"47个位置来编码。如果超出126,就从33重新开始。这意味着编码和解码是对称的,即同一个函数可以用于编码和解码。
-
对称加密:类似于 ROT13,ROT47 的编码和解码方式是相同的,因此加密一次后,再加密一次就会还原成原始文本。
例子:
A
(ASCII 65)通过 ROT47 编码后变成r
(ASCII 114)。!
(ASCII 33)通过 ROT47 编码后变成P
(ASCII 80)。HELLO
编码后会变成w6==@
.
那从7=28Lf6f63347\7c7d\67gb\6dc7\a7b6g3g4b5ad编码中哪里能看出是ROT47呢?
- 字符范围:
- 字符串中的字符包括 数字 (如
7
,2
,6
)、字母 (如L
,f
,g
,b
)以及 符号 (如=
,\
,a
,\7c7d
等),这些字符都在 ASCII 33 到 126 之间,这是 ROT47 处理的字符范围,因此符合 ROT47 的字符集要求。
- 字符混淆:
- 由于 ROT47 是对字符进行位移(47个位置)的替换编码,该字符串是由混合的字母、数字、符号构成的,这是 ROT47 加密后的典型表现。正常文本被 ROT47 编码后,会出现类似这种"乱码"样的形式。
- 非对称性内容:
- ROT47 编码后字符会出现符号、字母和数字交错的情况。这是由于 ROT47 对可打印字符范围内的所有字符(包括字母、符号、数字)进行统一的位移,导致字符分布看起来无规律。
- 可解码还原:
- 如果这个字符串是经过 ROT47 编码的,它可以通过再次应用 ROT47 进行解码,还原成原始的明文内容。由于 ROT47 的加密和解密是对称的,同样的函数可以解码出明文。
最后其实如果实在不明白的还有一点就是,这个题目的名称也可以看出一点,当然如果有脑洞的话是可以想出的,毕竟题目名都叫:第47张图片
或者直接将整张文件拖进去进行ROT47解码也是可以发现的:
至此;
flag{7e7ebbcf-f4f5-ef83-e54f-2f3e8b8c3d25}
重要的文件
解题思路
暂无
三、WEB
推荐(baozongwi师傅的):
四、CRYPTO
暂无,附件已打包完毕,可自取
五、REVERSE
暂无,附件已打包完毕,可自取