JetBrains 20 周年彩蛋第一弹

暨我的博客重新开坑之际,JetBrains 家也开始了他们 20 周年庆而准备的彩蛋,在 Twitter 上邀请大家来参加他们家的在线解谜游戏。玩家将跟随着推文和他们官网的线索,一步一步的得到最后的奖励,也就是 3 个月的全家桶使用期限。

每一个谜题都不是太难,所以各位看官也可以跟随我一步步得到最后的奖励,当然也可以直接翻到底部拿走最后的奖励。

注:目前第一个问题的领奖时间已经过去了。。

首先关注了 JetBrains 的同学们应该也注意到了他们 3 月 9 日在 Twitter 发布的一条推文:

JetBrains Twitter

很明显这是一串 16 进制数列,每个数不超过 0xff,容易猜到是 ASCII 码,利用 Node 转一下则会出现:

1
2
Buffer.from("48 61 76 65 20 79 6f 75 20 73 65 65 6e 20 74 68 65 20 73 6f 75 72 63 65 20 63 6f 64 65 20 6f 66 20 74 68 65 20 4a 65 74 42 72 61 69 6e 73 20 77 65 62 73 69 74 65 3f".split(' ').map(i => Number(`0x${i}`))).toString()
// 'Have you seen the source code of the JetBrains website?'

这就告诉我们要到 JetBrains 官网查看源代码:

JetBrains Website source code

在 396 行附近有这么一段话说要在他们的产品页面找到一个“开玩笑”的产品,同时呢也提供一个密钥说之后要利用这个密钥来解谜,那我们先来看看产品页到底有什么:

JK

这个就很好找了,JK ?哈哈哈哈,是说 Joke 吧?点开看看!

500-5000

嗷原来给出了个短链接,然后呢,这个短链接后面三个 # 代表三个数字,这三个数字呢就是 500 - 5000 之间有多少个素数。有多少个呢,我就不说了,写个代码很容易就解出来了。接下来我们看看下一步,打开这个短链接我们可以看到这个图:

MPS-31816

这个图上有一串类似 ID 的东西:MPS-31816,MPS 实际上是 JetBrains 家的一款用于开发“领域特定语言”的产品,但是后面这串数字又是什么意思?

大家应该也看到上面那个 YT 的图标,这也是一款产品,用来追踪软件缺陷、跟踪软件开发、协同工作的工具,那么就不难猜出来,这是一个 issue 的代号,我们来 cheat 一下,直接把这串东西丢到 Google 去,点进 YT 之后:

YT

哇,看到这一串当时就有些懵逼,这都是啥?

回想一下,我们不是还有个密钥没有用到嘛?很有可能就是用来解这个的,毕竟有了密钥,怎么可能没有密文!

好,那我们打开利器 PhpStrom,开起我的 Scratches,随手就撸了一大串代码。。。。

YT

好吧其实也费了我一个多小时,首先我的猜想,看到 # 这种很有可能是空格。看看密钥那个 == 号,猜测是一个密码本,但是这个密码本呢少了很多字符,仔细观察一下 ASCII,结合上部分的难易程度,不难猜测可能是移位密码。

于是第一版我写了一个移位密码,从 1 到 26 将所有可能都输出了一遍,最后得出 23 是有可能的匹配,但是仍然有些不可辨认的地方,我就得出来 -3 并且结合密钥做了映射,得出了最后的结果。

接下来就是去那个链接输入内容并领取 3 个月的免费试用啦!

总结:其实每个部分都不是很难,但是也考察了同学们对一些信息的敏感程度,典型的例如 16 位数列、移位密码等。