1. 初步分析与信息获取
首先,我们拿到了一个名为 082.zip
的压缩文件。通过 7z
命令解压后,得到一个 082.bin
文件。
┌──(kali㉿kali)-[/mnt/hgfs/gx/x/tmp]
└─$ 7z x 082.zip -o82
...
Everything is Ok
使用 file
和 ls -al
查看文件信息,确认它是一个大小仅为 61 字节的二进制数据文件。
┌──(kali㉿kali)-[/mnt/…/gx/x/tmp/82]
└─$ file 082.bin
082.bin: data
┌──(kali㉿kali)-[/mnt/…/gx/x/tmp/82]
└─$ ls -al
-rwxr-xr-x 1 kali kali 61 2024年 4月19日 082.bin
直接 cat
文件,可以看到一堆乱码,但其中夹杂着一些可识别的“花式”字符,并且能勉强看出 HMV{...}
的结构,这与题目提示相符。
题目提示:
8Universal 16Threads of 32Friendship. Flag format: HMV{...}
8Universal 加密后的数据以 UTF-8 编码呈现
┌──(kali㉿kali)-[/mnt/…/gx/x/tmp/82]
└─$ cat 082.bin
Ⓗ<�\��6{�w𝕠5ؠ��5ݾ��_𝙤5�'�_5��𝓕}
使用 xxd -p
得到文件的完整十六进制表示,这是我们后续分析的基础:
e292bd3cd85cddff367b0000000001d477f09d95a035d8a0ded835ddbeff
d501000000005ff09d99a435d827de005f35ff00000001d413f09d93957d
00
2. 核心突破:识别混合编码
这是解开谜题最关键的一步。我们将注意力集中在文件开头的 HMV
部分。通过在 CyberChef 等工具中反复尝试,我们发现它是由多种编码方式混合而成的:
- H: 由字节
e292bd
表示。这在 UTF-8 编码下,正好是带圈字母Ⓗ
。 - M: 由字节
3cd85cdd
表示。这在 UTF-16LE (小端序) 编码下,是带圈字母🅜
。 - V: 由字节
ff36
表示。这在 UTF-16BE (大端序) 编码下,是全角字母V
。
这个发现证实了题目提示 "8Universal 16Threads of 32Friendship"
的含义:Flag 中的字符被替换为了各种“花式”Unicode 字符,并且这些字符自身又分别使用了 UTF-8、UTF-16 甚至 UTF-32 进行了编码,最后拼接在一起。
3. 逐个击破:解码 Flag 内容
我们识别出 7b
是 {
的 ASCII 码,7d00
代表 }
。接下来,我们对花括号中间的核心数据进行逐个解码:
00000000 01d477f09d95a035d8a0ded835ddbeff d50100000000 5ff09d99a435d827de00 5f35ff00000001d413f09d9395
通过细致地手动分段和解码,我们拼凑出 Flag 的各个部分:
0001d477
-> UTF-32BE ->𝑷
(对应 'p')f09d95a0
-> UTF-8 ->𝕠
(对应 'o')35d8a0de
-> UTF-32LE ->w
d835ddbe
-> UTF-16BE ->𝗲
(对应 'e')ffd501
-> UTF-32LE ->𝗿
(对应 'r')5f
-> ASCII ->_
f09d99a4
-> UTF-8 ->𝙤
(对应 'o')f09d9395
-> UTF-8 ->𝓕
(对应 'f')5f
-> ASCII ->_
35ff
-> UTF-16LE ->U
(对应 'U')0001d413
-> UTF-32BE ->𝐓
(对应 't')f09d9395
-> UTF-8 ->𝓕
(对应 'f')
4. 结论
最终的 Flag 是:
HMV{power_of_Utf}