Jetbrains 的一个解密游戏

一个游戏

Jetbrains 官方发起了一个 游戏 ,奖品是 Jetbrains 全家桶的 3个月使用授权。那我们开始吧。

一切的开始:第一个谜题

官方在官微上面发了一串神秘数字:
在这里插入图片描述

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进制,可以联想到转化为 char 将字符打印出来:

    private static void solve1() {
        int chars[] = {0x48,0x61,0x76,0x65,0x20,0x79,0x6f,0x75,0x20,0x73,0x65,0x65,0x6e,0x20,0x74,0x68,0x65,0x20,0x73,0x6f,0x75,0x72,0x63,0x65,0x20,0x63,0x6f,0x64,0x65,0x20,0x6f,0x66,0x20,0x74,0x68,0x65,0x20,0x4a,0x65,0x74,0x42,0x72,0x61,0x69,0x6e,0x73,0x20,0x77,0x65,0x62,0x73,0x69,0x74,0x65,0x3f};
        for (int c : chars) {
            System.out.print((char) (c));
        }
    }

打印出来可以得到一个提示语:

Have you seen the source code of the JetBrains website?

这里提示我们去官网看看网页的源码

第二个谜题

我们打开官网的网站:慢慢往下翻可以看到一串注释:

      <!--
      O
{o)xxx|===============-
      O

Welcome to the JetBrains Quest.

What awaits ahead is a series of challenges. Each one will require a little initiative, a little thinking, and a whole lot of JetBrains to get to the end. Cheating is allowed and in some places encouraged. You have until the 15th of March at 12:00 CET to finish all the quests.
Getting to the end of each quest will earn you a reward.
Let the quest commence!

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)
It’s dangerous to go alone take this key: Good luck! == Jrrg#oxfn$

                 O
-===============|xxx(o}
                 O

这里给了一个关键词:Good luck! == Jrrg#oxfn$ 和一个关键的提示:JetBrains has a lot of products, but there is one that looks like a joke on our Products page ,这个关键字现在还看不懂有什么用,于是我们便去管网的产品页面看看有什么线索。我们一个个的产品看,可以看到一个明显的类似线索的图标 JK,这个看上去很像:
在这里插入图片描述
点击这个图标之后弹出弹框:
在这里插入图片描述

第三个谜题

You have discovered our JetBrains Quest! If you don’t know what this is, you should start from Twitter, Facebook or LinkedIn.


To continue to the next challenge you need to go to the following link… But there is a problem, the last 3 digits are missing:


https://jb.gg/###


To get these digits you need to know how many prime numbers there are between 500 and 5000


Good Luck!

这里就是谜题很简单,就是说这里链接缺少一个3位的###数字的后缀,只有找到它才能打开链接,这个数字是[500,5000] 的素数个数,那么拿个代码跑一下就能算出来了:

 private static void getPrime() {
        int count =0;
        for(int i= 500 ;i<=5000;i++){
            boolean isPrime = true;
            for (int j = 2;j<i;j++){
                if(i%j==0){
                    isPrime = false;
                }
            }
            count += isPrime?1:0;
        }
        System.out.println(count);
    }

我一开始看错题目,以为是在[500,5000] 的一个数字,于是写了一个shell 脚本来批量试这个链接,这个方法同样也可以找到答案。

#!/bin/bash
for a in {500..5000} #//500 and 5000
do
    echo  https://jb.gg/$a
    curl -I -m 10 -o /dev/null -s -w %{http_code} https://jb.gg/$a 
done

于是我们得到了链接:https://jb.gg/574,打开了这个链接之后:发现只是给了一个图片,上面又一个提示语:MPS-31816
在这里插入图片描述

按照经验分析,这个看着像一个 bug 的编号,于是我们先去 YT 的产品页面看看,原来YT这个东西类似于 Jira 的bug 管理工具,确认了这一点之后,我们肯定要找到 有没有MPS这个产品,找了一下果然有,那么基本可以肯定这个是一个bug 单号,我们再去MPS 页面查看有没有 这个项目的 YT 管理的链接,我把页面一直翻到最下面,发现了一个关键点,bug 的链接 Bug and issue tracker
在这里插入图片描述

玩了一会之后发现,定位这个关键的bug,只要把bug 的ID 输入到后面就行了,那么就输入进去吧:https://youtrack.jetbrains.com/issue/MPS-31816,这个时候,最后的问题就出现了。

在这里插入图片描述

第四个谜题

“The key is to think back to the beginning.” – The JetBrains Quest team.
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#‟EhfdxvhFrgh†1#Jr#wr#wkh#Txhvw#Sdjh#dqg#xvh#wkh#frgh#wr#fodlp#|rxu#sul}h1#kwwsv=22zzz1mhweudlqv1frp2surpr2txhvw2

最后一个问题给了一个提示语,需要从最初的关键字破解,那么最初的关键字什么呢?就是网页源码上给的那个key 啦It’s dangerous to go alone take this key: Good luck! == Jrrg#oxfn$
我们对这个Key 做简单分析,很容易想到,这个字符串可能是偏移加密的,那么把每个相同的位置上的字符做差值:
Good luck! == Jrrg#oxfn$

   System.out.println('G'-'J');
   System.out.println('o'-'r');

可以发现差值都是相同的 3,那么 这个字符串只需要偏移 3 位即可

   private static void decode() {
//        Good luck! == Jrrg#oxfn$

        System.out.println('G'-'J');
        System.out.println('o'-'r');

        String encode = "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#‟EhfdxvhFrgh†1#Jr#wr#wkh#Txhvw#Sdjh#dqg#xvh#wkh#frgh#wr#fodlp#|rxu#sul}h1#kwwsv=22zzz1mhweudlqv1frp2surpr2txhvw2";

        for (char c: encode.toCharArray()){
            System.out.print((char)(c-3));
        }
    }

打印可以得到:

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 “BecauseCode”. Go to the Quest Page and use the code to claim your prize.
https://www.jetbrains.com/promo/quest/Disconnected 

到此为止,你就揭开了这个问题的所有答案了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值