Level 7
图片中间一条灰度线,感觉是要进行图片处理。于是下了个PIL库。
用系统自带的画图工具手动找到灰度线起始的像素位置(渣渣的方案),然后开始处理。想法是读取灰度值转成字母。打印出来,基本上是几行这样的结果(只需要保留一行就行了,因为灰度值是重复的):
sssssmmmmmmmaaaaaaarrrrrrrttttttt ggggggguuuuuuuyyyyyyy,,,,,,, yyyyyyyooooooouuuuuuu mmmmmmmaaaaaaadddddddeeeeeee iiiiiiittttttt....... ttttttthhhhhhheeeeeee nnnnnnneeeeeeexxxxxxxttttttt llllllleeeeeeevvvvvvveeeeeeelllllll iiiiiiisssssss [[[[[[[111111100000005555555,,,,,,, 111111111111110000000,,,,,,, 111111111111116666666,,,,,,, 111111100000001111111,,,,,,, 111111100000003333333,,,,,,, 111111111111114444444,,,,,,, 111111100000005555555,,,,,,, 111111111111116666666,,,,,,, 111111122222221111111]]]]]]]]qkic^bgb_^^`_XUWXYYY\
已经能看到一句话的雏形了,除了第一个字母,剩下的字母的重复周期为7。修改一下代码,得到这个句子smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]
,接下来就很简单啦
from PIL import Image
im = Image.open('oxygen.png')
gray = im.convert("L")
pixs = gray.getdata()
# row 43 - 51 column 1 - 629
ch = ''
for c in range(0,608):
ch += chr(pixs[43*629 + c])
# print ch
words = ''
i = 0
for k in ch:
if i == 0:
words += k
i += 1
i %= 7
print words
pw = ''
for n in [105, 110, 116, 101, 103, 114, 105, 116, 121]:
pw += chr(n)
print pw
Level 8
源代码有一个链接"../return/good.html" />
(其实点击图片上的昆虫就可以) ,打开发现要输入用户名和密码,这在源代码中也有提示:
un: 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
pw: 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
一看就是字符转换。先用python打印出来看看。还是乱码。
试了半天各种编码,还是不行,又不懂了。Google一下,说是跟压缩算法有关。
如果你了解压缩算法,不难知道’BZh91AY’ 实际上是bzip2算法的特征,相应的,’PK/x03/x04’ 是zip算法的特征,而’/x25/xD5/b/b ‘则是gzip算法的特征 ——穿越Python Challenge(6-8)
似乎直接用bz2的解压就可以了。
import bz2
un = 'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
pw = 'BZh91AY&SY\x94$|\x0e\x00\x00\x00\x81\x00\x03$ \x00!\x9ah3M\x13<]\xc9\x14\xe1BBP\x91\xf08'
print bz2.decompress(un),'\n',bz2.decompress(pw)
知识量不够果然不行。