原文链接:西邮Linux兴趣小组2014级免试挑战题

  

  又到了小组纳新的季节^_^,时间过的真快! 想起去年这会儿自己做免试题的时候根本找不着北@_@  有幸今年能够在这里和大家分享免试挑战题,也正如我们的纳新宣传语:"在这里,让每一个意想不到成为意料之中"。

  免试题共有设五关,分别由小组13级成员:郭遗欢、李林翰、高朴、王博、王伟豪 五位同学负责出的,在此向他们付出的辛苦表示感谢!

  计算机的世界是从0和1开始的,正如前两年的免试题一样,都是用一大串的01开头,虽然今年的免试题并不是这样,但几乎每一关都有01的身影~_~。免试题旨在发散同学们的思维,运用计算机方面的基础知识,挑战通关,超越自我 !!下面是前两年的免试题链接:

    2012级免试题: 西邮Linux小组免试题揭秘

    2013级免试题:  西邮Linux兴趣小组13级纳新免试题浅析

  下面由博主来简单分析一下今年的免试题,由于能力有限,有啥不够严谨之处欢迎大家留言交流~

【 第一关】

  首先是小组微信公众号(xiyoulinux)上推出了免试题的最新动态,给的是一个链接:orz.xiyoulinux.org。打开后发现是一个伪造的静态页面(下图),之所以说是伪造的,是因为小组官网是www.xiyoulinux.org,而且页面都一样,明显是个克隆品。

  随便点了几下,发现上面的链接都失效了,查看一下网页源码,啥都没有提示。注意到推送消息上有明显的这么一句话:“小伙伴们这边瞧 <img src="一张图"/>”结合给的这个页面,可能是在图片里藏了啥吧,试试看咯~将图片下载下来,挺大的,大概有6M,用vim打开这个sign.png文件,往下看看,发现最后面藏了一堆\xXX的字符串:

  是hex格式的字符串,貌似后面的都是\x34\x38\x39之类的,复制前面一部分出来,找个在线的编码解码工具(http://bianma.911cha.com/)一下看看,在文本格式里发现了些猫腻:

  注意到开头的两个字母:“QR”。QR是什么玩意?百度搜一下看看:

  发现是二维码,也就是说QR后面的应该是一个二维码。继续分析后面的一堆数字:4948...,容易发现在ASCII码中,ASCII码为48的对应字符是0,49对应的是1.而在二维码中只有黑和白,所以0和1应该对应这两种颜色。现在,根据上面的想法试试:

  将sign.png图片末尾\xXX格式的字符串复制到hex.txt,用python写个简单的脚本处理下:

#!/usr/bin/env python
# coding=utf-8 import binascii # 将\xXX字符串转换为ASCII字符串
f = open('hex.txt')
str = (str(f.readline())).replace('\n','')
f.close() list = []
for i in str[12:].split('\\x'):
ascii = binascii.a2b_hex(i)
list.append(ascii)
str1 = ''.join(list) # 将ASCII字符串转换成0,1的字符
i = 0
bin = []
while i < len(str1): bin_num = "%c" % int(str1[i:i+2])
bin.append(bin_num)
i += 2
bin_str = ''.join(bin)
print 'len(bin_str)=%d' % len(bin_str)
print 'bin_str=%s' % bin_str

  上面的脚本运行后结果如下:

  长度是625,正好是25x25的方正,找一个简单的二维码看一下格式就知道上面的分析是对的了^_^,下面就开始转换成二维码了,将上面的bin_str保存成qr_bin.txt,用python写个脚本(由于之前是每个数字生成一个像素点,发现二维码太小,所以将每个数字生成4个像素点):

  #!/usr/bin/env python
# coding=utf-8 import Image MAX = 25
pic = Image.new("RGB",(MAX*2, MAX*2))
f = open('qr_bin.txt')
str = str(f.readlines())
f.close() i = 2
for y in range (0,MAX):
for x in range (0,MAX):
if(str[i] == '1'):
pic.putpixel([2*x,2*y],(0, 0, 0))
pic.putpixel([2*x+1,2*y],(0, 0, 0))
pic.putpixel([2*x,2*y+1],(0, 0, 0))
pic.putpixel([2*x+1,2*y+1],(0, 0, 0))
else:
pic.putpixel([2*x,2*y],(255,255,255))
pic.putpixel([2*x+1,2*y],(255,255,255))
pic.putpixel([2*x,2*y+1],(255,255,255))
pic.putpixel([2*x+1,2*y+1],(255,255,255))
i = i+1
pic.show()
pic.save("qr_code.png")

  扫描二维码得到的结果是“never_give_up.php?key=value”。明显是个链接,访问这个链接发现没反应。看看这个链接,应该是要求找到key、value啥的。可能还有信息没有找到,打开之前的图片发现在\xXX字符串的上面还有一段明显的base64编码的字符串:“a2V5P3ZhbHVlP0gzMTkuNDpJNTYxLzEyMw==”,找个在线的编码一下,得到“key?value?H319.4:I561/123”看到了key和value,后面的就应该有这些信息吧。关键是,这个“H319.4:I561/123”是啥?呵呵,这会儿,就得考考常识了~~去图书馆借过书的同学可能就有意识了,这就是个索书号!!在图书馆官网上查了下,是本《莎士比亚十四行诗》,一共有四本。

  莫非在书里有标记啥的?有个key、value?这是个坑么@_@?仔细想想,书上的统一编号(ISBN号)不就是个键-值对么!!当然,能想到这个,也是智力思维啊。替换key和value,访问链接:http://orz.xiyoulinux.org/never_give_up.php?ISBN=978-7-5135-1730-0 成功跳到第二关的页面^_^

【 第二关】

  网页迷宫,有点意思哈,点进去试试,这尼玛分支咋越点越多,每个链接下面还有个0或者1,还是黑体加粗的,看来上面图片上说的很重要啊!既然是迷宫,就是要找到终点的那个出口嘛,当然走的路径很多,那估计也只有一个才是正确的吧。如果用0或者1表示通路或者障碍的话,点几个链接后发现不对:存在对应多个链接的情况哎。迷宫的常用算法是深度优先,广度优先等等。这些算法就是求最短路径的。所以,尝试着跑跑吧~~用深度优先试试发现不对。改用广度优先后跑了一分多钟发现可以到达终点:888888.html,下面是python写的脚本:

#!/usr/bin/env python
# coding=utf-8
import re
import urllib
from collections import deque queue = deque()
visited = set() url = '101223.html'
re_href = re.compile('href="(\d+\.html)"') queue.append(url)
cnt = 1
while queue:
url = queue.popleft()
visited = visited | {url} print(str(cnt) + ' Running: ' + url),
cnt += 1
urlop = urllib.urlopen('http://lewin.aliapp.com/'+url) try:
data = urlop.read().decode('utf-8')
except:
continue for x in re_href.findall(data):
if (x not in visited) and (x not in queue):
queue.append(x)

  但是,到达888888.html页面后,发现还需要提交key,联想到去年与这类似的题,就算手动点到的终点,没有key不是白费的么?是不是有种想剁手的感觉!!好吧,不是说页面上的数字很重要么,全部记录下来吧,稍微改一下上面的代码:

#!/usr/bin/env python
# coding=utf-8
import re
import urllib
from collections import deque queue = deque()
visited = set()
bin = [] url = '101223.html'
re_href = re.compile('href="(\d+\.html)"')
re_bin = re.compile('<h1>(\d)') queue.append(url)
cnt = 1
while queue:
url = queue.popleft()
visited = visited | {url} print(str(cnt) + ' Running: ' + url),
cnt += 1
urlop = urllib.urlopen('http://lewin.aliapp.com/'+url) try:
data = urlop.read().decode('utf-8')
except:
continue try:
bin_num = re_bin.search(data).group(1)
print bin_num
bin.append(bin_num)
except:
print '\nMaybe got the last!'
break for x in re_href.findall(data):
if (x not in visited) and (x not in queue):
queue.append(x)
str = ''.join(bin)
print "\nbin_str= %s" % str

  跑出来是下面的结果,将没一个页面的数字加起来又是一个长长的01字符串:

  莫非又要进行啥转换?先试试直接提交看看吧,把这个长字符串提交,发现居然直接挑到下一关^_^,看来没啥要处理的。

【 第三关】

  第三关的页面上有两张一样的图片:

  查看一下网页源码,也没发现啥的,看看URL(http://www.geekgao.org/new/guess.html)注意到guess,那是叫咋猜啥呢?先把这两张图片down下来看看吧。既然是两张一样的图片肯定有啥区别,用binwalk(ps:binwalk是一个强大的文件格式分析工具,见FreeBuf介绍)分析一下这两张图片:

  呵呵,第一张图片结尾藏了个zip文件,还藏了个rar文件,解压zip压缩包:unzip new.png 生成了一个???.txt文件,在linux下中文乱码,放到windows下可以看到“新建文本文档.txt”,看了下大小,居然是0,那就啥也没有咯,再看看那个rar文件吧,解压:unrar x new.png 提示需要密码,看来需要找密码了。不是还有一张对比的图片么,但是发现没藏啥的。看到上面两图片的Zlib数据包(ps:zlib是一种数据压缩的格式,在图片中存储图片像素点的数据块),通过神器Stegsolve(ps:Stegsolve是图片通道查看器,图片隐写必备工具,下载)来分析一下张两张图片的IDAT数据块吧。对比IDAT块的CRC(数据块校验和),发现有两张图片中有明显的的两个数据块不一样:

  那就是像素点有不同了,用PS试试?不太会唉,好吧,写个python脚本对比一下像素点吧:

#!/usr/bin/env python
# coding=utf-8 from PIL import Image
list = [] img1 = Image.open("new2.png")
img2 = Image.open("new.png") img1_array = img1.load()
img2_array = img2.load() count = 0
for j in range(527):
for i in range(399):
if (img1_array[i,j]) != (img2_array[i,j]):
print i, j, img1_array[i,j],img2_array[i,j]
list.append(str(i))
list.append(str(j))
count += 1 print 'count= %d' % count
print 'pwd = '+''.join(list)

  分析的结果如下,居然有20个不同的像素点(之后用PS之类的在放大之后发现也能看见图片的小点点~_~):

  将各点的坐标连接起来之后,就是上面的pwd了,好吧,把这个字符串当密码来解压那个含有rar文件的图片,发现解压成功。至此第三关算是解出来了~~

  在下一篇的博客中将继续分享:西邮Linux兴趣小组2014级免试挑战题(续)

西邮Linux兴趣小组2014级免试挑战题的更多相关文章

  1. 西邮Linux兴趣小组2014级免试挑战题 (续)

    在上一篇的博客中已经解到第四关了,现在继续挑战-- [ 第四关] 在上一关解压成功后,生成了一个file文件.用vim的二进制格式打开,转成十六进制,发现文件头格式如下: 是个以ELF字符开头的文件, ...

  2. 西邮linux兴趣小组2014纳新免试题(五)

    [第五关] 题目 http://final5.sinaapp.com/ 关注西邮Linux微信平台,得到一个名为a的文件 分析 分析文件a 需要反汇编,拿IDA上,打开后发现key_function及 ...

  3. 西邮linux兴趣小组2014纳新免试题(一)

    [第一关] 题目 0101001001100001011100100010000100011010000001110000000011001111100100000111001100000000000 ...

  4. 西邮linux兴趣小组2014纳新免试题(四)

    [第四关] 题目 http://findakey.sinaapp.com/ Example: String1:FFFF8 5080D D0807 9CBFC E4A04 24BC6 6C840 49B ...

  5. 西邮linux兴趣小组2014纳新免试题(三)

    [第三关] 题目 http://sortsth.sinaapp.com/ 分析 查看网页源码,得知题目让找出6种排序算法,每次刷新或提交序列都变化. 15种算法清单: CountingSort     ...

  6. 西邮linux兴趣小组2014纳新免试题(二)

    [第二关] 题目 http://round2.sinaapp.com/ 分析 打开后,戳进去发现一句名言,然后下一戳的url提示. 在网页源码中得到Page1024提示,于是写一个脚本 #!/bin/ ...

  7. 西邮Linux兴趣小组第一次技术分享会

    2016年10月30日晚,西邮Linux兴趣小组技术分享会在西安邮电大学长安校区东区逸夫教学楼FF305室成功举办.200多名来自全校不同专业的15,16级同学参加了此次分享会. 分享会于20:00正 ...

  8. 西邮Linux兴趣小组2016免试题

    4.28的宣讲会圆满结束(就在写这段话之前不久),对于西邮Linux兴趣小组这一次纳新,身为局外人表示:还是有历史,还是会玩,还是厉害哈. 华丽的分割线里面是自己之前的攻关战略,最后补充了宣讲会上学长 ...

  9. 2016西邮Linux兴趣小组大事记

    2016年还有半个小时就结束了,前面把自己9月做的规划拿出来完善了下,觉得真的是不容易的一年,所有的事情只有自己经历过才会有不一样的感受,世上无难事,只怕有心人. 这是我九月份制定的计划: 下面是20 ...

随机推荐

  1. MS-SQL

    变量 一个@为局部变量,两个@@为全局变量 @@error 最后一句SQL语句的错误编号 错误码 @@identity最后一次插入的标示值符 insert into biao(lie) output ...

  2. 01Tensorflow学习之Tensorflow基本介绍

    1 tensorflow简介 TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,其命名来源于本身的运行原理.Tensor(张量)意味着N维数组,Flow(流)意味着基 ...

  3. MIUI 6的毛玻璃效果的技术实现(实时模糊)

    说说MIUI 6的毛玻璃效果的技术实现.   很久以前我们的文件夹打开和最近任务等几个地方就使用了毛玻璃效果,在技术上讲就是背景模糊.应该是比iOS 7的使用要早很多.不过那时候我们使用的是先对背景截 ...

  4. ORA-10618: Operation not allowed on this segment 执行存储过程权限需声明

    执行SHOW_SPACE存储过程时只能在DBA角色下成功,在NORMAL角色用户下报错: ORA-10618: Operation not allowed on this segmentORA-065 ...

  5. webdriver自动化脚本

    1.需求如下: 启动火狐浏览器首先打开百度,等待3秒然后打开博客首页,等待2秒然后关闭浏览器 from selenium import webdriver from time import sleep ...

  6. Web标准:九、CSS表单设计

    Web标准:九.CSS表单设计 知识点: 1.改变文本框和文本域样式 2.用图片美化按钮 3.改变下拉列表样式 4.用label标签提升用户体验   1)改变文本框和文本域样式 文本框标签:<i ...

  7. oracle,PL/SQL新建表

    创建用户 -- Create the user create user U_HQ_JAVA default tablespace USERS temporary tablespace TEMP pro ...

  8. 利用python实现冒泡排序

    1.先生存一个随机数组成的list 2.然后进行排序,把大的元素放在后面,小的元素放在前面,最终实现从小到大排列 首先生存一个随机数组成的list import random # print(sys. ...

  9. sqlserver 字符串拆分和取某分隔符之前的字符串

    ALTER FUNCTION [dbo].[f_splitSTR]( ), --待分拆的字符串 ) --数据分隔符 )RETURNS @re TABLE( col varchar(max)) AS B ...

  10. VS代码页到设计页传值

    代码页  public string titleZRclass = "";   根据条件设置其值 设计页  <%=titleZRclass %>