题目地址

http://www.pythonchallenge.com/

0x0 0.html

pow(2, 38)

0x1 map.html

#coding:utf-8
'''
f = lambda x: chr((ord(x) - 0x61 + 2) % 26 + 0x61)

src = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr\'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.'
des = ''

for i in src:
    if i >= 'a' and i <= 'z':
        des += map(f, i)[0]
    else:
        des += i
print des
'''

#'''
#another method: use string.maketrans()
import string
table = string.maketrans(string.ascii_lowercase, string.ascii_lowercase[2:] + string.ascii_lowercase[:2])
src = 'g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr\'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.'
url = 'map'
print src.translate(table)
print url.translate(table)
#'''

0x2 ocr.html

#coding:utf-8

l = {}
src = open('ocr.dat', 'rb').read()

for i in src:
    if i in l:
        l[i] += 1
    else:
        l[i] = 1
s = ''
for (i, k) in l.items():
    if k == 1:
        s += i
out = ''
for i in src:
    if i in s:
        out += i

print out

0x3 equality.html

#coding:utf-8
import re

src = open('equality.dat', 'rb').read()
p = re.compile('[^A-Z][A-Z]{3}([a-z])[A-Z]{3}[^A-Z]')

l = p.findall(src)

print ''.join(l)

0x4 linkedlist.php

#coding:utf-8
import urllib

#s_id = '12345'
s_id = '8022'

url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
for i in range(410):
    f = urllib.urlopen(url + s_id)
    line = f.read()
    if line.find('and the next nothing is ') != -1:
        s_id = line[line.index('and the next nothing is ')+24:].strip()
        print s_id
    else:
        print line
        break

0x5 peak.html

#coding:utf-8

import pickle

data = pickle.loads(open('banner.p', 'rb').read())

print '\n'.join([''.join([p[0] * p[1] for p in row]) for row in data])

0x6 channel.html

#coding:utf-8

import zipfile

z = zipfile.ZipFile('channel.zip')
name = '90052.txt'
c = []
while(1):
    r = z.read(name)
    info = z.getinfo(name)
    c.append(info.comment)
    if 'Next nothing is ' in r:
        name = r[16:31] + '.txt'
    else:
        break
print ''.join(c)

0x7 oxygen.html

#coding:utf-8

from PIL import Image

im = Image.open('oxygen.png')

o1 = ''.join([chr(im.getpixel((i, 43))[0]) for i in xrange(0, 609, 7)])

print o1

#smart guy, you made it. the next level is [105, 110, 116, 101, 103, 114, 105, 116, 121]

k = [105, 110, 116, 101, 103, 114, 105, 116, 121]

print ''.join([chr(i) for i in k])

0x8 integrity.html

在网页源文件中有链接:../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'
-->

保存为文件,使用bunzip2解压,得到用户名和密码,登录即可。