一个古老的编程游戏:PythonChallenge全通攻略PythonChallenge是一个网页闯关游戏,通过一些提示找出下一关的网页地址。与众不同的是,它是专门为程序员设计的,因为大多数关卡都要编程来算哦!!去年和同学一起玩的,他做了大半,我做了小半,作弊了一些,33关全通,今天a逛硬盘发现这个资料,拿出来晃晃。非常非常非常非常好玩,强烈推荐编程的朋友都玩玩,不一定要会Python,我和我同学都不会,不过我们用C#一样能搞出来,没有障碍的。0a猜238,说是38在2上面一点点,猜238=274877906944,进入下一关1根据图上的提示,是位移加密,每个字符位移两次,把下面那些提示用这个方法的处理,告诉我用同样的方法处理url,得到ocr2提示看源文件,一大堆字符,说要找到出现次数最少的字符,发现是equality3一个小写字母,每边刚好有三个大写字母做保镖。XXXXxXXXXXXXXXxXXXXXxXXXxXXXx这个才是对的……找到的答案是linkedlist4点击网页上的图片之后,进入连接提示andthenextnothingis92512然后就把12345改成92512,他又提示andthenextnothingis64505……就这么一路下去,照着提示,几百次之后就行了……5peakhell说要读出来,pickle下载banner.p然后就又不会了……6从图片看出,拉链(zip)是主角……下载channel.zip然后和第4关差不多,做个程序一路走下去。然后据说有注释,但是我找不到……7图片上的那条灰度按照ASCII解码出来后是integrity8标题:workinghard?图片:一只蜜蜂bee?busy.busy?busytoo?bz2?下面的用户名和密码都是用bz2加密的,解密之后点图片的链接,然后进到下一关,输入用户名密码即可。之后几关的用户名密码hugefile9提示:connectthedots后面代码里的first,second分别是两堆x和y的坐标,连起来以后first像一头牛,second像是一个十字,难道是横过来的X,叫做牛X……试了下cow,提示说是公的,bull。从这张图看出来,发现second原来只是描了下牛的头……10a=[1,11,21,1211,111221,len(a[30])=?话说其实找到了个很诡异的规律,但是和官方的不一样。官方的规律是这样的:11个1,写作112个1,写作211个2,1个1,写作1211……最后算一下就出来了580811图片一眼可以看出用了IE浏览器选中图片的那种效果,加上oddeven的提示,更确信是这个了。一张图什么都没,另一张图一看以为什么都没,结果居然是显示器的问题……另一个显示气能很明显看出一种血红色的恐怖的图样,右上写着evil字样。12一开始看着这么奇怪的图片,以为是图像处理的。看着图片叫evil1.jpg,感觉怪怪的,试了下evil2.jpg,还真有,提示说notjpg–gfx改成gfx真有这么个文件,不过不知道是什么东西。evil3.jpg:nomoreevils…evil4.jpg:Bertisevil!goback!接下来就搞不懂怎么办了,看了提示才知道,原来原图那人把扑克牌分成5堆,提示着要把那个gfx文件用分牌的方式分成5个文件,结果图片的内容连起来就是下一关的网站了。13按下数字键5之后会进入://.pythonchallenge.com/pc/phonebook.php他说要打电话给一个evil的人,之前有提到Bertisevil,那就给他打电话吧……据说这个页面用了RemoteProcedureCall(RPC)这种神奇的协议,反正照着一个例程改了下他就返回了555-ITALY14根据网页标题的提示:walkaround网页代码的提示:100*100=(100+99+99+98)+(...还有那张螺旋状的面包图片,猜测,要把下面那张图(其实这个图是10000*1的,居然能显示成方的)以这种形式展开,结果出现一只猫。在此之前有个小插曲,如果把那个图以一行行的形式展开会出现bit字样,然后进bit.html会提示说你走错路了……然后输入cat.html,提示anditsnameisuzi.you'llhearfromhimlater.15一张日历,1xx6年,根据星期和右下角显示的很小的二月份的29天,可以猜出是闰年,并且把答案缩小在:这些年份中11761356157617561976buyflowersfortomorrow,图上标了1.26,说明1.27有事发生heain'ttheyoungest,heisthesecond从上面这些年份中1976是最年轻的,第二年轻的是17562002年1月27日尼日利亚首都拉各斯大爆炸2000人丧生1999年1月27日广西巨贪李乘龙一审被判处死刑1998年1月27日中国民乐除夕回荡维也纳(这是中国民族音乐历史上第一次在有“音乐圣殿”之称的金色大厅展现风采)1997年1月27日美科学家制造出原子激光1982年1月27日瓦尔德海姆获“联合国和平奖”1973年1月27日越美签定关于越南问题的巴黎协定1964年1月27日我国与法国建交1950年1月27日我国建立统一税收制度1945年1月27日苏军解放奥斯威辛集中营1937年1月27日美国遭受严重水灾,100万人无家可归1926年1月27日电视诞生1901年1月27日意大利作曲家威尔第逝世1893年1月27日宋庆龄诞辰1822年1月27日文明古国希腊独立1756年1月27日奥地利音乐大师莫扎特诞生1142年1月27日岳飞被害mozart16提示说把它弄直,图片里面杂乱无章的点很明显有很多是品红色的短线,把图按行平移,使得红线对齐,出现了romance字样。17小牛做的,等他补解题报告这个……我忘了,过程相当复杂,还是看国外的攻略吧。18提示说两张图片有什么不同,然后提示说区别比我们想的要简单,那就是亮度://.pythonchallenge.com/pc/return/brightness.html图片一样,源码里面提示下载deltas.gz下载一看是个文本文件很明显分成了左右两块,写成了十六进制的形式,16个一行,然后按行求出了左右两边的最长公共子序列,并且左右分别减去这个LCS,得到三个png文件,一个写了://.pythonchallenge.com/pc/hex/bin.html一个是butter一个是fly其中有一张图片需要用ps打开才行,浪费好多时间……之后几关的用户名密码butterfly19一个电子邮件,下载后能弄出音乐,听到sorry。图中显示的印度地图颜色是反的,联想到反转。除了文件头之外的都前后字节交换,从新的音乐听到idiot,然后过去……好神奇,居然正反都有能听的声音……20从图片的包头中看到range,然后编程构造请求的range,大概这样varreq=WebRequest.Create(@://.pythonchallenge.com/pc/hex/unreal.jpg)asWebRequest;req.AddRange(r,r+len);req.Credentials=newNetworkCredential(butter,fly);varrep=req.GetResponse();using(varsr=rep.GetResponseStream()){StreamWriters=newStreamWriter(c:\\1.dat);byte[]a=newbyte[10000000];intt;while((t=sr.Read(a,0,a.Length))!=0){//intt=sr.BaseStream.Read(a,0,a.Length);s.BaseStream.Write(a,0,t);}//Console.WriteLine({0}{1},r,sw.ReadToEnd());s.Close();}先是一大堆文字提示,说我入侵,然后尝试着把range的开始位置设置为2123456789,提示了密码是我的新昵称,还提示了结果所在的位置,然后在那个位置做完range的头,下载,发现一个压缩包,密码是redavni21这关没实现,直接看网上的答案了。大概的意思是,刚才下载到的那个压缩包里面有个package.pack文件,其实是个压缩文件,使用了zlib和bz2两种方式压缩,到时候还要适当地把文件逆序一下(关于这个的提示是他说这是个小时候的游戏,击鼓传花,国外的玩法不一样,需要一层层地拆传递的那个东西……)然后记录这三中东西的操作,一个记作“”,一个“#”,一个回车,就看到了用字符拼起来的copper字样。22提示:模拟,又提示white.gif会比想象中的亮度更大,发现这个gif是多帧的,差不多在图像的正中间有比黑色稍微亮一点的颜色……那些颜色出现在小键盘一样布局的3*3的9个位置上。然后一次当作方向向量描点处理,弄出来刚好是bonus这几个字母23'vagursnprbsjung?'这个又是第1关中出现的位移加密……然后翻译过来就是inthefaceofwhat?whatisthismodule?这个比较无语,在python里面输入importthis,显示了一大段:TheZenofPython,byTimPetersBeautifulisbetterthanugly.Explicitisbetterthanimplicit.Simpleisbetterthancomplex.Complexisbetterthancomplicated.Flatisbetterthannested.Sparseisbetterthandense.Readabilitycounts.Specialcasesaren'tspecialenoughtobreaktherules.Althoughpracticalitybeatspurity.Errorsshouldneverpasssilently.Unlessexplicitlysilenced.Inthefaceofambiguity,refusethetemptationtoguess.Thereshouldbeone--andpreferablyonlyone--obviouswaytodoit.Althoughthatwaymaynotbeobviousatfirstunlessyou'reDutch.Nowisbetterthannever.Althoughneverisoftenbetterthan*right*now.Iftheimplementationishardtoexplain,it'sabadidea.Iftheimplementationiseasytoexplain,itmaybeagoodidea.Namespacesareonehonkinggreatidea--let'sdomoreofthose!然后下一关就是ambiguity……24bfs,从上到下,然后把路过的点的颜色(只看rgb中的r)全部间隔着写到一个文件中,发现是个zip,提示下一关lake25lake1.wav~lake25.wav按照图像拼起来26到19关那个地方写的邮件发道歉信过去然后知道了之前21关那个压缩包里面的没用到的mybroken.zip的md5,还说错了一个字节,穷举一下,里面的图像里写着speed下面提示要错过船了,speedboat27看了网上的提示才过的……一开始当然先下载zigzag.gif甚至研究了GIF的文件格式,发现文件结构很诡异,没用GIF的标准来压缩。貌似他的tables一个是颜色表,一个是下面的图像图像的灰度当作二进制输出,图像灰度的索引也输出,发现这两个几乎是一样的,但是差一个字节。对齐之后,发现两个文件只有一点点不同,把不同之处提取出来,其中有一个可以看出是BZ2压缩的,解压之后是个文本,里面貌似都是下一关的网址和关键