惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tailwind CSS Blog
C
CERT Recently Published Vulnerability Notes
P
Proofpoint News Feed
Vercel News
Vercel News
博客园 - 三生石上(FineUI控件)
IT之家
IT之家
Help Net Security
Help Net Security
月光博客
月光博客
N
News and Events Feed by Topic
Cloudbric
Cloudbric
博客园 - 司徒正美
L
LangChain Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
T
Tenable Blog
The Register - Security
The Register - Security
The Hacker News
The Hacker News
I
InfoQ
The Last Watchdog
The Last Watchdog
MyScale Blog
MyScale Blog
Schneier on Security
Schneier on Security
WordPress大学
WordPress大学
小众软件
小众软件
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
宝玉的分享
宝玉的分享
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
K
Kaspersky official blog
L
LINUX DO - 热门话题
N
News | PayPal Newsroom
F
Fortinet All Blogs
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security @ Cisco Blogs
Recorded Future
Recorded Future
大猫的无限游戏
大猫的无限游戏
H
Help Net Security
Google Online Security Blog
Google Online Security Blog
S
Schneier on Security
C
Cisco Blogs
N
News and Events Feed by Topic
V2EX - 技术
V2EX - 技术
Latest news
Latest news
PCI Perspectives
PCI Perspectives
T
The Blog of Author Tim Ferriss
P
Palo Alto Networks Blog
T
Tor Project blog
Project Zero
Project Zero
云风的 BLOG
云风的 BLOG
Webroot Blog
Webroot Blog
Attack and Defense Labs
Attack and Defense Labs
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org

趣味问题 | 酷 壳 - CoolShell

Cuckoo Filter:设计与实现 | 酷 壳 - CoolShell 【活动】解迷题送礼物 | 酷 壳 - CoolShell 如何用最有创造力的方式输出42 | 酷 壳 - CoolShell 一个“蝇量级” C 语言协程库 | 酷 壳 - CoolShell 伙伴分配器的一个极简实现 | 酷 壳 - CoolShell 一个fork的面试题 | 酷 壳 - CoolShell 神奇的CSS形状 | 酷 壳 - CoolShell 软件真的好难做啊 | 酷 壳 - CoolShell 面试题:火车运煤问题 | 酷 壳 - CoolShell 又一个有趣的面试题 | 酷 壳 - CoolShell “火柴棍式”程序员面试题 | 酷 壳 - CoolShell 打印质数的各种算法 | 酷 壳 - CoolShell 140个Google的面试题 | 酷 壳 - CoolShell chmod -x chmod的N种解法 | 酷 壳 - CoolShell
谜题的答案和活动的心得体会 | 酷 壳 - CoolShell
陈皓 · 2014-08-05 · via 趣味问题 | 酷 壳 - CoolShell

我于2014年8月3日周六的上午在微博、twitter、CoolShell上发布了一个和程序员有关的解谜题的活动——【活动】解谜题送礼物。我使用了二级域名fun.coolshell.cn做为这次活动的页面。

截止这篇文章发布的时候,fun.coolshell.cn的访问量UV大约有4万左右,通关人数大约有200人,但因为在活动的第二天网上就出了一些答题攻略,通过分析,实际靠自己能力通过的人数在130人左右。通过率大约不到4‰的样子。

在这里我把整个谜题和做这个活动的东西写一下,算是给自己的一个总结。

谜题的答案和花絮

fun.coolshell.cn上一共有十道谜题,要设计这些东西还真是费尽脑汁,这让我对那些设计谜题式游戏的人相当敬佩

第0关:很多人可能一头雾水,完全不知道这是什么,其实只要Google一下,你会知道这是一个叫BrainFuck的语言。在Coolshell.cn上我也介绍了过——《BT雷人的程序语言》《BT雷人的程序语言(大全)》,要通过这关,你需要把那段程序编译一下。要编译这段程序其实很简单,Google一个在线的编译器就可以了。(关于其它更多的古怪的编程语言请参看这里:http://esolangs.org/wiki/Language_list

第1关:这一关也是很简单的,你需要在网页上找到两个数,一个是X,一个是Y,然后求得X和Y的乘积。对于X,你可以观察一下那个数列游戏,对于Y,你可以Google一下就知道了(我在Coolshell的《如何用最有创造力的方式输出42》说过这个事)。

第2关:上面显示了一个不一样的键盘,我给了这个键盘的Wikipedia的链接。这个键盘叫Dvorak键,不同于我们的Qwert键。通过这个两个键盘的布局映射,你可以把下面那段读不懂的文字解出来(其实,你还是可以Google,有在线的转换)。把下面那段文字转成Qwert键的,你就会发现这是一段代码,这段代码非常著名,是1987年国际C语言混乱大赛一等奖的一段代码(你可Google “IOCCC 87 unix”)。(关于IOCCC你可以参看Coolshell之前的《6个变态的HelloWorld》、《如何混乱代码》、《如何写出无法维护的代码》这几篇文章)

第3关:扫描二维码以后,你会得到一个码表转换,你可以使用Shell的tr命令来转一下下面的话。转完后你就可以读懂了,读懂了你还需要使用rot13来转一下“shell”(Google一下,你会发现也有在线的转换器,另外还有其它的rot)

第4关:这是众多同学被卡在的地方。很多同学吐槽这题太坑了,别忘了这是游戏啊。我问了几个早先通关的同学,他们都说还好了,只要静一下心来多观察一下,你就会找出规律的。这个回文的模式是,一个大写字符和一个数字(顺序不限)把一个小字母套起来。于是,写成正则表达式是:

([A-Z])([0-9])[a-z]\2\1|([0-9])([A-Z])[a-z]\4\3

用shell命令可以很快地找到9个匹配,然后,像“cat”一样,取中间的小写字母组成一个单词。写成Shell命令是:

grep -o "\([A-Z]\)\([0-9]\)[a-z]\2\1\|\([0-9]\)\([A-Z]\)[a-z]\4\3" cat.txt | sed -E "s/(.)(.)(.)\2\1/\3/g" | awk '{printf("%s",$1)}' && echo ""

这题主要考的是你的观察能力和正则表达式。

第5关:如果你点了一下图片后,你就知道,这个连接http://fun.coolshell.cn/n/2014返回了一个数字,如果你把这个数字放到那个URL中,不断地替换其中的数字,你会得到一个新的数字。于是你就会得到最终的答案。

这道题本来我是想让大家写程序的,我原来设置了一共512个序列,但是考虑到服务受不了,所以,我把它降到了128个,这样保证你的程序可以在几秒钟内得到结果,而不会对我的服务器造成压力。但是我还是看到好几个同学人肉地copy+paste+回车刷了100多下,得到了最终答案。

第6关:通过中序和后序遍历还原一棵二叉树,然后再找到其最深的路径,然后得到一个字符串后,把这个字符串做为一个passcode代入那个openssl的命令行中。你就可以解密密文得到下一关的答案。

这个题,我本想设计得更隐晦一些,用一个“心脏流血”的图片来暗示openssl,然后用别的东西暗示AES-128-CBC,后来想想算了,主要还是考大家在大学里的二叉树的最基本的算法。并介绍一下openssl的shell命令行加解密的方法。

在网上的一些攻略中我看到了大家没有用程序,而是手动地花了一棵树出来。(其实,这设计这道的时候,我本来想设计成随机树,也就每个人看到的答案都不一样,我随机建树并且找最深路径的程序都写好了,但是我最终还是没有这样做,因为这无疑增加我对这个网页游戏的代码复杂度,而我又没有太多的时间,而谜题的各种形式已经够让我花精力的了,你虽然看到了10道题,但是其实我设计了一共有16道题,我反复斟酌,即不想为难大家,又不想太简单和无聊,所以最终release了这十道题)

第7关:N皇后问题,这个问题也是大学里的题。9皇后一共有352个解,你需要把这352个解代到那个sha1的公式中(需要上一关用于解密的passcode),这样你就会得到一个解。然后这就是通关口令。

第6关和第7关的算法题你要是不会写的话,Google一下,反正我们是“大自然的搬运工”,不是吗?呵呵。

第7关这题啊,我看到一个同学用穷举的1-9的排序组合的方式来向服务发请求,从123456789开始,我都看SB了,因为这关的通答案是9开头,我勒了个去!你得对我的服务器发多少次请求啊,才能得到一个200的回复啊。TNND。服了。不过这个同学我最终还是给通过了,没有判定成作弊。

第8关:Excel的列号编程,这一关写成代码其实并不难的。但我看到网上给的好些答案,大家都是用手算。也OK,这题本身就没有什么难度,但是因为这个26进制是从1开始的,写出来的代码并不非常容易,一些边界条件很容易就break掉了。这题完全考的是编码。把COOLSHELL除以SHELL的数转成字符串。然后就进入最后一关了。

然后,我又见到有个同学用了穷举的方式,TNND,其实每道题都有人在用穷举的方式,我勒个去。他从AAA开始穷举,不一会就穷举出正确答案了。尼玛!

第9关:一个猪圈和一个共济会的logo,你Google一下,你就知道答案了。这题纯粹就是介绍知识的。不知道大家有没有去wikipedia上了解了一下这个猪圈密码和共济会是怎么一回事吗?这样的密文叫图片密文,还有很多类似的图片密文的。你知道吗?有相应的字库哦。也有在线的生成器哦。(因为我最近在学各种安全的基础知识,所以了解到了这个东西)

通关:于是你就通关了。你会发现你得到了一个helloworld,这个字符串,在我一放出来这个谜题的时候,就有很多人在尝试helloworld就是那段brainfuck的代码的输出。我汗啊。还好我做了一个比较复杂的防作弊检查……

总体来说,这些关卡都不难,但是你最少也得用2-3个小时。Top100页面时统计的平均时间是10个半小时。

再说一个花絮,自从,8月3日上线后,8月4日在网上就有了相关的解答攻略,还是在V2EX上,于是出现了好些只花了几分钟就做完了的人。不过好在事先我就预料到了这个事,事先预备好了“反作弊分析”的脚本,细节不想说太多,反正就是说,我会记录你答案的整个过程和行为,以此来确保TOP100中的人基本都是用自己能力答的,当然,可能会有漏判,但至少也是写过代码的。

活动心得

因为是第一次做活动,所以有很多感想,下面写下一些做这个活动的心得,供大家参考:

1)要做好一个这样的解题游戏并不简单

  • 关卡设计:最花力气的地方就是设计每个关卡,我不能设计得太过隐晦,也不能设计得太过明显。最好是要符合参与者的能力,但又要高于平均以上水平的能力,最好在90%以上。这样会让大家有挑战感,但是又不会有挫败感。这个度相当难把握。总体而言,本次设计的谜题中还有很多可以改进的地方。但这毕竟是我的第一次,也算是我用其来感受一下应该怎么设计游戏。
  • 游戏黏性:除了设计谜题,还需要针对用户可能会答错的地方来给用户一些提示,原因也是为了不让用户有挫败感,虽然用户没有答对,但是需要用这些页面来鼓励用户You made some progress,这个很重要。这会让用户对游戏更有粘性,并且更愿意有更多的投入。找到这些地方也不是一件容易的事,因为做为游戏的设计者来说,很难从一个不知到答案的角度去思考。所以需要试玩,在fun.coolshell.cn正式release之前,我找了几个人比较聪明的人来试玩了一下,对这个游戏的帮助很大。
  • 游戏管理:这样的一个在线游戏自然会出一些作弊者,为了游戏的公平性,你需要剔除这些作弊者。所以,我设计了一些比较简单的记录用户所有过程的监测的算法。通过cookie和后台的http log来一同分析。这个部分也比较地花时间。我上周六的时候写这些代码写到了凌晨4点,导致脑子不清楚,出了些bug,导致在大家游戏过程中重置cookie等伤害用户体验的事件。所以说啊,不能赶啊,也不能加班啊。

2)关于怎么做一个活动的感想。

  • 这次活动的背景。首先,想做这个活动的起因是这样的。我一个朋友在微博上做活动——“转发微博或@几个人怎么怎么滴就有机获得什么什么的”,我在这里把这种活动简称为“转就送”活动。于是遭到了水军的刷奖品,导致他根本分不清楚哪些是正常人,哪些不是,因为新浪微博上有大量的这要瓣机器人,所以他这次活动最后失败了。我说,你得加点难度啊,要加点智商啊。而且,我看过太多的活动都是这样的,而且很多公司的活动也是这样的,我觉得太low了。于是,我就萌生了自己尝试一下的念头。
  • 我对做活动的理解。我一直觉得网上那些诸如“转就送”或是“抽奖”这样的活动都比较SB,这些人根本就不知道怎么做活动。这样做活动不需要智商,简单粗暴,效果一点也不好,活动做完了,人就走了,人们马上就忘了。我以为做活动的精髓是这样的:
    • 真正的价值。其实,好的活动并不只是物品的价格,而是参与这个过程的感觉和体会。如果你让人觉得这是碰运气的,那么这个活动除了用物品价格来吸引人,也就没别的什么了。如果这个活动的参与过程是让人有成就感的,要有成就感那么就需要有一定难度的挑战,而且这种挑战也是让众人认可和佩服的,那么这个奖品的价格再小,价值也会很大。比如:Olympic Game,World Cup之流的,世界顶尖,四年一次,来之不易。这才是活动的价值。本次的fun.coolshell.cn上的活动,我希望让大家在做题的过程中学到一些东西,另外也希望做出来的人有一种成就感。
    • 让人有回味。那些简单的“转就送”式的活动不会让人产生任何的回味,只会让人产生很大的反感。就像那些“让你转发,不转就死全家”的东西,相当的让人反感。真正的回味是人们对活动参与过程的讨论和交互。在fun.coolshell.cn上线后,我就看到好几个社区在讨论这些谜题,这就是所谓的回味。只有人们对过程的回味,对参与的回味,才会让这个活动真正的成功
    • 暴露活动过程。有挑战的活动,一定要有一个Who’s Who的东西,而且是随时动态更新的可以让大家查询的,这样才会从另一个侧面激发大家的热情。因为fun.coolshell.cn一开始说了只给前十个人送东西,结果在过程中,我发现了就半天时间就差不多满了,那时我在想,如果没有奖品了,剩下的人还会不会玩了?于是我飞快地开发了一个TOP100的排行榜,让大家可以看得到这个过程,虽然前十以后就没有奖品了,但是,能上这TOP100也不错。于是乎,在没有奖品情况下,依然在激发着大家的解题热情。有竞争总是一件有意思的事情,因为成就感总是来自竞争。(注:为什么top100中会有“xxxxxx”的用户,因为一开始我用的是用户提交的name,但是后来有人告诉我,这个名字可能是真名,所以,我就改成了weibo或twitter的ID,而xxxxx则是没有留下微博或twitter的)

最后吐个槽,我真的觉得那些“纯靠运气的活动”相当的SB,我看到好些公司的运营部门招了多少个所谓的高学历和高能力的人,结果干出来的运营活动的水平,其实,也就是个有小学文化水平的人就可以做的了。那些“转就送式的”、“抽奖式的”的活动,是个人都会干,根本不需要高学历的人。

其它

1)本次活动中,有一个隐藏关卡,还没有人找出来。要能达到隐藏关卡,需要完成所有的题目。

2)活动的通关页是HelloWorld,这意味着——这仅仅是个开始

最后感谢大家为这个活动付出的时间!

(全文完)

Loading...