昨天是双11,光棍节,陪着群里的一群小光棍们玩了一个光棍节程序员闯关秀,发现有点意思,记录一下,供有需要的同学们参考。

光棍节程序员闯关秀游戏地址:

光棍节程序员闯关秀

第1关

查看源代码,发现a标签的颜色和背景色一样,导致了我们看不到a过关地址,方法很简单,直接复制源代码中的key即可,或者ctrl+a然后单击进入下一关即可

http://1111.segmentfault.com/?k=91f546c97235a8f199b50731ded6d4e2

第2关

查看源代码,发现key:1a434a0eacab73b208320061809d46c9,填入表单,然后回车即可过关。

http://1111.segmentfault.com/?k=1a434a0eacab73b208320061809d46c9

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

第3关

使用live header等工具抓包,即可在http请求头中发现The-Key-Is: a87ff679a2f3e71d9181a67b7542122c

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

http://1111.segmentfault.com/?k=a87ff679a2f3e71d9181a67b7542122c

第4关

提示"观察你密码的规律",看一下第4关的地址,应该是md5加密,去cmd5解密得到4,那么下一关应该是5,在cmd5加密得到:e4da3b7fbbce2345d7772b0674a318d5

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

http://1111.segmentfault.com/?k=e4da3b7fbbce2345d7772b0674a318d5

第5关

看上去是一个二维码图片,但是对于安全人员来说肯定要下载回来看看图片里面内容了,果然密码在图片中隐藏着。

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

http://1111.segmentfault.com/?k=bdbf46a337ac08e6b4677c2826519542

第6关

过关tips:f4de502e58723e6252e8856d4dc8fc3b,百度搜索之,即可发现key:

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

http://1111.segmentfault.com/?k=1573402aa6086d9ce42cfd5991027022

第7关

搜索了一下,没有结果,把f8442620d3516e05066e7c792dcc41fe放入url中,秒过。。。。

http://1111.segmentfault.com/?k=f8442620d3516e05066e7c792dcc41fe

第8关

其实已经给出了答案,但是没有提交按钮,这个可以很好绕过,直接回车提交,不成功,也许是提交方法问题,果断改GET为POST提交。

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

http://1111.segmentfault.com/?k=f8442620d3516e05066e7c792dcc41fe

第9关

这一关是最难的,我也是花了好长时间才过的,看到0110____,大家肯定知道是要补全0或者1才可以的,到底要怎么补呢,因为可能是0,1或者01的组合,最后经同事提醒才想到,既然是双11,肯定全补1,最后证明,是对的。。

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

解密思路:

替换所有的____为1111,然后再把2进制转换为10进制,然后把10进制转换为char编码,会得到一段Base64密文,再把此密文解密为一个tar.gz的文件即可。

利用python来实现解密,代码如下:

#!/usr/bin/env python
# -*- coding: gbk -*-
# -*- coding: utf-8 -*-
# Date: 2014/11/12
# Created by 独自等待
# 博客 http://www.waitalone.cn/
import base64
bin = '''
01001000 00110100 01110011 01001001 01000001 01000011 01001010 01001011 #第1行
#为阅读方便,把第1行和最后1行之间的省略了,大家测试的时候请把二进制代码放到这里
01001010 01000001 01000001 01101111 01000001 01000001 01000001 00111101 #最后1行
'''
binTochar = [chr(int(x, 2)) for x in bin.strip().split()]
print ''.join(binTochar)
keyFile = open('key.tar.gz', 'wb')
keyFile.write(base64.b64decode(''.join(binTochar)))
keyFile.close()

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

利用php来实现解密,代码如下:

<?php
/**
 * Created by 独自等待
 * Date: 2014/11/12
 * Time: 10:10
 * Name: decode.php
 * 独自等待博客:http://www.waitalone.cn/
 */
 $bin = <<<binary
01001000 00110100 01110011 01001001 01000001 01000011 01001010 01001011 #第1行
#为阅读方便,把第1行和最后1行之间的省略了,大家测试的时候请把二进制代码放到这里
01001010 01000001 01000001 01101111 01000001 01000001 01000001 00111101 #最后1行
binary;
$bin_arr = explode(' ',str_replace("\r\n"," ",$bin));
#print_r($bin_arr);
$dec = '';
foreach ($bin_arr as $bin_code) {
    $dec .= chr(bindec($bin_code));
}
echo $dec;
fwrite(fopen('key.tar.gz','wb'),base64_decode($dec));

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

最后解密得到一张图片,难道是苍老师?

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

http://1111.segmentfault.com/?k=e4a4a96a69a1b2b530b3bec6734cdf52

「光棍节程序员」光棍节程序员闯关秀过关攻略-开水网络

这样即可通关。。。。

解密脚本下载地址:

点我下载