Python Challenge_0-6

最近学习python,发现一个好玩的网站,于是试着开始玩~

网址如下:

http://www.pythonchallenge.com


00


Hint: try to change the URL address.
从图片可知
2^38=274877906944
修改0.html ⇒ 274877906944.html
(http://www.pythonchallenge.com/pc/def/0.html)
完毕~

01

从图片可知为移位加密
破译即可。
采用str.maketrans().
代码如下:

#在Jupyter notebook测试通过
text='''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.
'''
intab=’abcdefghijklmnopqrstuvwxyz'
outtab=’cdefghijklmnopqrstuvwxyzab'
transtab=str.maketrans(intab,outtab)
print(text.translate(transtab))

输出结果:

i hope you didnt translate it by hand. 
thats what computers are for. 
doing it in by hand is inefficient and that's why this text is so long.
using string.maketrans() is recommended. 
now apply on the url.

将url代入map进行转换即可(http://www.pythonchallenge.com/pc/def/map.html

#在Jupyter notebook测试通过
text='''map'''
intab=’abcdefghijklmnopqrstuvwxyz'
outtab=’cdefghijklmnopqrstuvwxyzab'
transtab=str.maketrans(intab,outtab)
print(text.translate(transtab))

输出结果为:

ocr

​完毕~

02

打开调试模式,拷贝代码层乱码,进行分类统计,找出出现次数最少的元素即可。
这里采用collections.Counter().most_common() 进行统计。
代码如下:


from collections import Counter
text='''........#此处乱码省略
        '''
Counter(text).most_common()[:-11:-1] #取频率最小的十个元素进行查看

结果:

[('>', 1),
 ('y', 1),
 ('t', 1),
 ('i', 1),
 ('l', 1),
 ('a', 1),
 ('u', 1),
 ('q', 1),
 ('e', 1),
 ('<', 1)]

​排除尖括号,剩余元素排列恰好是 equality,更换url即可。

完毕~


03

和上一关一样,不过这一次是要求字符匹配,按照题目要求,应该是xXXXxXXXx格式,最中间的x是要得到的关键,我们采用正则表达式进行匹配。

#在Jupyter notebook测试通过
import re text='''........(乱码省略)''' result=re.findall('[a-z]{1}[A-Z]{3}[a-z]{1}[A-Z]{3}[a-z]{1}',text) l=[] for_ in result: l.append(_[4]) print(l)

结果如下:

['l', 'i', 'n', 'k', 'e', 'd', 'l', 'i', 's', 't']

​修改url为linkedlist.html,发现失败,提示为linkedlist.php,再次修改,成功!

完毕~

04

这一关是考验爬虫了,我用requests进行抓取和迭代!

代码如下:

import requests
import re
url = 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing=63579'
url2= 'http://www.pythonchallenge.com/pc/def/linkedlist.php?nothing='
r = requests.get(url).text
s=[]
while (1):
    num = re.findall('[0-9]{1,}',r)
    s.append(num)
    if (num):
        url_next=url2+num[0]
        print(url_next)
        #print(num)
    else:break
    r = requests.get(url_next).text
print(len(s))
print(url_next)

​这里有个小问题,当迭代到86次时,Body里提示的是乘法口诀,不是现成的数字,要求用当前数字除以2得到下一个nothing,好吧,我手动改掉了。当下一次迭代到55次时,提示说这个nothing出错了,要求返回上一个,我又人工检查了一下,发现有两个nothing,好吧,第二个才是正主,我又被忽悠了。终于,再迭代110次时,登顶了~~~结果是peak.html!!!

不过还好,幸亏只有两百来个数据,要是成千上万我绝对不玩了。。。

完毕~

05

好吧,这一关我完全懵了。。。

参照大神攻略,才知道是用pickle对序列化的banner.p文件进行对象化输出~~

果然大神脑洞无上限,看来要再接再厉啊!

首先查看源代码,发现<peakhell>标签banner.p链接指向新网页,点击打开发现果然又是乱码,然后右键保存,接着用pickle进行load,最后要能够分析出来这是一道画图题,好吧,我输了!!!

不多说,代码如下:

import pickle
f = open('banner.p','rb') #打开文件
data = pickle.load(f)
str=''
for i in data:
    for k in i:
        str+=k[0]*k[1] #由题意可得(反正我得不出),k[0]表示画图的符号,k[1]表示画图符号的数目
    str+='\n'#每个列表画完后轻轻地加上一个回车
print(str)#画图
f.close()

然而,逻辑最终还是表现出了她的美丽,图如下:


              #####                                                                      #####
               ####                                                                       ####
               ####                                                                       ####
               ####                                                                       ####
               ####                                                                       ####
               ####                                                                       ####
               ####                                                                       ####
               ####                                                                       ####
      ###      ####   ###         ###       #####   ###    #####   ###          ###       ####
   ###   ##    #### #######     ##  ###      #### #######   #### #######     ###  ###     ####
  ###     ###  #####    ####   ###   ####    #####    ####  #####    ####   ###     ###   ####
 ###           ####     ####   ###    ###    ####     ####  ####     ####  ###      ####  ####
 ###           ####     ####          ###    ####     ####  ####     ####  ###       ###  ####
####           ####     ####     ##   ###    ####     ####  ####     #### ####       ###  ####
####           ####     ####   ##########    ####     ####  ####     #### ##############  ####
####           ####     ####  ###    ####    ####     ####  ####     #### ####            ####
####           ####     #### ####     ###    ####     ####  ####     #### ####            ####
 ###           ####     #### ####     ###    ####     ####  ####     ####  ###            ####
  ###      ##  ####     ####  ###    ####    ####     ####  ####     ####   ###      ##   ####
   ###    ##   ####     ####   ###########   ####     ####  ####     ####    ###    ##    ####
      ###     ######    #####    ##    #### ######    ###########    #####      ###      ######

​相信不用我说了,下一关,走起~
完毕~

06

这一关涉及到zip文件的处理,之前没太接触过,参照大神指点,顺利通关。

首先是将channel.html改为channel.zip,可以下载到一个压缩包,打开压缩包中readme文件,提示很明显,zip文件迭代~

不多说,代码如下:

import zipfile,re #导入对zip文件处理的模块 zipfile
z=zipfile.ZipFile("channel.zip","r")#以只读的方式打开zip文件
f0="90052.txt"#从readme.txt中获取的tip,开始的第一个文件
count=1
file=f0
while(1):
    text_byte=z.read(file)#读取zip中的文件信息,此时拿到是数据是byte字节数组
    text=text_byte.decode(encoding="utf-8")#转化为字符串
    result=re.findall("[0-9]",text)#注意这里得到的是列表格式
    res_str=''.join(result)#将列表内容转化为字符串
    file=res_str+".txt"
    count+=1
    if (result):key_file=file
    else:break
print("the number is:",count,",the key filename is ",key_file)
key_text=z.read(key_file).decode(encoding='utf-8')
print(key_text)

结果:

the number is: 910 ,the key filename is  46145.txt
Collect the comments.

果然没有那么简单~原来zip文件时候可以添加comment的,而且有人将所有文件的comment集合起来当作密钥,学到一招,不错~
我们继续修改代码,抓取comment信息。
代码如下:

import zipfile,re #导入对zip文件处理的模块 zipfile
z=zipfile.ZipFile("channel.zip","r")#以只读的方式打开zip文件
f0="90052.txt"#从readme.txt中获取的tip,开始的第一个文件
count=1
file=f0
comments=[]
while(1):
    text_byte=z.read(file)#读取zip中的文件信息,此时拿到是数据是byte字节数组

    comments.append(z.getinfo(file).comment)#搜集comment信息

    text=text_byte.decode(encoding="utf-8")#转化为字符串
    result=re.findall("[0-9]",text)#注意这里得到的是列表格式
    res_str=''.join(result)#将列表内容转化为字符串
    file=res_str+".txt"
    count+=1
    if (result):key_file=file
    else:break
print("the number is:",count,",the key filename is ",key_file)
key_text=z.read(key_file).decode(encoding='utf-8')
print(key_text)
str=''
for i in comments:
    str+=''.join(i.decode(encoding='utf-8'))
print(str)

又是画图题有没有,好,上图:

the number is: 910 ,the key filename is  46145.txt
Collect the comments.
****************************************************************
****************************************************************
**                                                            **
**   OO    OO    XX      YYYY    GG    GG  EEEEEE NN      NN  **
**   OO    OO  XXXXXX   YYYYYY   GG   GG   EEEEEE  NN    NN   **
**   OO    OO XXX  XXX YYY   YY  GG GG     EE       NN  NN    **
**   OOOOOOOO XX    XX YY        GGG       EEEEE     NNNN     **
**   OOOOOOOO XX    XX YY        GGG       EEEEE      NN      **
**   OO    OO XXX  XXX YYY   YY  GG GG     EE         NN      **
**   OO    OO  XXXXXX   YYYYYY   GG   GG   EEEEEE     NN      **
**   OO    OO    XX      YYYY    GG    GG  EEEEEE     NN      **
**                                                            **
****************************************************************
 **************************************************************

​HOCKEY!!!
完毕~


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容

  • [Level 4] Title: follow the chain 页面中无有用的提示,查看源码,在注释中找到 u...
    Recgat阅读 405评论 0 0
  • [Level 7] Title: smarty 所有地方均无提示,图片中有一条灰色带,或许需要从这突破。图片处理需...
    Recgat阅读 656评论 0 0
  • [Level 6] Title: now there are pairs 图片下方是一个PayPal捐赠的图片链接...
    Recgat阅读 599评论 0 1
  • 问题链接 问题链接如下: 答案链接 答案链接如下: 解题思路 根据页面源码提示: 再点击页面图片显示: 可知是需要...
    发条蛙阅读 315评论 0 0
  • 如果皮囊朽坏,我们还剩下什么? 看完这本书的时候,百度了一些书评,很多人说这本书写得过于用力,应该是高中老师喜欢批...
    阿阿西呐阅读 1,258评论 29 21