跳至正文

蓝鸡解谜2022 Writeup

蓝鸡生快!

简介

原贴链接:https://www.mcbbs.net/thread-1302159-1-1.html

主办方提供的信息:

  • 解密思路方面,很多都和我经常接触的游戏、工具、音乐等等有关。
  • 最终密码为一个12位单词,纯字母。
  • 因为上次的有点难,今年稍微降低了一点难度,也顺便提高点奖励,希望各位都来试试。

所以很明显,我们需要到https://pan.baidu.com/s/1e6l-390gRCZ6mNfQHutIpw,以提取码rs9o下载文件。最外层压缩包的密码是417a7a7572726f。

dec2022.zip下载(SHA-256:ab36e5fdef656524c7f05c72a45ec9eef25715af8f84af44fecd27c195e29d42)

文件结构

dec2022
| readme
| vault
| world

将readme重命名为readme.txt,打开,获得以下提示:

The vault holds the ultimate code to success.
A code of 32 lowercase letters is needed.
To find the key, explore the world.

将vault重命名为readme.zip,打开,发现需要解压密码。其中包含的code.txt大小正好为12字节,即最终密码。

将world重命名为world.zip,解压缩,目录结构如下:

world

很明显这是一个Minecraft存档,将world文件夹放进saves文件夹并启动Minecraft,发现存档适用于1.16.5版本。

我们知道,在存档中放置一个资源包压缩包可以让存档强制加载它,因此我们把资源包也解压一下。

游戏解谜

进入存档,发现我们处于极限模式,出生后即从Y=66开始向下掉入虚空,如果什么都不做,那么4.89秒后我们将死在极限模式,存档被锁定为旁观模式,永远无法解开这个存档之迷了

所以我们首先要回到创造模式:点击ESC,点击“对局域网开放”,然后开启作弊。然后复制“/gamemode creative”,点击“创建局域网世界”,打开聊天框,粘贴命令回车,然后按两下空格悬停,再向上起飞,这下我们才安全了。

接下来可以看到,存档中有个61*61*61的正方体,最外侧是一格厚的玻璃,内部是石头和圆石包裹的正方体。

正方体

个人认为这里面那么大空间肯定能藏一些东西,因此打算把正方体剥开来。原版中的fill命令可以实现这一点,不过有区域大小限制,因此我分成8次进行操作:

fill -30 70 -30 0 100 0 minecraft:air replace minecraft:glass
fill 30 70 -30 0 100 0 minecraft:air replace minecraft:glass
fill -30 70 30 0 100 0 minecraft:air replace minecraft:glass
fill 30 70 30 0 100 0 minecraft:air replace minecraft:glass
fill -30 100 -30 0 130 0 minecraft:air replace minecraft:glass
fill 30 100 -30 0 130 0 minecraft:air replace minecraft:glass
fill -30 100 30 0 130 0 minecraft:air replace minecraft:glass
fill 30 100 30 0 130 0 minecraft:air replace minecraft:glass

随后把glass换成cobblestone和stone,就把它剥干净了。接着可以看到有许多金块和一个箱子。(箱子在旁观者模式中就可以看到)打开箱子,其中有一本书,名字是w4。

资源包里的paper.png很奇怪,打开来是透明图片,在创造模式物品栏里也可以看到纸是透明无纹理的。它有啥作用呢?其实只要打开物品栏,就会发现人物的头上有一个透明的物品存在(就是纸),它的名字是w3,并有一段描述。另外我们的快捷栏中还有一根羽毛,名字是w2。

w3

data文件夹里有两张地图,编号分别是25和208。用命令把它们叫出来:/give @p filled_map{map:地图编号}

左图为map#25,右图为map#208

数独地图很好办,找一个在线解数独的网站一分钟就可以搞定。接着我们按照图中的箭头把这些数字找出来,分别是2164752495134376。

填字地图中的W1到W8告诉我们要找8个W,刚刚我们已经拿到了三个W的线索,现在解一下它们:

w2描述:蓝鸡直播间使用的人设名罗马音。轻松查到是“藍野ひな”,搜一个罗马音转换网站得到“ainohina”。
w3描述:游戏PotionCraft中的一种草药名称,同时也是一个沙盒游戏的名称。轻松查到是“terraria”。
箱子里w4的书,内容是一页提示和一页乱码:

这里的乱码最后一行”莉頑律繧る岑“勉强可以手打出来,扔进搜索引擎,发现搜索结果基本都是字符集错误导致的乱码。

第二条搜索结果是”2006蟷エ7譛 31譌“,盲猜是”2006年7月31日“的意思(日文中也是这样写)。
接下来只需要猜测是何种编码错误。将”蟷エ“作为输入,经过某种操作就可以变成”年“。

使用CyberChef工具进行尝试,发现将其用Japanese (Mac)进行Encode,再用UTF-8 Decode,就可以得到正确结果。
”莉頑律繧る岑“可以转换成”今日も雨“,但这一句话没法搜歌,剩下的乱码怎么办呢……

存档解谜

要查看游戏数据,当然得用NBTExplorer。根据箱子所在位置(4,93,12),在region–r.0.0.mca–Chunk[0,0]–Level–TileEntities里,可以复制乱码原文。将其转换后得到歌词。

接下来就能轻松查到歌名是《切れる踏切と》,改编自故事《きさらぎ駅》,女主人公叫做《はすみ》,罗马音”wasumi“。

当然,之前提到的头部放了个透明的纸,也可以在level.dat–Data–Player–Inventory里发现踪迹。你也可以直接在NBTExplorer里找箱子实体的位置,还可以直接修改游戏模式。

你问我剩下的W去哪找?还有一大堆文件没翻过呢~

session.lock里是个雪人☃,capabilities.dat和raids.dat里没有线索。

然后看到存档使用了一个数据包。打开pack.mcmeta,提示”w1 = 自然历程中无生命物质如何演变为有机分子乃至生命的学说。“,查得答案”abiogenesis“。

数据包里的两个函数,w.function里是一串base64字符,解码后发现是”PNG“开头的乱码,得知是base64储存的图片,在前面加上”data:image/png;base64,“放进地址栏就可以解码,得到一个二维码图像,扫码得到”orion“。函数的名字是w,而5个字母的空只有一个,那这肯定就是w6了。

x.mcfuntion里的speak by name肯定是指locusazzurro这个名字,排除不需要密钥的加密方式,容易想到是维吉尼亚加密,解密得到”the first eight digits are the number of golden blocks as roman numeral in lowercase“。

回到存档数金块。把上面那8条命令最后换成gold_block就行。(蓝鸡写错方块名)将8次操作的方块数加起来得到金块数量339个,用罗马字母表示是CCCXXXIX。得到密码前8位”cccxxxix“。

资源包解谜

接下来只剩资源包了。pack.mcmeta得到”w7: The rival of the Amarr Empire in EvE Online“,查找得知是”minmatar“。

sounds.json没什么特别的,th_cd.json里提示”w5: 一种由结核分枝杆菌感染引起的呼吸系统传染病“,查找得知是肺结核”phthisis“。

纹理文件夹里有个文件名是”_“的东西,打开来是一堆不明意义的符号。

显然这是jsfuck,直接粘贴到浏览器控制台中就可以执行,得到w8为”icarus“。

至此我们集齐了8个单词。这8个单词填进去怎么用呢?这也困扰了我一会。

发现图中圈出了第二和第一个字母,而数独中的数字序列正好是21开头,于是按照数列,以此从W1到W8中拿出字母,得到9-24位的密码”baruinirshtshiashcjemyxa“。

密码9-24位

pack.png是一个阴阳图标,稍加搜索发现是博丽灵梦阴阳玉,暗示了蓝鸡喜欢的东方project系列。和上一次的谜题一样,这张png里藏了个压缩包,里面是key_delta.txt。随便用Binwalk什么的分离出来就行。

最后剩下4个ogg文件了。查阅sounds.json和th_cd.json发现他们有对应提示。

这是啥?我也不知道。打开e1.ogg,听出是一个音乐片段。e2.ogg和e3.ogg分别由两个音乐片段组成。

th10s5是啥?没搜出来。于是优化关键词,搜索”th10 东方project“,发现th10是Touhou Project第10部的意思。通过靠谱的thwiki.cc的搜索,发现s是Stage,ex是Extra,ph是Phantasm,b是Boss,分别指代作品不同章节。

点开章节音乐试听,发现e1.ogg中的片段正是th10东方风神录的第5章节音乐。其余同理。

那么让我们来听一听delta.ogg。啥,就10秒,怎么有好几首音乐?打开频谱没发现有什么信息,倒是发现10秒里有5个音乐片段,这咋找……

10秒5个片段

其中的第二和第四个片段,QQ音乐很给力,只听2秒就给出了正确曲目,th12s2b的《请注意万年备用伞 》和th16s4的《幻想的白色旅人》。剩下的三个片段,时间实在太短,拉长粘贴重放也识别不出orz。

寄!

不过作者说:”本次允许一定程度的穷举计算,但是希望各位可以用正常的方式破解。“看来暴力破解是有效的。那么只要把所有曲目列出来就行了吧……

稍微写了个脚本,生成字典。

num=['th07phb','th07ph'] #两个有ph的章节,作为特例拿出来
#游戏代码放在th,章节代码放在s。其中th09没有符合已给格式的章节名称
th=['th06','th07','th08','th10','th11','th12','th13','th14','th15','th16','th17','th18']
s=['s1','s2','s3','s4','s5','s6','s1b','s2b','s3b','s4b','s5b','s6b','ex','exb']
for pre in th:
	for suf in s:
		num.append(pre+suf)
print(num)

#num是所有可能出现的序号
out=[]
for pre in num:
	for suf in num:
		for mid in s:
			out.append(pre+'-th12s2b-th06'+mid+'-th16s4-'+suf)

#out是完整的五段字典,其中第三段只枚举了th06的章节
f = open("dic.txt", "w")
f.write(str(out))
f.close()

一个东方厨朋友似乎听出了第三段音乐,但测试下来不对。发现th06的音乐似乎都有片段中的那几个音节,实在辨认不出,所以简单枚举一下,当然把第三段枚举的范围适当扩大也行。

生成完字典,用Ziperello跑一下,得到压缩包密码”th17s6b-th12s2b-th06ex-th16s4-th13s4“,通过越共测试得到vault密码最后8位”hcjemyxa“。

于是vault压缩包的密码是”cccxxxixbaruinirshtshiashcjemyxa“,得到的最终密码是”chronostasis“。

后记

个人认为这次解谜难度还是较为低的,对新手比较友好,误导信息少,提示明显。

不过我还是有些地方卡住了,比如数独的16个数字和8个单词的关系,是躺在床上才想起来的,然后睡不着起来解完再写完writeup。当然东方那部分对于一点没接触过的人来说还是有点难度的,查了好久……

当然还有一些没有用到的疑似线索,不过数量不算多了:

出生位置:-3,66,1
箱子位置:4,93,12
游戏刻数:87776
袭击时间:87303
地图种子:1145141919810
玩家UUID:D21AF20A4D4CCC338906BDBA8F595A80

另外,枚举曲目时打算同时枚举三个的,但Ziperello好像受不住200M大的字典……

最后,再次祝蓝鸡19岁生日快乐!

发表评论