咸鱼人的⌈蓝鸡的绿宝石竞速解密活动⌋Writeup

蓝鸡的绿宝石竞速解密活动Writeup

前言

原帖地址:[【🔵🐔】【整个好活】黄金周的绿宝石竞速解密活动 💎🟢 ]](https://www.mcbbs.net/thread-1387760-1-1.html)

废话少说,开整~

题解过程

首先百度网盘加一串字符,可得压缩包地址:

1
https://pan.baidu.com/s/1x6GAdk6NHYbRj-5GlxoMhQ?pwd=4aiw 

F12检查元素,可以看到有0px大小的字符,得到压缩包密码,经过验证时正确的:

1
417a7a7572726f

解压压缩包后可以获得以下文件:

1
2
3
4
5
forsaken.relic.zip
message
readme.txt
recipe
scroll.jpg

首先打开readme.txt,内容如下:

1
2
欢迎挑战本次解密活动
找到32位小写字母与数字组成的密码,解锁隐藏的消息,然后提交吧!

和上次的活动一样,密码都是32位小写字母组成的密码。

正式开始。看一下scroll.jpg,可以看到里面有一些阿拉伯数字和罗马数字,以及一些奇怪且熟悉的形状,还有一个看不清楚的方格,方格旁边写着“PRS”。

数一下格子,9x9,这意思看来是要填充数字做数独,但是现有的数字完全不够,因此需要推测这些形状所代表的数字。除此之外,最上面一行有银河标准字体,直接找对照表可以发现是“ABCDEFGHI”顺序。

罗马数字很好解释,直接写出来就可以了。剩下三种颜色的字体分别是来自《塞尔达传说:旷野之息》的希卡族文字、来自《EVE: Online》的深渊三神裔字体,以及来自《Alice in Cradle》的文字。最后的文字在Sheep-Reamls的B站动态有提到。

以下是填充后的数独题面:

数独题面.png

获得这些信息后在网上找一个数独计算器,计算后发现有多解。因此疑点就转移到了那个看不清楚是什么东西的方格了。

此时将那个方格里1-9全部尝试,最后这里填写8才是唯一解,因此这个方块所代表的数字应该为8,同时获得箭头指向行的数字:

1
736812549

这是数独的答案:

数独答案.png

1
195436872736812549428957163257691384643578291819243657962384715374165928581729436

scroll.jpg以文本形式打开,可在头部发现密文:

1
CODE FRAG A - knxbsgfm

因此第一部分的密文为:

1
knxbsgfm

之后看一下message。分析后发现这个文件是音频文件,后缀名改为mp3之后可成功打开。内容是一段类似摩尔斯电码的声音和一些噪音。

上Audacity,将摩尔斯电码的部分切出来,顺便做一下声道分离,获得纯净的摩斯电码。

有了这个之后可以手写摩斯电码,或者直接在网上找摩斯电码音频翻译器,比如这个,可以获得左声道摩斯密码:

1
THE SECOND PART OF THE CODE IS HERE /*中间是噪音*/ BBFIADFICFGI

回头看一下左声道含有噪音的那段,打开频谱图,可以获得一串字符,根据上面暗示可得第二段密文:

1
f7wkve9a

频谱图.png

但是使用右声道的摩斯电码,却无法正常翻译出来——除了最后的一串数字。此时推测数字之前使用的编码标准应该不是摩斯电码,但是含有明显特征:每5个信号隔开一次,推测可能是将26字母通过二进制写入到每一个信号块中。Python写程序验证一下,发现所有信号块的值都小于25,因此写一个python程序将这个信号转换成字符串:

1
2
3
4
5
6
7
8
9
text = '-.--- ..... ..-.- -.-.- .-.-- --..- .-..- -.--. -.--. ..--- .-..- ..... ..-.. -.--. ..-.- .--.. ..-.. -..-- -.--. .-..- .-.-. -.--- .-..- ..--. ..-.. .-.-- --..- -.--. .-..- -.--. -.-.. ..... ..--- -.--. .-.-- --..- -.--. ..... .-..- ..--- .-..- ..--. -.-.- .--.. -.-.. .-.-- ..... ..-.- --..- -.--. .---- -..-. -.-.- -.--. -.-.. ..... ..-.. -..-. ...-- -.--- ..--. .-..- ..-.. .---. ..... ...-- ...-- -..-- -.--. .-.-- --..- -.--. ...-- -..-. .-.-. .-.-- ..--- -..-. .-..- .-.-- ..--. -.--- .-.-- --..- -.--. -.-.. ..--. -.-.- -.--.'

bits = text.split()

for i in bits:
i = i.replace('-','1')
i = i.replace('.','0')
#print(int(i,2))
print(chr(int(i,2)+97),end='')

得到的结果如下:

1
xafvlzjwwhjaewfmetwjkxjgelzwjwuahwlzwajhjgvmulafzwpsvwuaesdxgjeoaddtwlzwdsklhsjlgxlzwugvw

推测应该是凯撒密码,试验到解密18位或加密8位后信息有了暗示价值:

1
findthreeprimenumbersfromtherecipetheirproductinhexadecimalformwillbethelastpartofthecode

这段文字后面的数字如下:

1
231256469888

可以发现左右声道有12位意义不明的字符,左声道为字母,在A-I的范围中,因此推断应该和Scroll.jpg文件里的码表存在关系。

同时将Scroll.jpg文件的后缀改成zip,可以发现是一个经过加密的压缩包,文件名为gimel.txt,希伯来文的第三个字符,文件大小为8字节,应该包含重要的信息。

暴力破解后发现密码在9位之内的都错误,因此推测需要拿码表映射密文才能获得密码。经过码表的转换后上述两个密码都错误:

1
2
3
4
BBFIADFICFGI
332978296249(映射后的密码)
231256469888
FBEFGCHCIDDD(映射后的密码)

转换方向,看一下recipe文件。看文件头后发现是一个图片文件,打开后发现是《烹饪模拟器》的一个菜谱,香煎鸭排苹果。根据上面所说的三个质数相乘的十六进制就是密码,发现只有3个3,这里应该不正确——至少它不是8位。

recipe改成压缩包,发现可以直接解压,之后可以发现里面有20个shard_XX文件,按时间排序后发现所有的质数修改日期为9/26 18:36,其他的为9/26 18:41。

分析shard_02后发现这个文件是一个没有尾巴的压缩包,所以将所有质数的shard拼起来(随便写的python,可以简化):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
zip = open('Prime_001.zip','wb')

f1 = open('shard_02','rb')
a = f1.read()
zip.write(a)
f2 = open('shard_03','rb')
a = f2.read()
zip.write(a)
f3 = open('shard_05','rb')
a = f3.read()
zip.write(a)
f4 = open('shard_07','rb')
a = f4.read()
zip.write(a)
f5 = open('shard_11','rb')
a = f5.read()
zip.write(a)
f6 = open('shard_13','rb')
a = f6.read()
zip.write(a)
f7 = open('shard_17','rb')
a = f7.read()
zip.write(a)
f8 = open('shard_19','rb')
a = f8.read()
zip.write(a)

获得压缩包解压后发现一个二维码,文件名为rickroll.png,扫码后内容为BV1uT4y1P7CX,到B站搜索后发现确实是Never gonna give you up曲子。

分析其他文件,发现shard_14包含压缩包的文件头,所以将这个作为压缩包打开,发现里面有一个文件,文件名为IMG_2848.MOV,压缩前大小18.9M,现有的文件无法将之无损解压,同时该压缩包存在密码。现有的所有密码和推测密码尝试解压,全部以失败告终。

将该文件以文本形式打开,可以发现隐藏内容:

1
This recipe produces the intermediate product needed to reveal a hidden message, it needs to be further processed to function, consult the glyph scroll.  Ingredients. 114 ml water 99 g salt 122 g sugar 122 g carrot 121 g potato 109 ml milk 119 ml sour cream 105 ml oil 120 ml honey 97 g nether wart 110 g glowstone dust 102 g gold dust  Method. Put sugar into the mixing bowl. Put salt into the mixing bowl. Put water into the mixing bowl. Put oil into the mixing bowl.  Put honey into the mixing bowl. Put nether wart into the mixing bowl. Put glowstone dust into the mixing bowl. Put gold dust into the mixing bowl. Put carrot into the mixing bowl.  Put potato into the mixing bowl. Put milk into the mixing bowl.  Put sour cream into the mixing bowl. Liquefy contents of the mixing bowl.  Pour contents of the mixing bowl into the baking dish.  Serves 1.

这才是真正的配方。找到两个质数:109和97。同时这段话告诉我们这个隐藏配方仅揭示了中间产物,还需要进一步进行处理,具体可以参考象形文字的卷轴(即scroll.jpg)。

另外的质数只有3,相乘后应该就是最后一部分密钥:

1
7be7

一些信息&花絮

message

左声道刚开始的音频,频域分析后峰值频率为213、282、330、432、550Hz。

上述音频从1.2秒开始,从29.5秒结束。

左声道包含噪声的音频从15.2秒开始,从30.5秒结束,第二段从63.7秒开始,从89.7秒结束。

左右声道的第二段摩尔斯电码从90.5秒时开始。

scroll.jpg

里面的数独居然是第一个解出来的谜题,但解出来的结果却未通过验证,非常打击士气。

recipe

咸鱼人看到压缩包里的rickroll.jpg,咸鱼人拿到了这张图片,咸鱼人拿手机扫描了这张二维码,咸鱼人将BV号复制进B站,咸鱼人成功地看到经典骗术,咸鱼人按时间排序倒序查看评论,咸鱼人没有发现任何线索!

隐藏的配方:蓝色只因的黑暗料理x1!

目前未知的信息

scroll.jpg

作为压缩包时其密码未知。

数独网格中非常模糊的图案、其旁边的绿色“PRS”字符意义不明。

recipe

非质数组成的文件作为压缩包合并后其密码未知。

message

左右声道的两个密码作用未知,经过直接填写、对照码表译码,甚至在此之上经过凯撒密码解密,用MP3Stego尝试解码获取密文,都无法成功读取另外两个压缩包或其他有效的信息。

总结

技不如人,甘拜下风。

水平一次比一次菜,就和某科的hackergames一样,三年每年的名次都下降,鸡哥的解密也是,第一次(好像只花了不到两天还是三天?忘记了)顺利解出来,除了降低难度的那道题——虽然自己有土球书,但不知道7z的密码可以是中文;第二次有一个车万题,这部分的密文就没拿到,甚至忘了用暴力破解;这次干脆一半的密文没拿到。

我还是回去整我的皮肤生成器了吧。


咸鱼人的⌈蓝鸡的绿宝石竞速解密活动⌋Writeup
http://etwzero.github.io/2022/10/03/3rd-locusazzurro-ctf-writeup/
作者
Eric Zane
发布于
2022年10月3日
许可协议