Monyer's Game 6~10关过关方法

Monyer's Game开通到现在,已经有50多人通关了。其中绝大部分人,不管是自己独立完成也好,参考别人也罢,都是自己一步一步过去的。像陆羽兄弟甚至已经为游戏做好了整个通关的教程,在此Monyer对他的热心表示感谢。

但是毕竟通关时只需要一种方法,但通关的思路却有无数种,而我更希望想让大家把该学到的东西学到。所以继续上次的讲解《Monyer's Game 0~5关过关方法》,我们来看一下6~10关的过关方法。而有不同通关思路的朋友,请一定不要吝惜,把思路共享给大家,这样我们都会进步,谢谢!

6-7关

进入第六关后,显示出来的是一张google搜索的图片,图片中的关键词即是本关的通关密码,但已经被黑色涂掉了。所以这关的本意即是通过未涂掉的文字去在google中搜索关键词本身,即google hack。

有些人说即使不通过google搜索亦能猜出来密码是什么,这里Monyer非常佩服其眼力!但我们这里选择按部就班地去寻找蛛丝马迹。

google列出的搜索结果有三个,第三个是维基百科的结果,并且只能看见一部分(由于截图的撕边效果),这个撕边效果是故意做的——原因就是搜索百科上的内容,是最容易还原关键字的,其中因由不用说吧,呵呵。

所以这里我们直接瞄准百科上的关键字,Monyer攫取的关键字有“published in 1944、magazine”,我们直接提取到google里去搜索一下,密码关键词立即出现:

对比game中的图片你可以看到,没有任何怀疑,密码就是seventeen。有人说是因为十七大,呵呵,或许。因为当时确实到这里头脑中出现的单词就是这个。但有些人说,这些密码大都具有一定的可猜性,这点Monyer表示赞同。

7-8关

来到第七关,提示有三个:

提示1:这关需要简单的社会工程学,请联想本关特点进入下一关。

提示2:不要被你的所见、经验及习惯蒙蔽了你的双眼,看不到的正是你想要的。

提示3:与社会工程学相仿的是暴力破解,所以Monyer给你MD5:5e023995fb3f5e840ee684784f8f0799(小于10的数字+字母)

提示给的再清楚不过——你得“猜”,并且你有可能“看不到”。

至于提示3仅仅是给某些想象力没有发挥出来或者是被“看不到”所迷惑的人一个确定密码的机会。可是另我异常兴奋的是——这个MD5居然被很多人爆破出来了,佩服!

“猜”这种东西,我们无法给出一个准确的理解,但无论如何,当我看到本关的唯一特点——seventeen7.asp,我都会毫不犹豫地去猜下一关密码为eighteen8的。看了看陆羽兄弟也是这样猜出的,因为再没有别的特点了。

所以当你提交密码后出现了“找不到网页”的提示错误时,“看不到的正是你想要的”。并且为了防止大家迷糊,我特意将第八关的title很醒目地放在那里。

8-9关

依旧查看源文件,直拖到底,你将看到第九关的提示:10000以内所有质数和.asp。

所以这关你甭想使巧劲过去,只能老老实实地编码吧!

陆羽兄用的是JS:(由于陆羽兄仅仅是做POC,所以代码没有规格化。这里Monyer对源代码进行适当更改,对于编程初学者来说,编程的格式甚至比编程本身更重要。

<script>
b=0;
for(i=1;i<10000;i=i+1){
    pd=false;
    if(i==2) pd=true;
    else{
        for(j=2;j<i;j=j+1){
            if(i%j==0){
                pd=false;
                break;
            }else pd=true;
        }
    }
    if(pd) b=b+i;
}
document.write(b+".asp");
</script>

如果你的CPU够强劲,在浏览器崩溃之前,你会看到运算结果:5736396.asp

当然你也可以编出更优化的代码来(红粟):

<script>
var sum=2;
for(var x=3;x<10000;x++){
flag=true;
for(var temp=2;temp<=Math.sqrt(x);temp++)
if (x%temp==0){flag=false;break;}
if(flag) sum+=x;
}
alert(sum);
</script>

由于编写这关时正好开着eclipse,所以索性就用java编写的函数,但和用C编写几乎没有区别,事实上这么简单的算法,大虾们用十种八种编程语言编出来也没丝毫问题。

class Test{
public static void main(String[] args){
   int a = 10000;
   int[] b = new int[a/2];
   int bp=0;
   for(int i=2;i<=a;i++){
    for(int j=2;j<=i;j++){
     if(i%j==0 && j!=i) 
      break;
     if(j==i){
      b[bp]=j;
      bp++;
     }
    }
   }
   bp=0;
   for(int i=0;i<b.length;i++){
    if(b[i]!=0) bp+=b[i];
   }
   System.out.println(bp);
}
}

结果会在毫秒级显示出来,估计C会更快(horseluke的代码)。但如果你仔细看代码,你也会发现这个算法同样不够好,甚至很差。你可以开发出更快的算法来,譬如i无须等于2的倍数,j取值b[i]中已存在元素,j小于i的平方根即可等等,这里不深入研究了。

9-10关

进入第九关,居然又是一张图片,美女哦!有些人问我:已经把RF放大十多倍了,还是没看到密码!

:-)!无语!但经常浏览我博客的好友会发现这关过起来异常简单。

我们先假设这关是图片与RAR的COPY吧,下载图片后winrar打开发现数据错误;那么再假设是图片与TXT的COPY吧,用NOTEPAD打开,直拖到底,即可看到密码。

所以到现在你几乎没费什么力气,无须什么特殊的工具就直接来到了第十关。

在自己明白原理的情况下直冲十关,是不是有些莫名的兴奋呢?

如果来到这里,不妨在没有提示的情况下通过剩余的关卡,虽然涉及的知识点很多,但都是各个知识点中的初级。100度一下你就知道,如果还不知道,就360度一下,哈哈!

Monyer!

posted @ 2014-06-09 17:23  DaBan  阅读(1581)  评论(2编辑  收藏  举报