一个有意思的挑战解谜,http://fun.coolshell.cn
根据 title 在 Google 搜索 “fuck brain”,结果第一条
Brainfuck - Wikipedia, the free encyclopedia
根据维基百科内容,确定是 barinfuck 语言 Google 搜索 brainfuck online 找到在线解释器
http://esoteric.sange.fi/brainfuck/impl/interp/i.html
解密后内容 welcome.html
先计算数列最后一项为 1944,访问 1944.html,提示 x = 1944
Google 搜索 “生命、宇宙以及任何事情的终极答案” 得到 y = 42
x * y
图片链接指向https://en.wikipedia.org/wiki/Dvorak_Simplified_Keyboard,显然需要把 Dvorak 和 QWERTY 做转换
Google 搜索 “dvorak online converter”, 用在线转换器转换后结果如下
main() { printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
继续用 Google,需要注意的地方,代码中有减号,搜索时需要在减号后面加空格,不然会被理解为排除关键字
printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"- 0x60);
找到一篇文章 http://blog.sina.com.cn/s/blog_6adee4450100m6o9.html
最终代码为
printf("%six\n\0","un");
结果是 unix。
二维码识别结果[abcdefghijklmnopqrstuvwxyz] <=> [pvwdgazxubqfsnrhocitlkeymj]
简单的字符替换,Python 2.7 还原代码如下
import string T = string.maketrans('pvwdgazxubqfsnrhocitlkeymj', 'abcdefghijklmnopqrstuvwxyz') s = 'Wxgcg txgcg ui p ixgff, txgcg ui p epm. I gyhgwt mrl lig txg ixgff wrsspnd tr irfkg txui hcrvfgs, nre, hfgpig tcm liunz txg crt13 ra "ixgff" tr gntgc ngyt fgkgf.' s.translate(T)
还原后内容
Where there is a shell, there is a way. I expect you use the shell command to solve this problem, now, please try using the rot13 of "shell" to enter next level
虽然作者希望用 shell 来做 rot13 变换,我还是继续用 Python
'shell'.encode('rot13')
回文,仔细观察后规律为:必须包含大写字母和数字,中间为小写字母
在网页源码中找到代码,继续用 Python 处理
import re l = re.findall(r'([A-Z])(\d)([a-z])\2\1|(\d)([A-Z])([a-z])\5\4', s) ''.join([i[2] if i[2] else i[5] for i in l])
结果
variables
点击图片跳到 http://fun.coolshell.cn/n/2014,页面显示 32722
访问 http://fun.coolshell.cn/n/32722,页面显示 13310
上代码
import requests u = 'http://fun.coolshell.cn/n/%d' n = 2014 while 1: try: m = int(requests.get(u%n).text) n = m except: print n, m break
得到 20446
访问 http://fun.coolshell.cn/n/20446,拿到答案
Cool! the next level is "tree"
需要根据中序遍历序列和后序遍历序列还原二叉树,然后找出最长路径
算法太渣,参考大量实例,用 Python 写了个二叉树实现 https://github.com/4ft35t/utils/blob/master/tree.py
from tree import Tree in_list = 'T, b, H, V, h, 3, o, g, P, W, F, L, u, A, f, G, r, m, 1, x, J, 7, w, e, 0, i, Q, Y, n, Z, 8, K, v, q, k, 9, y, 5, C, N, B, D, 2, 4, U, l, c, p, I, E, M, a, j, 6, S, R, O, X, s, d, z, t'.split(',') post_list = 'T, V, H, o, 3, h, P, g, b, F, f, A, u, m, r, 7, J, x, e, w, 1, Y, Q, i, 0, Z, n, G, L, K, y, 9, k, q, v, N, D, B, C, 5, 4, c, l, U, 2, 8, E, I, R, S, 6, j, d, s, X, O, a, M, p, W, t, z'.split(',') t = Tree() t.build_tree(in_order=in_list, post_order=post_list) depth = t.get_all_depth() max_depth = sorted(depth.items(), key= lambda x:x[1], reverse=True)[0] print ''.join(t.get_path(max_depth[0])).replace(' ', '')
得到最长路径
zWp8LGn01wxJ7
再用 openssl 解密
$ echo U2FsdGVkX1+gxunKbemS2193vhGGQ1Y8pc5gPegMAcg=|openssl enc -aes-128-cbc -a -d -pass pass:zWp8LGn01wxJ7 nqueens
N 皇后问题,需要解出 N = 9, code 需要从右往左写
依旧不会,继续 Google,关键字 “n queens problem python”
找到答案 n-queen-problem-in-python
原来 python 的 test 模块可以直接生成 N-Queens,并求解,高大上。解出的 code 需要和上一关的最长路径拼接,计算 sha1 == e48d316ed573d3273931e19f9ac9f9e6039a4242
完整代码如下
import hashlib from test import test_generators as tg n = tg.Queens(9) s = n.solve() def convert(lst): return ''.join(map(lambda x:str(x+1), lst[::-1])) pw = 'zWp8LGn01wxJ7%s\n' for i in s: code = convert(i) sha1 = hashlib.sha1() sha1.update(pw % code) if sha1.hexdigest() == 'e48d316ed573d3273931e19f9ac9f9e6039a4242': print code break
结果
953172864
用 excel 的技术方法来表示 26 进制,和常规的区别是没有 0
def get_n(s): return sum(26 ** i * (ord(v) - ord('A') + 1) for i,v in enumerate(s[::-1])) def get_str(n): ret = [] while n: n, m = divmod(n, 26) ret.append(m) return ''.join(chr(i + ord('A') - 1) for i in ret[::-1]) s0 = 'COOLSHELL' s1 = 'SHELL' n0 = get_n(s0) n1 = get_n(s1) n = n0 / n1 print n print get_str(n)
最终结果 DUYO
Google 搜索两张图片,得到两个关键字 “猪圈” 和 “共济会”
两个关键字一起搜索,结果第一条
按右上角密码表解出答案 helloworld
源码中有一行
Did you even think vi a image file
下载图片用文本编辑器打开,看到
<rdf:li xml:lang="x-default">This Image actually is a RAR file as well.</rdf:li>
是个图片和压缩包合成的文件,该后缀为 rar,解压,helloworld.txt 倒数第二行
next level: DennisRitchie.html
PS: 写短代码用 Ipython,对效率提升非常有帮助。个人感觉比 Bpython 好用。
== EOF ==
原文地址:http://blog.4ft35t.tk/2014/08/09/Write-up-for-fun.coolshell.cn(提示:需翻墙,blog 在 GAE,用 Cloudflare 做代理。打不开请 FUCK 寡妇王)