第六关 zipfile
这一关比较有意思,我们先从页面源码看起:
从里面可以看到这样的注释“he following has nothing to do with the riddle itself. I just thought it would be the right point to offer you to donate to the Python Challenge project. Any amount will be greatly appreciated. -thesamet ”。从这里可以看到,下面的form体实际上对通关没有任何帮助;那么,信息在哪呢?仔细观察可以看到,<html>标记后有zip字样的注释,那么是不是跟zip压缩有关呢。我们可以尝试着将页面地址的名字替换为zip,将得到"yes. find the zip. " 显然,zip绝对与通关有关系,但却非最终谜底。我们尝试用zip替换后缀html,将得到一个压缩包。解包,将得到911个文件,其中有一个是readme文件,打开可以看到下面信息
根据提示,从90052.txt文件开始查找有效信息,这就和第四关“数字串” 相似了,编写脚本:
运行脚本,查看日志,将得到“Collect the comments.” 到了这一步就有点意思了,给出的提示说需要“收集comment”,那么哪里有comment呢?页面源码里?我们之前已经看到,一个注释没有意义,另一个注释提示了zip信息。显然不在页面源码里,那么究竟在哪呢?实际上还是落在了zip文件的头上。通过查阅python内带的zipfile模块,我们发现在建立压缩包时可以对每个添入的文件附加信息,因此comment应该就是指的这些信息了。再次编写脚本:
运行脚本,结果如下:
将得到“HOCKEY”字样,打开hockey.html 页面,将得到“it's in the air. look at the letters. ”可见问题还没有结束。仔细观察输出的字样,再次得到“OXYGEN”,打开oxygen.html 页面,通关!
第七关 Image
这一关与图像有关。我们先看一下页面源码:
可以看到,并没有有意义的注释信息。那么返回看页面上的图片,图片有一个“7”标志。而图片中间有一段灰色区域,可以推测信息应该包含在这段灰色区域中。既然要处理和图片有关的东西,那就应该理解一下PIL库,其中有一个Image模块可以处理图片。用GIMP打开oxygen.png图片,发现其大小为629*95,而灰色区域第一块有5个像素,接着是85个有7个像素的区段,最后是一个8个像素的区段,我们可以从第50行采样。同样我们要注意到,该图片是“RGBA”模式的,也就是说每个像素是有4个数据表示的;通过查阅Image模块的相关资料,我们发现‘L’模式是每个像素由1个在(0,255)区域的数值表示。那么我们就可以把它当做ASCII处理,编写脚本如下:
运行脚本,得到结果“smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]”。很显然,关键信息包含在[]的9个数值上,转换为ASCII码,脚本如下:
运行脚本,得到单词integrity,进入页面integrity.html ,通关!
第八关 bz2
图片上有一只蜜蜂,还有一条信息“Where is the missing link?”。看来这一关应该与link有关,我们先看一下页面源码:
我们可以看到在源码的最后有一个注释,并分别以un和pw标志。这两个标志后的的字符串是乱码,难道它们会与link有关?不太像,如果与link有关的话,没有必要用两个标志。除此之外,我们再仔细观察页面源代码,发现图像上隐藏着点击链接“../return/good.html”。点击图片,发现需要输入用户名和密码。看来上面的两个标志是与用户名和密码有关了!如果你了解压缩算法,不难知道'BZh91AY' 实际上是bzip2算法的特征,相应的,'PK/x03/x04' 是zip算法的特征,而'/x25/xD5/b/b '则是gzip算法的特征,那么编写脚本如下:
运行脚本,得到'huge'和'file',输入打开页面 ,通关!