题目描述

五十六个民族,五十六支花,五十六个兄弟姐妹是一家。现如今,民族团结的思想早已深入人心,而维吾尔族又是中华民族的重要组成部分,解决本题需要各位解题人知晓维吾尔族同胞的说话方式。

题目分析

下载附件,得到一个名为"古力娜扎"的文件。

由于Mac上没有010Editor(不是么有,是要付费呀!),我就经验分析了。

使用:https://the-x.cn/encodings/Hex.aspx

得出这玩意是个PNG图片。

Mac 和Linux是有CRC效验的,所以这题应该是宽高的问题。

解题1

得到PNG宽高,修复宽高。

我们观察发现,这下面是一个被翻转的data matrix,接下来我们还要识别,这些Python都可以完成。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import cv2
import pylibdmtx.pylibdmtx as dmtx

img = cv2.imread("timu.png")

flipped_img = cv2.flip(img, 1) # 翻转图片

cv2.imwrite("1.png", flipped_img)

img = cv2.imread("1.png") # 识别码

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
decoded_objects = dmtx.decode(gray)
flags = ""
for obj in decoded_objects:
flags+= obj.data.decode()

print(flags)

接着我们发现了一串反着的HTML实体编码

我们修改上面的代码,做出一把梭脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import cv2
import pylibdmtx.pylibdmtx as dmtx
from html.parser import HTMLParser
import html

img = cv2.imread("test.png")

flipped_img = cv2.flip(img, 1) # 翻转图片

cv2.imwrite("1.png", flipped_img)

img = cv2.imread("1.png") # 识别码

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
decoded_objects = dmtx.decode(gray)
flags = ""
for obj in decoded_objects:
flags+= obj.data.decode()

flag=flags[::-1]
print(html.unescape(flag)) # 解HTML实体编码

至此,我们就可以完整的做出这道题目并拿到FLAG了。

解题2

因为MacOS的某些库的问题,我们用Windows做了一遍:

发现是PNG文件,修改后缀为PNG

img

好像是宽高不对头,我们试试用前两天写的机器人功能进行爆破

然后用上面的脚本跑就行了。

备注

备注:本篇文章在比赛结束后进行解密,供大家查看。文章发布于5月3日,在比赛结束之前一直是以加密方式保存,没有进行泄露。解密日期:2023年05月29日。