CTF打卡小分队 加入小组

40个成员 1个话题 创建时间:2018-02-05

Day 1 检查符号 脚本解题

发表于2018-02-05 1284次查看

很有幸加入这个CTF打卡小分队,第一天,我把所涉及到的题目,从脚本的角度去解决问题,解出我们的flag。

拿到题目:

截取一段电波,一不小心全变成了泡泡。你能够解密吗? "oooo0。000。ooo。o000。0oooo。0o。0o00。00o。00ooo。o00o。0000o。0oo。0oo。oo000。00oo。oo000。ooo00。ooooo。o0。o000。" 答案格式:key{flag},flag是解密内容

 

题目提示电波,经常做ctf比赛的我们,一看就知道是摩斯密码,但却不是 ..---   .--  ---. 这种格式

因此我们考虑是替换密码,经过仔细研究,发现题目中存在如下对应:


。 ----  空格
o  ----  .
0  ----  -

 

写个php脚本替换一下

<?php
/**
* Created by Augus
* Date: 2018/2/5
* Time: 12:32 **/

$data = "oooo0。000。ooo。o000。0oooo。0o。0o00。00o。00ooo。o00o。0000o。0oo。0oo。oo000。00oo。oo000。ooo00。ooooo。o0。o000。";
$data = str_replace("o", ".", $data); 
$data = str_replace("0","-",$data);
echo $data = str_replace("。"," ",$data);
?>

输出结果:

....- --- ... .--- -.... -. -.-- --. --... .--. ----. -.. -.. ..--- --.. ..--- ...-- ..... .- .---

 

为了让大家能学习使用更多的语言来写脚本,我还特意写了一个python脚本来替换摩斯密码

 

# _*_ coding:utf-8 _*_
#Created by Augus
#Date: 2018/2/5

import re
s = "oooo0。000。ooo。o000。0oooo。0o。0o00。00o。00ooo。o00o。0000o。0oo。0oo。oo000。00oo。oo000。ooo00。ooooo。o0。o000。"
a = ["。", "o","0"]
b = [" ", ".","-"]
dic = dict(zip(a,b))
pattern = re.compile('(' + '|'.join(a) + ')')
s = pattern.sub(lambda a:dic[a.group()], s)
print s

 

输出结果同样为一串莫斯电码:

....- --- ... .--- -.... -. -.-- --. --... .--. ----. -.. -.. ..--- --.. ..--- ...-- ..... .- .---

然后我们去网站上或者利用工具成功解出莫斯密码,个人更喜欢用python脚本解决问题。

 

python解摩斯密码脚本如下:

# -*- coding: UTF-8 -*-
#Created by Augus
#Date: 2018/2/5
#运行后输入要转换的莫斯密码  "input the string:"
#注意 输入的莫斯密码中间只有一个空格。多个会报错


from __future__ import print_function
a = raw_input("input the string (Attenion one space!):")
s = a.split(" ")
dict = {'.-': 'A',
        '-...': 'B',
        '-.-.': 'C',
        '-..':'D',
        '.':'E',
        '..-.':'F',
        '--.': 'G',
        '....': 'H',
        '..': 'I',
        '.---':'J',
        '-.-': 'K',
        '.-..': 'L',
        '--': 'M',
        '-.': 'N',
        '---': 'O',
        '.--.': 'P',
        '--.-': 'Q',
        '.-.': 'R',
        '...': 'S',
        '-': 'T',
        '..-': 'U',
        '...-': 'V',
        '.--': 'W',
        '-..-': 'X',
        '-.--': 'Y',
        '--..': 'Z',
        '.----': '1',
        '..---': '2',
        '...--': '3',
        '....-': '4',
        '.....': '5',
        '-....': '6',
        '--...': '7',
        '---..': '8',
        '----.': '9',
        '-----': '0',
        '..--..': '?',
        '-..-.': '/',
        '-.--.-': '()',
        '-....-': '-',
        '.-.-.-': '.'
        };
for item in s:
    print (dict[item],end='')
#print (s)

用python跑一下,结果为:

4OSJ6NYG7P9DD2Z235AJ

 

提交flag,我们发现不对,尝试把大写字母换成小写后,加上格式提交,True

有时候我们在紧张的比赛场上,会出现很长一串字符串(可能有20-30位),涉及到大小写的转换,手工转换容易出错,所以我们用脚本跑一下,转换大小写。

# _*_ coding:utf-8 _*_
# Filename : zm.py
# Author by : Augus
#把str "替换为要转换的字符串,大小写均可" 


str = "4OSJ6NYG7P9DD2Z235AJ"
print(str.upper())          # 把所有字符中的小写字母转换成大写字母
print(str.lower())          # 把所有字符中的大写字母转换成小写字母
print(str.capitalize())     # 把第一个字母转化为大写字母,其余小写
print(str.title())          # 把每个单词的第一个字母转化为大写,其余小写 

 

输出结果为:

4OSJ6NYG7P9DD2Z235AJ
4osj6nyg7p9dd2z235aj
4osj6nyg7p9dd2z235aj
4Osj6Nyg7P9Dd2Z235Aj

 

正确Flag为: key{4osj6nyg7p9dd2z235aj}

 

另外附上一段字符串转换为摩斯密码的python脚本:

# _*_ coding:utf-8 _*_
# Author by : Augus
#运行后输入要转换的字符  "Please input the Message: "


CODE = {'A': '.-',     'B': '-...',   'C': '-.-.',
        'D': '-..',    'E': '.',      'F': '..-.',
        'G': '--.',    'H': '....',   'I': '..',
        'J': '.---',   'K': '-.-',    'L': '.-..',
        'M': '--',     'N': '-.',     'O': '---',
        'P': '.--.',   'Q': '--.-',   'R': '.-.',
             'S': '...',    'T': '-',      'U': '..-',
        'V': '...-',   'W': '.--',    'X': '-..-',
        'Y': '-.--',   'Z': '--..',

        '0': '-----',  '1': '.----',  '2': '..---',
        '3': '...--',  '4': '....-',  '5': '.....',
        '6': '-....',  '7': '--...',  '8': '---..',
        '9': '----.'
        }
def main():

        msg = raw_input('Please input the Message: ')

        for char in msg:
                if char == ' ':
                        print
                else:
                        print CODE[char.upper()] + '  ',

if __name__ == "__main__":
        main()

 

打卡第一天,希望大家每天都有更多的收获,我们再接再励,明天继续。

希望大家能在一起,相互交流,相互学习!!!

同时也希望大家能提供更多更好更快的方式来解决我们的CTF题目!

                                         Author by Augus.

                                         2018/2/5

 

 

 

2回复
发表回复
你还没有登录,请先 登录或 注册!