JetBrains Quest (March 9, 2020) Write-Up

这篇文章是事先写好的,等到解谜到期后(“You have until the 15th of March at 12:00 CET to finish all the quests.”,也就是北京时间当日19:00)才放出的。总之我觉得,在结束前就到处发题解,大概就只能是破坏解谜气氛和便宜了黑产吧。

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

比较明显的十六进制的特征

看着很像是16进制表示的内容,尝试着转为ASCII字符。改行写Kotlin了,以后看到脚本长得跟你平时看见的不一样不要觉得奇怪…

import java.util.*

fun main() {
    val string = "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"
    val scanner = Scanner(string)
    while (scanner.hasNextInt(16)) {
        print(scanner.nextInt(16).toChar())
    }
}
输出的结果

得到输出:Have you seen the source code of the JetBrains website?

应该是一个提示。去看看官网的源码。访问JetBrains: Developer Tools for Professionals and Teams,然后Ctrl+U查看源代码(或者直接在网址前面打上view-source:)。比较长,于是尝试Ctrl+F搜索quest,发现了一段注释:

官网源代码中的注释,给出了hint

画个重点:

JetBrains has a lot of products, but there is one that looks like a joke on our Products page, you should start there… (hint: use Chrome Incognito mode)

产品页中有一个看起来像是个玩笑?提示用Chrome的无痕浏览。

其实还有一个更重要的重点:

It’s dangerous to go alone take this key: Good luck! == Jrrg#oxfn$

有一个奇怪的key。

先跳转产品页,也就是All Developer Tools and Products by JetBrains。3月12日的时候,直接访问相比Chrome的无痕浏览模式访问,会多出一个:

哈哈哈哈哈…很难笑欸
复制一个玩,当纪念吧。

点开康康:

仍然是hint

要求计算500到5000范围内的质数的数量。这个时候可能很多人会默默开始写脚本了,然而我选择WolframAlpha:

直接得到有574个质数

所以应该访问https://jb.gg/574。有一说一,这个域名挺难听的…被跳转到了https://www.jetbrains.com/help/pycharm/getting-help.html#quest

PyCharm的文档页

有用过YouTrack,或者是曾经发现JetBrains家的IDE有问题的人应该会知道这个编号的含义的。不知道的话,看上面的图标应该也能猜到要去看看这个产品是啥。到YouTrack的官网搜这个事件编号就可以了,甚至粗暴地Google一下也可以。所以就是访问JetBrains Quest : MPS-31816

有一串密文

考虑到之前给出的hint:Good luck! == Jrrg#oxfn$。能发现两个o都对应了r,应该只是进行了替换而已。好了,开工:

fun main() {
    val string = "Qlfh\$#Li#|rx#duh#uhdglqj#wklv#|rx#pxvw#kdyh#zrunhg#rxw#krz#wr#ghfu|sw#lw1#Wklv#lv#rxu#lvvxh#wudfnhu#ghvljqhg#iru#djloh#whdpv1#Lw#lv#iuhh#iru#xs#wr#6#xvhuv#lq#Forxg#dqg#iru#43#xvhuv#lq#Vwdqgdorqh/#vr#li#|rx#zdqw#wr#jlyh#lw#d#jr#lq#|rxu#whdp#wkhq#zh#wrwdoo|#uhfrpphqg#lw1#|rx#kdyh#ilqlvkhg#wkh#iluvw#Txhvw/#qrz#lw“v#wlph#wr#uhghhp#|rxu#iluvw#sul}h1#Wkh#frgh#iru#wkh#iluvw#txhvw#lv#‟WkhGulyhWrGhyhors†1#Jr#wr#wkh#Txhvw#Sdjh#dqg#xvh#wkh#frgh#wr#fodlp#|rxu#sul}h1#kwwsv=22zzz1mhweudlqv1frp2surpr2txhvw2"
    val stringBuilder = StringBuilder()
    string.forEach {
        stringBuilder.append(when (it) {
            'J' -> 'G'
            'r' -> 'o'
            'g' -> 'd'
            '#' -> ' '
            'o' -> 'l'
            'x' -> 'u'
            'f' -> 'c'
            'n' -> 'k'
            '$' -> '!'
            else -> it
        })
    }
    print(stringBuilder.toString())
}

得到的输出是这样的:

仍然是乱码

继续观察一下,结合ASCII表就发现,密文只是相对于明文右移了3位而已。那么可以尝试还原了:

fun main() {
    val string = "Qlfh\$#Li#|rx#duh#uhdglqj#wklv#|rx#pxvw#kdyh#zrunhg#rxw#krz#wr#ghfu|sw#lw1#Wklv#lv#rxu#lvvxh#wudfnhu#ghvljqhg#iru#djloh#whdpv1#Lw#lv#iuhh#iru#xs#wr#6#xvhuv#lq#Forxg#dqg#iru#43#xvhuv#lq#Vwdqgdorqh/#vr#li#|rx#zdqw#wr#jlyh#lw#d#jr#lq#|rxu#whdp#wkhq#zh#wrwdoo|#uhfrpphqg#lw1#|rx#kdyh#ilqlvkhg#wkh#iluvw#Txhvw/#qrz#lw“v#wlph#wr#uhghhp#|rxu#iluvw#sul}h1#Wkh#frgh#iru#wkh#iluvw#txhvw#lv#‟WkhGulyhWrGhyhors†1#Jr#wr#wkh#Txhvw#Sdjh#dqg#xvh#wkh#frgh#wr#fodlp#|rxu#sul}h1#kwwsv=22zzz1mhweudlqv1frp2surpr2txhvw2"
    val stringBuilder = StringBuilder()
    string.forEach {
        stringBuilder.append(it - 3)
    }
    print(stringBuilder.toString())
}

这下直接得到结果了:Nice! If you are reading this you must have worked out how to decrypt it. This is our issue tracker designed for agile teams. It is free for up to 3 users in Cloud and for 10 users in Standalone, so if you want to give it a go in your team then we totally recommend it. you have finished the first Quest, now it’s time to redeem your first prize. The code for the first quest is “TheDriveToDevelop”. Go to the Quest Page and use the code to claim your prize. https://www.jetbrains.com/promo/quest/

也就是前往上面这个链接兑奖就可以了。

片刻即可收到邮件:

三个月全家桶,算是个小惊喜吧。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据