zoukankan      html  css  js  c++  java
  • 西邮Linux小组免试题揭秘

    还记得东京大学情报理工学系的招生海报吗?只要答对了问题,然后你就被录取了。当时可火了,人人和微博疯狂转载。

    tokyo

    如今西邮Linux小组也搞了个这样题目,只要你能答对,就能免试进入西邮Linux小组!感觉挺好玩,遂挑战一把。

    题目原文在这里:http://www.xiyoubbs.com/thread-81454-1-1.html

    第一关

    题目

    题目就是一段密文:

    0011011101111010101111001010111100100111000111000000000000000011100110111011010111100011010100101111011000000000000000000000000000000000000000000000000000000000010011100000000000000000000000000000000000000000000000000000000001011110001100000101000101001101000000000001000110011001000010001010011010000010100110011011100011000101100001110010010001011010011100010011010111011001000011110111010110101101101110011100111111110101000010110111001110001001011101111011010010011000001110111001111100010100100100010010110101010101100001000101011001110010101111101100100100000101011100000011011001010101000110111101011001010101000001101001000111000011100101101111010001010001100011110110000011111010100101111100101010000111010111001110111011011110100100001001110001111010110100111001110000111111100100010011010001011110000101010000110101000111100101111100110101000100111101101100000110111111000111100001010111000101100010011111100111101110111110111111001111010010000100010100000101011101011010001010111011110111011001000001111100110100111101011011111001101110000110101101010011101010101001000011011110111111001111000010000110010110101100100010110110101000110110111001100011010011111001110110111101100000101001011101110011111101010110101100010001011001010000100100100000001010110111111101101111001000011010111001101110100110000101110110100110101100100011100011110100111011010001001010110110101011010111111001001110101001011110010010001011101000010001101010001110100001011000001110011000100001110110101001000101110001100001010000101100101101111100101110011001011000111011010111010000010101111110001100001110011110010011110110101100110011101101110001101110110001101101001001011110110101101010110111111100111110000111010010111111110001010111000010100000000001100110001101111011001010101001100100101101010011110000010000100111000011110111001001100110101101101110101100111001101000010010101000100101111010101000000100011000101100110011111010101111000110100010110011000000110000000000110110001111011110001110011101000100100010010111110000001001000100100011011100110001011111101101011110100101101000010011010100110101100110001010011101111011101101111010000110110100111101100101110001100010100111111101101011110001101001111110010000000000000000000000010000010000000110000000000000000100001001100000001111011000000000000001110000101100000001000000000000000100100011000000110000000100000001000001010101110100000000000000000000000100000000000011001000001000000010000000000000100000001010000000011000110001111011110010111100101100000000000000000000010100000001000100010000111100000000011000110000000001101111000000000110010000000000011001010000000000101110000000000110001100000000000000000000000000010100000010100000000100000000000000000011101100100000001000010110000100100000110011100000000100010101000001100000000100000000001000001000000010110100100000010000000000000000
    
    分析

    一大串01代码,二进制也是01代码,其中可能有某种关联,首先转换成ASCII代码看看吧。

    在线的工具是最方便的!http://home.paulschou.net/tools/xlate/。把那一串01代码贴进第二个框,单击下面的“DECODE”,瞬间就转完了:

    /images/zhuanma.png

    注意观察一下第一个文本框,前两个字母是“7z”,7z是什么?7z不就是7zip压缩格式吗?难道这是一个7z的压缩包?有可能!再找个7z压缩包打开看看,vim -b + 文件名 打开一个7z格式的压缩包,输入: %!xxd 查看其16进制编码:

    /images/vim_xxd.png

    再和上面的图片的第三个框的编码比较一下,发现了什么?前面的37 7a bc af 27 1c 00 03完全是一样的!这不是巧合,这足以让我们确信这就是一个7z的压缩包,下面的任务,就是将压缩包还原,用python写了个小程序:

    #!/usr/bin/env python
    #coding=utf-8
    data = open('data.txt')
    out = open('out','a')
    while True:
        d = data.read(8)
        if len(d) != 8:
            break
        out.write(chr(eval("0b%s"%d)))
    data.close()
    out.close()
    

    data.txt里面放的是那以长串01代码,执行程序后得到一个名字为out文件,用file out命令查看文件类型,显示:out: 7-zip archive data, version 0.3。果然没用猜错!接下来就是解压这个文件了:7z e out,然后,我们就会发现目录下多了一个code.c文件,内容如下:

    #define ____ puts
    #define __ main
    #define _ int
    #define _______ char
    #define _____ {
    #define ______ }
    _ puts (_______ *); _ __() _____ ____ (
    "\151\156\164\040\143\157\144\145\040\133\135\040\075\040\173188"
    "66\0700168\054\04020163\0658202\054\04019702\0639849\054\040"
    "016533\06464554\054\0402016\06423544\054\04017179\0706918\054\0401"
    "8653\0611846\054\0400x6\06772\175\073\012\143""\150\141\162\040\052"
    "\141\156\163\167\145\162\040\075\040\050\143\150\141\162\040\052"
    "\051\143\157\144\145\073" ); ______
    

    这是神码东东?一大堆宏定义,难道要我们翻译码?不管了,让计算机自己去翻译吧。编译执行:gcc code.c -o code,编译成功,执行./code,得到下面的结果:

    int code [] = {1886680168, 2016358202, 1970239849, 016533464554, 2016423544, 1717986918, 1865311846, 0x6772};
    char *answer = (char *)code;
    

    这又是神码东东?怎么看着这么像C语言,这应该就是C语言代码,写个小程序,执行一下这个代码:

    #include <stdio.h>
    int main()
    {
        int code [] = {1886680168, 2016358202, 1970239849, 016533464554, 2016423544, 1717986918, 1865311846, 0x6772};
        char *answer = (char *)code;
        puts(answer);
        return 0;
    }
    

    编译执行,你猜结果是什么?结果是:http://xiyoulinux.0xffffff.org,一个网址!哈哈,果断打开,页面跳转到了http://xiyoulinuxgroup.sinaapp.com/,页面是这样的:

    /images/second2.png

    您可以通过这个链接访问这个页面:页面链接,还能查看源码。

    侥幸过了第一关!

    第二关

    题目在哪?

    我们看到上面的页面有一个输入框,随便输入点东西,提示“口令错误!”,看来,这一关是要输入一个正确的口令才能过关,那口令是神码?自己找。

    打开源码,首先映入眼帘的是好多数字,先把这些数字保存到num.txt里面,写个小程序分析一下:

    a = open("num.txt")
    li = a.read().split()
    num = [int(i) for i in li]
    count = len(num)
    max = max(num)
    min = min(num)
    print max,min,count
    

    统计结果表面,这些数字最大是99991,最小是8053,总共8582个。这些数字有什么含义呢?开始猜吧。

    记得东京大学里面有声音,这些数字不会是声音吧?用数字表示声音的音调高低还是什么?如果表示声音的话范围也太大了吧。人的声音频率范围是64~523Hz,显然上面提供的数有点大啊。

    或者表示图片,表示像素点颜色?像素点颜色最大是(255,255,255)255*255*255 = 16581375,貌似差距也比较大。想了半天,感觉不太靠谱,开始重新审视那个页面。

    页面里面有两个东西比较可疑: 
    cript src="http://s16.cnzz.com/stat.php?id=5134185&web_id=5134185&show=pic" language="JavaScript"></script> 
    <link href="question.css" rel="stylesheet">。 
    其中前一个JS打开看了一下是挺乱的,没猜错的话应该是个页面访问统计的东西,因为CNZZ就是数据专家站长统计。 下面那个CSS点开一看,内容是这样的:

    .STYLE1 {
        font-size: 36px;
        font-family: "黑体";
    }
    .STYLE2 {font-family: Arial, Helvetica, sans-serif}
    
    /*%E8%AF%B7%E5%9C%A8%E5%8E%9F%E9%A1%B5%E9%9D%A2%E6%95%B0%E5%AD%97%E4%B8%AD%E6%89%BE%E5%87%BA%E5%94%AF%E4%B8%80%E7%9A%84%E5%90%88%E6%95%B0*/
    

    最下面的一个注释相当可疑啊!有点经验的应该能看出来是url编码,什么意思?解码一下就知道了,懒得写程序,用在线的吧:http://tool.chinaz.com/Tools/URLEncode.aspx,把那段带编码的输进去,点击UrlDecode解码,瞬间题目就出来了:“请在原页面数字中找出唯一的合数”。

    天啊,原来是找合数,那就简单了,8000多个数,用python写个小程序瞬间搞定:

    #!/usr/bin/env python
    #coding=utf-8
    import math
    
    a = open("num.txt")
    li = a.read().split()
    num = [int(i) for i in li]
    a.close()
    
    def test(num):
        for i in range(2,int(math.sqrt(num))+1):
            if num % i == 0:
                return True
        return False
    
    for i in num:
        if test(i) == True:
            print i
    

    结果是98201,果断在页面输进去,然后就算过关啦!然后页面显示一个二维码:

    /images/xiyouwechat.jpg

    图片无法显示了,源文件在这里,可以下载的:http://ma6174.u.qiniudn.com/xiyouwechat.jpg

    页面的内容是这样的:

    <h1 align="center">[3/5]</h1><div align="center"><img src="http://heylindayi.sinaapp.com/test/new.jpg"></div><script src="http://s16.cnzz.com/stat.php?id=5134185&web_id=5134185&show=pic" language="JavaScript"></script>
    

    第三关

    看到二维码,第一反应就是扫一扫,用我查查一扫,扫出来个微信的url,估计是微信了,然后用微信扫一扫,然后就加入了西邮Linux兴趣小组微信,然后就是各种调戏,调戏,调戏。调了半天没调出个翔来。。。

    再回页面找找,源码就上面那些,没什么啊,那问题在那里?有问题可以想法解决,不知道问题就悲剧了,都不知道往哪方面想。

    是不是图片有猫腻?抱着试试看的态度用vim打开了那张图片,看到最后答案就出来了,在最后一行写着:password:LinusTorvalds1969

    好吧,这就是密码了,然后在在微信上输入这一串密码,他们的微信返回了这些信息:“对不起,你目前还没有通过任何一次面试.”。

    好吧,看来我这个外校的只能挑战到这了。。

    总结

    西邮的题目还是很有技术含量的,对新手来说还是很有挑战性的!做出题来不牛逼,出题者才牛逼!

    题目不需要特别高深的编程基础,只要有点基础,有点经验,敢于探索,勇于发现和创新,喜欢折腾,做出题目来就不难。这正是Linux小组成员必备的技能或素质。

    题目很有趣,或许通过讲解,能让更多的人对Linux感兴趣,对Linux技术感兴趣,这就达到目的了。

    推广一下西邮Linux兴趣小组:

    顺便推广一下山东理工大学Linux小组:

     
    闯关还没有结束,下一篇更精彩

    博主ma6174对本博客文章(除转载的)享有版权,未经许可不得用于商业用途。转载请注明出处http://www.cnblogs.com/ma6174/

    对文章有啥看法或建议,可以评论或发电子邮件到ma6174@163.com


  • 相关阅读:
    Hibernate---对象的三种状态
    grunt+bower依赖管理
    grunt 的安装和简单使用
    sqlserver dmv 动态管理视图
    ado.net 数据库连接池
    桥接模式
    .net MVP
    主定理(分治算法)
    图中环的判断
    选举协议paxos 协议 理解
  • 原文地址:https://www.cnblogs.com/ma6174/p/3058889.html
Copyright © 2011-2022 走看看