一次网络谜题的解谜记录
2023-05-01 13:10:38

引子

最近在Lainchan上看到这样一个帖子,OP发言如下:

Hello, I’ve recently stumbled upon this puzzle, that apparently dates back to 2018 (I know I need to lurk moar). Has any lainon solved it before? I’ve been stuck on the penultimate step 9 for 14 hours now.

>hsvvrp.zjsvzlsfo.paola.lluayhjlp..pzy.bolyl.

下面陆续有人留言,最终指向了这样一个网址:

https://desuarchive.org/g/thread/66074121/#66091837

哦,原来是4chan上一位用户发布的网络谜题!

那就来试一试解谜吧。

第一阶段

以前在密码吧学到,对于一个短文本的加密,通常应用两种方式:凯撒密码、栅栏算法。

凯撒密码

所谓凯撒密码,就是将字母在字母表中进行偏移,比如通常的字母表第一个字母是A,应用凯撒密码,我们可以把第一个字母设置为C。根据这样的一个对应关系对文本进行加密,比如说单词apple,每个单词往后移位,就可以是bqqmf

栅栏密码

将想要加密的字符串从上到下,从左到右写成多行。按行读取就得到了密文。

比如说单词apple,可以写成:

APE

PL

密文就是APEPL

除了这两种方法,也可以用一些图形对字母进行加密,比如卢恩符文、猪圈密码等。

回到现在的解谜过程。

第一阶段密文是:

hsvvrp.zjsvzlsfo.paola.lluayhjlp..pzy.bolyl.

链接在这里:点击这里

首先应用栅栏密码,没什么收获。

然后应用凯撒密码解码方式,得到一种可能的明文:

alooki.scloselyh.ithet.eentracei..isr.uhere.

为什么可能?因为我看见了closely这个单词。似乎每组的第一个字母和最后一个字母是后加上去的。

每组的首字母、尾字母连接起来就是:

aishitei.rue

日语里的我爱你?

但是这个网站打不开,反复尝试得到链接:

aishitei.ru

第二阶段

OK。我们来到了一个网页。按下F12检查元素。

网页里有段注释:

—- You’re off to a good start. Now look up.
—- Or maybe it was down?
—- Try asking the girl, Lain, for help.
—- She should be around here somewhere.

Lain,是番剧《玲音的系列试验》的女主角。我的博客头像就是Lain。

幻发现,每次刷新网页,网页中的图片都会改变,或许能通过不断刷新,当图片变为Lain时,就能解谜成功?

然而刷新了四五十次也没刷出来……

那么找找别的线索吧。

发现在网页底部有几个按钮,通过调查发现,这个网站似乎是某人的私人网盘,在FAQ中有这样一句话:

Can I always use the same waifu mascot?

Find the number for the mascot you like and append, without quotes, ?waifu=*##* to the URL. For example, Yuno is ?waifu=1.

OK。

当网址为这个时,所谓的mascot变成了Lain的样子。

下载这个mascot

第三阶段

So far so good!

我曾经在业余安全漫谈(三):密码、存储、信息传输安全中提到过一个查看图片元数据的网站。在这个网站上处理图片,最终提取到了这样的文字:

Lavc51.28.0

you’re on the right track..kcart thgir eht no er’ouy
the wired is calling for you..ouy rof gnillca si deriw eht
can you hear it yet??tey ti raeh uoy nacRIFF

you’re on the right track..kcart thgir eht no er’ouy
the wired is calling for you..ouy rof gnillca si deriw eht
can you hear it yet??tey ti raeh uoy nac
track_44.wavvaw.44_kcart

Btw,这个图片中有几个醒目的大字:

Play Track 44

这和幻正在汉化的游戏(英语太差了,汉化已经鸽了好久!)有关。曾经有一款古早的、和玲音有关的PSX游戏,它由许许多多的视频片段组成,您可以通过这个网站体验一下:lainTSX

或者您可以在这收听Track 44,点击这里!

电子舞曲。

但是有什么用呢?你总不可能回到过去,和作曲人商量好,在这段曲子里加密一段信息吧。

……

幻没了任何思路。

直到幻突然想到了隐写术。

隐写术与不断试错

我在业余安全漫谈(三):密码、存储、信息传输安全里提到了隐写术的相关工具。

那么就把常用的工具都用上去吧。

终端输入:

1
outguess -r mascot_19.jpg track_44.wav

成功提取该文件。但是没法播放。

直接将图片改为.wav格式也不行。

试过了SteghideStegsolve等工具,都不行。

而使用foremost工具,则能提取出音频文件。

1
foremost -i mascot_19.jpg

最终得到一个包含摩尔斯电码的音频文件。

懒得自己听了,直接用在线工具解码。

工具网站在这里:https://morsecode.world/

得到结果如下:

C A N Y O U H E A R M E C A N Y O U H E A R M E L I S T E N C L O S E L Y L I S T E N C L O S E L Y D A N G E R D A N G E R R U N N A D Y A N A Y D O T M E F I N D M E T H E R E

弄好看点是这样的:

Can you hear me? Can you hear me? Listen closely. Listen CLosely. Danger,danger,run! NadyaNay.me Find me there.

第四阶段

访问nadyanay.me。发现有几个按钮。里面的内容分别如下:

Find Me

所谓Nadya的身份信息,和一个PGP加密的信息。

Anime Recs

动漫推荐。老二次元了。

Music Recs

音乐推荐。老二次元了。

CTF

虽然自己没打过CTF,但上面所应用的加密、解密工具的确是CTFer常用的。

还有一点内容:

There are ten steps to escape The Wired.
Number of people who have escaped: 4 Anonymous Users
Date of last escape: 16/03/2023

就四个人成功解密了。

哈哈,十步。怎么弄算一步呢?

Not a Blog

一页博客。


嗯……我们先根据N(我下面会把设置这个谜题的人Nadya称为N)的公钥,把PGP讯息破解掉。或许会有用。

GPG咋用来着……?

不管了,经过解密最后的讯息如下:

I am Nadya at Neocities. I claim ownership of all accounts listed on this page.

好的。没啥用。

找找找~主页的HTML代码里有这样一条十六进制注释:

6e616479616e61792e6d652f77697265642e747874

转成二进制、十进制也没啥用。

转成ASCII呢?

结果如下:

nadyanay.me/wired.txt

哈哈!

第五(七)阶段

下载这个wired.txt。

发现最后一大串字符,但是文件最后俩字符是等号。

经过我在密码吧的多年潜水经验……这肯定是Base64!

然后解码,就乱码了。哈哈,打脸来的如此突然。

别气馁!把所有换行符删掉!!!!

由于笔者不是很会使用sed命令,写了个小小Java程序来实现这个功能(

解码之后输出结果还是乱码???

那么就把里面可读的字符提取出来吧。然而这么做也毫无作用。

因为部分结果如下:

itbmzemicijscdqsbjzbvlodfadyojpvtbotzenpycjlzxtkclkghdsororxtztljdfwgfxccukunxtknxjzjimznyfstfgdrekruvtxreglkmgvkvehsfznilmlcijoewdjuvbfnyhlxkskvqpsqoofqkmkxmhzsaeeuopqkbkeoxosobupdpnxpxvjavqxwtbspaylctqujmwbhwxxcbdvvhqcqohwejwruvjtrzhdfolusurvmtsigzlxxrwxvzgjfifizuqjpohkqxdjqvppalrvbmookgwstdmpffiwaszdosbmmsikpepozgbpwdwpoqiihamukizliarquyxznoeeuuxtbssybkjimshkmjpvircyfkoyvuthbzxzieqisudwmmgpfruqqxqbblkgdiheqbvqplvavmdxhndffklvcepujkiaeiaoclomekvgskavwmjxjvoffvcqdhmyifeyfoccayrkunwuhxxqszvagxtqyribrftzgrzyzpowfcwmkmnqdqnurwbdxrfzkchujfxyhwgvrbtivlcyrytrugjfqlyxlmyqxxptitybnnzokdwlfewckcpzaofvxmbnhtlttlodwhwiwhidpubpdbczglwnvybjbnjkgjmgjtmyjmjdupxbqatughonuhbftpmlgqokmfbhgnbtofrpuuhhyysczchbinzgbxzwylesiozgzaxoqnpqydswekzemqwuaxtwxgcspuqifuecwohvhzaxqixqdzctkcfmjvryxsimxvfqowxhujovlvuycshmhsedjrflgiwyroqiamcjufaslaiexlgzemkeofgmhwhdaoibfffpmrooprfieakcdamymmuefum

谁会在一堆字母之间掺杂无用讯息,然后加密呢?

直到……当我在查看wired.txt的时候,突然在一片小写字母中看到了大写的NEED。如果……这不是Base64,而只是将明文隐藏起来了呢?

使用Java提取大写字母。

代码如下:

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
27
import java.io.*;

class rmvNum {
public static void main(String[] args) throws FileNotFoundException, IOException {
OutputStream os = new FileOutputStream("./data.list");
StringBuilder sb = new StringBuilder();
try {
BufferedReader br = new BufferedReader(new FileReader("~/Downloads/wired.txt"));
String line = br.readLine();
while(line != null) {
for (int i = 0; i < line.length(); i++) {
if(line.charAt(i) <= 'Z' && line.charAt(i) >= 'A') {
sb.append("");
}
else {
sb.append(line.charAt(i));
}
}
os.write(sb.toString().getBytes());
sb.setLength(0);
line = br.readLine();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}

得到:

INOWENEEDYOURHELPWHATDOESITWANTTHEENTRANCECANBEFOUNDKEEPLOOKINGPROCEEDTOSTEPEIGHTTXT

格式化:

INO(I know?) WE NEED YOUR HELP. WHAT DOES IT WANT? THE ENTRANCE CAN BE FOUND. KEEP LOOKING! PROCEED TO STEP EIGHT.TXT

第八阶段

https://nadyanay.me/eight.txt里面什么也没有……

断句错了!

https://nadyanay.me/stepeight.txt,下一步的提示在这里。

BLP KLPUE PX
HYQTLMY FL FWY HSCYE
XWW FWYB TJU WYJC BLP
AL ZJTO FL FWY ASCQX
QJSU HJUFX BLP FL HJFTW
LMUSVCYXYUTY MOR
FWYU CYJE
LMUSVCYXYUTY LMUSVCYXYUTY

这次凯撒密码不好用了。应用栅栏密码也没什么用。

去密码吧找找提示……试了很多密码都没有用。

最终选择了一个很不优雅的方式-暴力破解。

字频统计

如您所知,英文单词中,每个单词出现的频率都是不一样的。根据这个密文,统计字母出现的频率,根据英语中字母常见的出现频率进行猜测。

Y-18 L-12 U-11 F-9 W-8 X-7 T-7 C-7 J-7 S-6 M-5 P-5 B-4 H-4 E-3 Q-3 V-3 A-2 O-2 K-1 R-1 Z-1

Y出现频率最多,将Y换成E。

FL出现次数很多,盲猜是to、on、in、of之中的一个。

BLP出现次数也很多,且出现在开头,盲猜为You。

……

乱猜。

之后可以大概修改为这样,替换得到的字母为小写,没猜出来的字母为大写:

you found us
welcome to the wired
sh they can hear you
go back to the girls
lain wants you to watch
omnipresence mkR
then read
omnipresence omnipresence

大概差不多了,所以N让我们回到女孩那里,或许是aishitei.ru?

至于mkR什么,盲猜是文件名,mkv?

然而https://aishitei.ru/omnipresence.mkv并不是一个有效的链接。我从mka试到mkz,都不好使。

第九阶段

那就用不优雅的方法吧。生成aishitei.ru和nadyanay.me网站的sitemap,看看哪里有我们想要的文件。

我使用dirsearch工具。

不断尝试,发现了以下两个文件:

https://aishitei.ru/images/mascots/omnipresence.mkv

https://aishitei.ru/images/mascots/omnipresence.omnipresence

Finally!最后一步啦!

mkv文件是玲音的OP,由Boa乐队演唱的Duvet。

至于另一个文件,我还没有思路。

先看看里面是什么吧:

1
cat omnipresence.omnipresence

得到一系列:

O|X|X
X| |O
O|O|O
O|X|X
X| |O
O|X|O
O|X|X
O| |O
X|O|X
O|X|X
X| |O
O|X|X
O|X|X

中间隔开了,会不会是四个一组的二进制数?

如果O为1,X为0,经过上面的步骤,先将这个二进制数转化成十六进制,再转换成ASCII,如果不行就让O为0,X为1.

前者输出乱码。

后者输出:

present day
present time
how does it feel
to have entered the wired?
this is the final step
you must escape

那么这个文件只是告诉我们,这是最后一步了。关键还是在视频中。

将音频从视频中分离开来,使用deepsound解码,得到的输出和上面一样。

失望……

最终阶段

毫无线索。

回看Lainchan和4chan的归档,发现了几个提示:

  1. 不要将这个视频当作视频看待,要跳脱出这个思维怪圈。
  2. 使用hexdump工具。多看几行,或许能发现规律。
  3. N提到,没有任何东西是受密码保护的。

在网上搜索到别人的解谜过程,前几步和我的解法差不多,但是最后一步,作者只提到了:

Hint: this step has to do with endianness.

我目前没有解出这个谜题,我尝试过以下方法:

  1. 将之转换为大端法表示,使用foremoststeghidestegsolveroutguess等工具都没有什么进展。
  2. 使用Audacity查看音频波形、频谱,没有任何发现。
  3. 使用hexdump查看十六进制码,依旧没有任何发现。
  4. 将之转换为大端法表示,将其中的数字、大写字母、小写字母、全部字母、全部字母和数字分别单独提取出来仍没有任何发现。应用解密软件也没有收获。

是的,这些方法都不优雅,也不合理。

目前幻没有任何思路,想到再更。或许解谜需要一些CTF的相关知识?

更新:你管这叫CTF?

于是乎,我在Lainchan上看到了一个新的文章:点击这里

大意就是说,当下的时间就是答案,然而,根据不同的时区,有不同的时间值。所以,你要应用穷举法猜出N所在的时区,然后转换时间,将答案发给他。

我懒得去用什么穷举法了……

烂尾啊。