解谜游戏 MU Complex 的过关图文攻略 (Episode2)(中)

青春壹個敷衍的年華 提交于 2020-03-02 10:56:56

本文的游戏继续前文展开,其他各篇MU Complex攻略地址如下:

解谜游戏 MU Complex 的过关图文攻略 (Episode1)

http://my.oschina.net/Tsybius2014/blog/358145

解谜游戏 MU Complex 的过关图文攻略 (Episode2)(上)

http://my.oschina.net/Tsybius2014/blog/693873

解谜游戏 MU Complex 的过关图文攻略 (Episode2)(下)

http://my.oschina.net/Tsybius2014/blog/693923

我们下一步要进军的是地图右上角的Section,为此我们需要先登录主机evanice

使用ssh命令登录evanice

evanice被形容为一个“stupid girl”,因为巡查员说她的密码太过简单,容易被破解,不过,在securty.note中,evanice为自己辩解说自己的密码足够安全了。

在hint文件中可以找到evanice密码的线索:

这个线索每次玩游戏时都不一样,也有可能是“mxslwhu << 3”等,不过解谜的方法都是不变的,即对所有的字母取前第n个字母进行替换,evanice使用了最为简单的凯撒密码对自己的密码进行加密,最后求出的密码是“jupiter”。使用ssh-agent命令并输入密码“jupiter”,就可以登录到主机dolanskanvo了。

dolanskanvo也需要玩bot游戏解锁ls等命令,这一关的地图如下:

与之前kyletopz主机不同的是,这一关对命令数量有限制。

main序列最多容纳10个命令,F1序列最多容纳3个命令。如果不使用F1序列,直接完成本关需要16个命令:

bot push cw
bot push move
bot push move
bot push cw
bot push move
bot push move
bot push ccw
bot push move
bot push ccw
bot push move
bot push move
bot push move
bot push ccw
bot push move
bot push move
bot push move

所以我们需要使用F1减少输入的命令数:

bot push f1 move
bot push f1 move
bot push f1 move
bot push cw
bot push f1
bot push cw
bot push f1
bot push ccw
bot push f1
bot push ccw
bot push f1
bot push ccw
bot push f1

最后输入指令bot play启动机器人, 机器人成功到达终点后,计算机解锁,效果如下:

打开database.txt,获取登录到olivierriddle的密码,登录olivierriddle

使用camera命令,可以看到一台非常老旧的电视机,电视机里面是个打字机,打字机上面写着一些电影台词。

这些台词来自电影《洛丽塔》(1962):

Dear Dad, How's everything? I have gone through much sadness and hardship. I'm married. I'm going to have a baby. I'm going nuts because we don't have enough to pay our debts and get out of here. Please send us a check. ~ Dolores Lolita Haze from Lolita

http://www.gotknowhow.com/quotes/lolita-dear-dad-hows-everything-i-have-gone-through-much-sadness-and-har

我们可以在IMDB上相关页面看到该部电影的详细资料:

Lolita (1962):http://www.imdb.com/title/tt0056193/

在ebolan.mail中可以看到,olivierriddle有个兄弟为这部电影工作

在演职员信息中可以找到这部电影的配乐是Nelson Riddle,那Nelson想必就是Olivier的这个兄弟。密码就是“nelsonriddle”。

解锁后,获得了使用ls命令查看隐藏文件的能力。至此右上角的区域也完全解锁了。

下一步我们开始探索左下角的区域:

我们先从glenrisson开始,用ssh登录glenrisson

glenrisson下的目录结构如下:

其中sec05ctrlconfig.txt是一个配置文件:

我们需要使用nano命令修改这个配置文件:sudo nano sec05ctrlconfig.txt

在下面新增一行 glenrisson: "true",并将lukeedison设定为false(因为最下面有一行注释说部分系统可能只允许最多四个人具有权限),修改完毕后按ESC键保存并退出。

修改完毕后,输入unlock命令即可解锁hosts.lock,使用其中的密码登录elizajones即可。

elizajones中的ebolan.mail打开后内容如下:

通过这个mail可以找到如下几个要点:

1、密码每天都会有变化

2、你的私钥是:subatomicreaction(中文意为亚原子反应)

3、e.bolan写了一个脚本每天推送新的密码,推送密码的账户是 @mcpltokgen

4、密码使用维吉尼亚密码算法加密(Vigenère cipher)

我们在twitter上找到账户 @mcpltokgen

https://twitter.com/mcpltokgen

这个账号每天会定时发送一个密码,最新发布的密码是“LBF PTGEEQIH IU YNTTDXHI”

掌握了算法,我们也自己可以实现一个Vigenere密码加密解密的工具类,如下面是一段实现此功能的C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace VigenereCypher
{
    /// <summary>
    /// Vigenere密码算法加密解密工具类
    /// </summary>
    class VigenereHelper
    {
        /// <summary>
        /// 转换矩阵
        /// </summary>
        private static string[,] matrix = new string[26, 26];
        /// <summary>
        /// ASCIIEncoding
        /// </summary>
        private static ASCIIEncoding ascii = new ASCIIEncoding();
        /// <summary>
        /// 判断工具类是否已初始化 true:已初始化,false未初始化
        /// </summary>
        private static bool isInit = false;
        /// <summary>
        /// 初始化工具类
        /// </summary>
        private static void InitVigenereHelper()
        {
            for (int i = 0; i < 26; i++)
            {
                for (int j = 0; j < 26; j++)
                {
                    int num = i + j + 65;
                    num = num <= 90 ? num : num - 26;
                    byte[] barray = new byte[] { (byte)num };
                    matrix[i, j] = ascii.GetString(barray);
                }
            }
        }
        /// <summary>
        /// 加密
        /// </summary>
        /// <param name="text">明文</param>
        /// <param name="key">密钥</param>
        /// <returns>密文</returns>
        public static string Encrypt(string text, string key)
        {
            if (!isInit) InitVigenereHelper();
            if (string.IsNullOrWhiteSpace(text)) return "";
            if (string.IsNullOrWhiteSpace(key)) throw new Exception("密钥无效");

            string code = "";
            key = key.ToUpper();
            text = text.ToUpper();

            List<int> keyNumList = new List<int>(); ;
            for (int i = 0; i < key.Length; i++)
            {
                string str = key.Substring(i, 1);
                keyNumList.Add((int)ascii.GetBytes(str)[0] - 65);
            }
            int idx = -1;
            for (int i = 0; i < text.Length; i++)
            {
                if (text.Substring(i, 1).ToString() == " ")
                {
                    code += " ";
                    continue;
                }
                idx++;
                code += matrix[keyNumList[idx % key.Length], (int)ascii.GetBytes(text.Substring(i, 1))[0] - 65];
            }
            return code.ToString();
        }
        /// <summary>
        /// 解密
        /// </summary>
        /// <param name="code">密文</param>
        /// <param name="key">密钥</param>
        /// <returns>明文</returns>
        public static string Decrypt(string code, string key)
        {
            if (!isInit) InitVigenereHelper();
            if (string.IsNullOrWhiteSpace(code)) return "";
            if (string.IsNullOrWhiteSpace(key)) throw new Exception("密钥无效");

            string text = "";
            key = key.ToString().ToUpper();
            code = code.ToString().ToUpper();

            List<int> keyNumList = new List<int>();
            for (int i = 0; i < key.Length; i++)
            {
                string str = key.Substring(i, 1);
                keyNumList.Add((int)ascii.GetBytes(str)[0] - 65);
            }

            int idx = -1;
            for (int i = 0; i < code.Length; i++)
            {
                if (code.Substring(i, 1).ToString() == " ")
                {
                    text += " ";
                    continue;
                }
                idx++;

                for (int j = 0; j < 26; j++)
                {
                    if (code.Substring(i, 1).ToString() == matrix[keyNumList[idx % key.Length], j])
                    {
                        byte[] bt = new byte[] { (byte)(j + 65) };
                        text += ascii.GetString(bt);
                    }
                }
            }

            return text.ToString();
        }
    }
}

计算结果如下:

今天的密码是FFFGLDGI,使用power命令,输入密码,即可解锁ninafez

坦白来说我并不懂法文,所以这段话的意思就只能用Google翻译来了解了~~~

ninafez主机中有一个文件note,内容如下:

里面提到了四个地铁站:

Hotel de Ville,巴黎市政厅,位于巴黎地铁11号线

Bolivar,波利瓦尔站,位于巴黎地铁7号线支线

Poissonniere,鱼船站,位于巴黎地铁7号线

Dugommier,杜戈米埃站,位于巴黎地铁6号线

巴黎地铁交通图可以参考这张维基百科上存储的图片:

https://upload.wikimedia.org/wikipedia/commons/2/2b/Carte_M%C3%A9tro_de_Paris.jpg

在其中我们依次找到这四个站:

这四个站的中心,是Temple,因此本关解锁文件priavate.key的密码就是temple

解锁后获取新的能力,使用cat命令打开后缀名为.crypt的文件,比如刚才在glenrisson主机中无法打开的wterk2.crypt文件:

至此左下角的Section也完全解锁了

END

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!