安云网 - AnYun.ORG | 专注于网络信息收集、网络数据分享、网络安全研究、网络各种猎奇八卦。
当前位置: 安云网 > 娱乐八卦 > CoolShell解密游戏的WriteUp

CoolShell解密游戏的WriteUp

时间:2014-08-27来源: 作者:pynwolf点击:
游戏地址:http://fun.coolshell.cn/一个很有意思的小游戏,也很费脑子的说TAT0-Fuck your brain本关地址:http://fun.coolshell.cn/first.html进去以后,发现一些乱七八糟的东西,下面一行提示:My brain ha…


游戏地址:http://fun.coolshell.cn/

//内容来自AnYun.ORG

一个很有意思的小游戏,也很费脑子的说TAT

//本文来自安云网


//内容来自安云网

0-Fuck your brain

//内容来自AnYun.ORG

本关地址:http://fun.coolshell.cn/first.html

//内容来自安云网


//内容来自AnYun.ORG

进去以后,发现一些乱七八糟的东西,下面一行提示:My brain has been fucked,通过BaiDu得知这是一种编程语言,称之为Brain Fuck(我不会说当我看到这个着实汗了一把),然后在网上找到编译器 //安云网咨询系统

编译器代码

//copyright AnYun.ORG

#include <stdio.h>
int  p, r, q;
char a[5000], f[5000], b, o, *s=f;
void interpret(char *c)
{
    char *d;
    r++;
    while( *c ) {
        switch(o=1,*c++) {
            case '<': p--;        break;             case '>': p++;        break;
            case '+': a[p]++;     break;
            case '-': a[p]--;     break;
            case '.': putchar(a[p]); fflush(stdout); break;
            case ',': a[p]=getchar();fflush(stdout); break;
            case '[':
                for( b=1,d=c; b && *c; c++ )
                b+=*c=='[', b-=*c==']';
                if(!b) {
                    c[-1]=0;
                    while( a[p] )
                    interpret(d);
                    c[-1]=']';
                    break;
                }
            case ']':
                puts("UNBALANCED BRACKETS"), exit(0);
            case '#':
  if(q>2)
                printf("- - - - - - - - - -/n%*s/n",*a,a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],3*p+2,"^");
                break;
            default: o=0;
        }
 if( p100)
            puts("RANGE ERROR"), exit(0);
    }
    r--;
}
main(int argc,char *argv[])
{
    FILE *z;
    q=argc;
    if(z=fopen(argv[1],"r")) {
 while( (b=getc(z)) > 0 )
            *s++=b;
        *s=0;
        interpret(f);
    }
} 
//内容来自安云网

把该编译器代码存为test.c

//ANYUN.ORG

然后执行 //本文来自安云网

gcc test.c -o test 

//安云网,anyun.org

得到的test即为该语言编译器,编译的时候有俩Warning,很抱歉我无视了这个Warning… //内容来自AnYun.ORG

然后将Brain Fuck的代码存为test.bf //本文来自安云网

<<<<<<<<<<<>>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<<>>>>>>>>>>>>>>---.+++<<<<<<<<<<<<<<>>>>>>>>>>>>>>----.++++<<<<<<<<<<<<<<. //本文来自安云网 

然后在shell下执行即可得到答案 //安云网,anyun.org

./test test.bf 
//内容来自安云网

//安云网咨询系统

如图,得到第一关地址 //copyright AnYun.ORG


//本文来自安云网

1-Multiply //安云网咨询系统

本关地址:http://fun.coolshell.cn/welcome.html

//内容来自AnYun.ORG


//安云网,anyun.org

首先进去看到一个序列 //ANYUN.ORG

2,3,6,18,108,? //copyright AnYun.ORG 


//copyright AnYun.ORG

然后上面给出了算法X * Y,观察序列可得知后一个数字是前两个数的积,于是得出?地方为18*108=1944 //内容来自安云网


//内容来自AnYun.ORG

打开http://fun.coolshell.cn/1944.html可以看到X已经成了红色,同时得到另一个提示“其中一个答案为1944”,即X=1944 //ANYUN.ORG

然后找寻另一个数字,看到另一个提示 //本文来自安云网

What is the meaning of life, the universe and everything? 

//内容来自AnYun.ORG

扔到Google中,找到Wiki中的一个提示 //ANYUN.ORG

根据道格拉斯·亚当斯的小说《银河系漫游指南》,42是“生命、宇宙以及任何事情的终极答案”。因此,42也经常被用来向这一作品致敬,例如:
您若在Google输入the answer to life, the universe, and everything,Google会直接回答42——而且还是用Google计算器算出来的。
可以得到Y=42 //内容来自安云网 

输入http://fun.coolshell.cn/42.html也可以验证这一点,然后X*Y=1944*42=81648

//安云网咨询系统

得到下一关地址81648.html //ANYUN.ORG


//内容来自AnYun.ORG

2-Keyboard //本文来自安云网

本关地址:http://fun.coolshell.cn/81648.html //copyright AnYun.ORG


//内容来自AnYun.ORG

首先进去,一个硕大的键盘,不过这个键盘貌似有些问题,键盘上一些键和现在用的qwerty键盘有些出入,该图上有个超链,得知该种键盘被称之为Dvorak键盘,是为了更快的提高打字速度而设计出来了,通常是程序猿和打字猿使用率较高(隐隐感觉这两个职业没差别….)

//本文来自安云网


//安云网咨询系统

先把Dvorak键盘的布局换成QWERTY的布局,如图 //ANYUN.ORG


//内容来自AnYun.ORG

黑色为Dvorak布局,红色为QWERTY布局 //copyright AnYun.ORG

//本文来自安云网

把给出的提示用QWERTY布局表示出来即可 //copyright AnYun.ORG

//这是给出的代码
macb() ? lpcbyu(&gbcq/_21%ocq12_=w(gbcq)/_dak._=}_ugb_[0q60)s+ 
//本文来自安云网
//这是QWERTY布局下代码
main() { printf(&unix["21%six12"],(unix)["have"]+"fun"-0x60);} //内容来自AnYun.ORG 

把该代码编译之后得到一个程序,运行返回结果unix,过关,如图 //copyright AnYun.ORG

//安云网,anyun.org


//本文来自安云网

3-QR Code //本文来自安云网

本关地址:http://fun.coolshell.cn/unix.html

//安云网,anyun.org

首先映入眼帘的是一个二维码,使用二维码识别工具可得到下面提示的码表,如图

//安云网咨询系统

//安云网,anyun.org

得到字符转换码表为

//内容来自AnYun.ORG

[abcdefghijklmnopqrstuvwxyz] <=> [pvwdgazxubqfsnrhocitlkeymj] //ANYUN.ORG 

然后转换字符,使用python语言,源代码为 //安云网,anyun.org

#Thanks For Code by Mutalisk
content_de = '''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.'''.lower()
 
content = ''
 
keychr_de = 'pvwdgazxubqfsnrhocitlkeymj'
keychr = 'abcdefghijklmnopqrstuvwxyz'
 
for s_chr in content_de:
    if s_chr in keychr_de:
        content = content + keychr[keychr_de.index(s_chr)]
    else:
        content = content + s_chr
 
print content 
//内容来自安云网


转换后截图如下 //copyright AnYun.ORG

//本文来自安云网

转换出结果为:

//安云网,anyun.org

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. 

//安云网,anyun.org

翻译出来意思为:

//本文来自安云网

只要有shell就会有办法咩我希望你捏,能使用shell命令去解决这个问题咩,那么现在捏,请使用rot13来过关咩 
//安云网咨询系统

然后打开url:http://fun.coolshell.cn/shell.html

//本文来自安云网

得到新的提示: //ANYUN.ORG

You really are close, but the “shell” is not the final answer. 
//安云网,anyun.org

翻译过来为: //copyright AnYun.ORG

你已经很接近正确答案了咩,但可惜shell不是最终的答案咩. 

//内容来自安云网

然后使用rot13来加密shell得到字符串,furyy,过关 //内容来自安云网

echo &#039;shell&#039;|tr &#039;[A-Za-z]&#039; &#039;[N-ZA-Mn-za-m]&#039; //安云网咨询系统 


//ANYUN.ORG

4-cat

//copyright AnYun.ORG

本关地址:http://fun.coolshell.cn/furyy.html //本文来自安云网

//内容来自安云网

首先看提示,提示说答案在源代码的底部,拉到底下,惊呆了TAT //内容来自AnYun.ORG

//安云网,anyun.org

这一坨TM是什么… //本文来自安云网

然后仔细看了一下标题Palindrome还有左边的一些,可以看到这关是以回文为主体的

//内容来自安云网

找正则大牛帮我写了一个正则

//copyright AnYun.ORG

([A-Z])([0-9])[a-z](\2)(\1)|([0-9])([A-Z])[a-z](\6)(\5) //内容来自安云网 

然后把html中注释掉的东西拉到http://tool.oschina.net/regex匹配一下,得出结果如图

//内容来自AnYun.ORG

//ANYUN.ORG

得出这些回文 //ANYUN.ORG

共找到 9 处匹配:
E1v1E
4FaF4
9XrX9
O3i3O
0MaM0
4GbG4
M5l5M
0WeW0
Y0s0Y //copyright AnYun.ORG 

然后观察网页主体的回文,可以看到cat来自于回文中央的那个字符串的拼接,把刚才得出的匹配中间字符拼接出来即为key:variables

//内容来自安云网


//安云网,anyun.org

5-variables //内容来自AnYun.ORG

本关地址:http://fun.coolshell.cn/variables.html //安云网咨询系统

本页提示:继续跑,你会找到你要的结果

//安云网咨询系统

点击图片,进入一个url,http://fun.coolshell.cn/n/2014,页面返回一个数字,既然提示是继续跑,里面唯一可控的只有url后面的数字,那么就去跑这个数字,这个页面显示的数字放到url进行下次循环 //内容来自安云网

用seraph写了个小程序跑了一下,秒出 //copyright AnYun.ORG

dim a
function main
    start = "2014"
    a = GetHTTP("http://fun.coolshell.cn/n/"&start)
    Print(a)
    for ForCount = 1 to 999999
        CStr(a)
        a = GetHTTP("http://fun.coolshell.cn/n/"& a )
        Print(a)
    next
end function //内容来自安云网 

如图,得出key为tree //安云网,anyun.org

//本文来自安云网


//copyright AnYun.ORG

6-tree

//安云网,anyun.org

本关地址:http://fun.coolshell.cn/tree.html //copyright AnYun.ORG

看图就可以知道,这特么是二叉树….

//安云网,anyun.org

花了3个小时,对这个树进行了复原,复原图如下 //安云网咨询系统

//本文来自安云网

吐槽一下,这么复杂的树这是要死人的节奏啊 //本文来自安云网

有了树结构图之后就可以得出前序(Pre-order): //内容来自安云网

z, W, b, T, g, h, H, V, 3, o, P, p, 8, L, F, G, u, A, f, n, 0, 1, r, m, w, x, J, 7, e, i, Q, Y, Z, 2, 5, v, K, q, k, 9, y, C, B, N, D, U, 4, l, c, M, I, E, a, j, 6, S, R, o, X, s, d //本文来自安云网

同时由图得知该二叉树最深路径为:z, W, p, 8, L, G, n, 0, 1, w, x, J, 7 //安云网咨询系统

然后把最深路径作为pass带入openssl中解密那个base64的字符串即可得到明文

//内容来自AnYun.ORG

echo U2FsdGVkX1+gxunKbemS2193vhGGQ1Y8pc5gPegMAcg=|openssl enc -aes-128-cbc -a -d -pass pass:zWp8LGn01wxJ7 //内容来自AnYun.ORG 

//安云网,anyun.org

得到明文为nqueens 过关 //安云网咨询系统


//内容来自安云网

7-N Queen //ANYUN.ORG

本关地址:http://fun.coolshell.cn/nqueens.html //安云网,anyun.org

历史上著名的N皇后问题,给出的范例为8皇后,求9皇后,code为从右往左,皇后依次在纵坐标上的顺序

//内容来自AnYun.ORG

在网上找了一份N皇后算法代码,可得到9皇后问题有352个解,然后修改了一下代码,可以直接生成出题目所要求的code,得到352个code

//本文来自安云网

/**
* n皇后问题
* date       : 2010-3-12
* author     : lee
* change     :LinE
* change date:2014-8-4
*/
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
#define QUEEN 9    // the number of the queen
#define INITIAL -10000  //defines the initial value of  the board
 
//container
int a[QUEEN];
 
//check if the queen can be placed on the position
int valid(int row, int col);
//initialize the board
void clear();
//print the result
void print();
//run the n-queen program
void queen();
 
int main(void)
{
    clear();
    queen();
    return 0;
}
 
void clear()
{
    int *p;
    for (p = a; p < a + QUEEN; ++p) {
        *p = INITIAL;
    }
}
 
void print()
{
    int i,j,l;
    for (i = 0; i < QUEEN; ++i) {
        for (j = 0; j < QUEEN; ++j) {
            if (a[i] != j) {
               //printf("%c ", &#039;.&#039;);
             }
            else
            {
                 l=j+1;
                printf("%d",l);
                //printf("%c ", &#039;#&#039;);
            }
        }
    }
    printf("\n");
    //printf("--------------------------------------------\n");
}
 
int valid(int row, int col)
{
    int i;
    for (i = 0; i < QUEEN; ++i) {
        if (a[i] == col || abs(i - row) == abs(a[i] - col))
            return 0;
    }
 
    return 1;
}
 
void queen()
{
    int n = 0;
    int i = 0, j = 0;
    while (i < QUEEN) {
 
        while (j < QUEEN) {
            if (valid(i, j)) { //test if the queen can be placed on the position
                a[i] = j;     //place the queen on the next line
                j = 0;
                break;
            } else {         // if not, check the next position
                ++j;
            }
        }
 
        if (a[i] == INITIAL) {   //if the current queen can&#039;t find its place
            if (i == 0)        // and this is the first line ,then program end
                break;
            else  {           //else   backtrack
                --i;
                j = a[i] + 1;
                a[i] = INITIAL;
                continue;
            }
        }
 
        if (i == QUEEN - 1) {  //already got a solution, print the result
            //printf("answer %d : \n", ++n);
            print();
        //  _sleep(600);
            j = a[i] + 1;
            a[i] = INITIAL;
            continue;
 
        }
 
        ++i;      // go on to place the queen on the next line if has any more
    }
} //内容来自AnYun.ORG 

//安云网,anyun.org

把该程序编译后,执行的结果重定向到code.txt做下一步的使用

//ANYUN.ORG

gcc queen.c -o queen
./queen>code.txt //内容来自AnYun.ORG 

然后编写一个php脚本,来对所得的解法爆破

//ANYUN.ORG

<?php
$f = fopen("/root/Desktop/test/code.txt","r");
$passwd="zWp8LGn01wxJ7";
$hash="e48d316ed573d3273931e19f9ac9f9e6039a4242";
while (!feof($f))
{
    $code = fgets($f);
    if (sha1($passwd.$code)===$hash) {
        //因为fgets自带了一个换行符,故这里不需要再添加"\n"了
        echo $code;
     }
}
fclose($f)
?> //本文来自安云网 

得出结果为953172864,如图

//本文来自安云网

//内容来自AnYun.ORG


//安云网咨询系统

8-Excel Column //copyright AnYun.ORG

本关地址:http://fun.coolshell.cn/953172864.html //本文来自安云网

感觉这题和Excel关系不大,主要还是一个幂运算,这个类似于16进制转10进制运算,可以把它看成26进制转10进制,首先求出来式子当中各个字母在字母表中的位置

//本文来自安云网

C—-3 //内容来自安云网

O—-15 //ANYUN.ORG

L—-12

//内容来自AnYun.ORG

S—-19

//ANYUN.ORG

H—-8 //ANYUN.ORG

E—-5 //安云网咨询系统

然后列出算法,计算出COOLSHELL和SHELL在10进制下的数字 //内容来自AnYun.ORG

算法可以参考http://www.cnblogs.com/lavezhang/archive/2012/05/14/2499000.html这里来查看 //安云网咨询系统

COOLSHELL = 3*26^8+15*26^7+15*26^6+12*26^5+19*26^4+8*26^3+5*26^2+12*26^1+12*26^0 = 751743486376
    SHELL = 19*26^4+8*26^3+5*26^2+12*26^1+12*26^0 = 8826856 //安云网,anyun.org 

写了一个C语言小程序,发现数值太大溢出了,换成长整之后还是溢出了TAT,后来朋友让我把公式丢谷歌,果然万能的Google帮我计算出了答案 //copyright AnYun.ORG

//内容来自安云网

//安云网咨询系统

直接结算结果 //copyright AnYun.ORG

COOLSHELL / SHELL = 85165

//安云网,anyun.org

然后对这个数字循环计算除数余数,每一步都只取整数部分,答案立马就出来了 //安云网,anyun.org

//个位计算
85165 / 26 = 3275
85165 % 26 = 15   //O
//十位计算
 3275 / 26 = 125
 3275 % 26 = 25   //Y
//百位计算
  125 / 26 = 4
  125 % 26 = 21   //U
//千位计算
    4 / 26 = 0
    4 % 26 = 4    //D //内容来自安云网 

最终结果为DUYO,后来自己写了个python的小程序也实现了这个过程 //本文来自安云网

import math
 
COOLSHELL = 3*26**8+15*26**7+15*26**6+12*26**5+19*26**4+8*26**3+5*26**2+12*26**1+12*26**0
SHELL = 19*26**4+8*26**3+5*26**2+15*26**1+15*26**0
print &#039;COOLSHELL=&#039;,COOLSHELL
print &#039;SHELL=&#039;,SHELL
NUM = int(COOLSHELL / SHELL) + 1
print &#039;COOLSHELL / SHELL=&#039;,NUM
temp = NUM
a = temp / 26
b = temp % 26
c4 = chr( b + 64)
print &#039;a=&#039;,a
print &#039;b=&#039;,b
print c4
temp = a
a = temp / 26
b = temp % 26
c3 = chr( b + 64)
print &#039;a=&#039;,a
print &#039;b=&#039;,b
print c3
temp = a
a = temp / 26
b = temp % 26
c2 = chr( b + 64)
print &#039;a=&#039;,a
print &#039;b=&#039;,b
print c2
temp = a
a = temp / 26
b = temp % 26
c1 = chr( b + 64)
print &#039;a=&#039;,a
print &#039;b=&#039;,b
print c1
print &#039;Pass is :&#039;,c1+c2+c3+c4 
//内容来自安云网


//安云网咨询系统

9-Fraternal Organisation

//内容来自AnYun.ORG

本关地址:http://fun.coolshell.cn/DUYO.html

//copyright AnYun.ORG

首先看提示,提示意思为,如果你能找到上述图片关系,那么这关将会很容易 //内容来自AnYun.ORG

然后把图片DOWN下来,左边是猪圈(pigpens),右边是共济会的标志(Freemasonry) //内容来自AnYun.ORG

然后以这二者为关键词去搜索,得到一个关联的词语,猪圈密码,然后按照猪圈密码的翻译图对照下面的密文译成明文即可

//copyright AnYun.ORG

该图为共济会的猪圈密码密文对照表 //copyright AnYun.ORG

//本文来自安云网

对照上题目,很快就可以翻译出密码明文为helloworld //内容来自AnYun.ORG

然后通关…

//安云网,anyun.org


//copyright AnYun.ORG

通关证明

//内容来自AnYun.ORG

//copyright AnYun.ORG

哇卡卡卡 //本文来自安云网


//ANYUN.ORG

大半夜的博客作者更新了隐藏关卡相关内容…… //内容来自AnYun.ORG


//内容来自AnYun.ORG

隐藏关卡:Dennis M. Ritchie //ANYUN.ORG

本关地址:http://fun.coolshell.cn/helloworld.html

//本文来自安云网

一开始不知道有隐藏关卡一说,直到该游戏作者自己说有隐藏关卡

//ANYUN.ORG

其它
1)本次活动中,有一个隐藏关卡,还没有人找出来。要能达到隐藏关卡,需要完成所有的题目。
2)活动的通关页是HelloWorld,这意味着——这仅仅是个开始。
最后感谢大家为这个活动付出的时间! 
//ANYUN.ORG

在完成之后,硕大的电源Icons在屏幕上,既然说了有隐藏关卡,那首先就是吧这个icons下到本地,然后用记事本打开,打开之后发现这么一些数据

//安云网咨询系统

//本文来自安云网

shutdown.rar,哈,果断后缀改名为.rar,然后发现打开以后有个名为helloworld的文本文档 //本文来自安云网

//安云网,anyun.org

打开该文档,拉到最底下发现下一关地址:DennisRitchie.html

//copyright AnYun.ORG

//内容来自AnYun.ORG

最基础的隐写术,使用copy命令完成的,经常用于图种和文件基础加密,很简单的的一个东西 //内容来自AnYun.ORG


//本文来自安云网

一些题外的话 //安云网咨询系统

从开始做到整个完成花了大概1天的时间,收益颇多,同时也感觉到自己的底子太弱了…好多加密解密都是在别人的帮助之下完成的,二叉树部分更是耗费大量时间进行了树还原(其实这个题用程序分分钟解出),不过总体来说收获是大于付出的,希望以后能更多地去参与这种比赛,去学习更多的东西……

//本文来自安云网

[原作者博客地址]

//ANYUN.ORG

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
验证码: 点击我更换图片
相关内容
推荐内容