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!