WP003——CTF赛题解析-MOSS

133 阅读2分钟

题目描述

image.png

Write Up

使用moss解码工具对字符串进行解码即可

image.png

参考文档

总结

本题属于解码中最为简单的一种,但是它代表了一种题目类型,MOSS密码,在难度稍高的题目中,或许不会给出直接的摩斯密码串,而是会通过文本,字符串等形式对点,横线,分隔符进行替换,我们需要找到上述三种类型的串,然后复原原有的字符,下面为一个简单的脚本,可以此类题目字符串转换成可以编码的类型,仅作参考:

# 莫斯密码解密脚本(修正版)
def morse_decoder(ciphertext, dot='.', dash='-', sep=' '):
    # 标准莫斯密码映射表(可扩展)
    morse_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', 
        '/': ' ', '': ''  # 空格和空字符处理
    }
    
    # 分割字母序列
    letters = ciphertext.split(sep)
    decoded = []
    
    for letter in letters:
        if not letter:  # 空分隔符跳过
            continue
            
        # 解析符号序列
        symbols = []
        i = 0
        while i < len(letter):
            # 优先尝试匹配较长的符号(横线)
            if letter.startswith(dash, i):
                symbols.append('-')
                i += len(dash)
            # 尝试匹配点
            elif letter.startswith(dot, i):
                symbols.append('.')
                i += len(dot)
            else:
                # 无法识别的符号
                raise ValueError(f"未知符号在位置 {i}: '{letter[i:i+10]}...'")
        
        morse_code = ''.join(symbols)
        # 查找莫斯码对应字符
        decoded.append(morse_dict.get(morse_code, f'?{morse_code}?'))
    
    return ''.join(decoded)

# ===== 使用示例 =====
if __name__ == "__main__":
    # 示例1:标准莫斯密码
    cipher1 = "..-./.-../.-/--./----.--/-../...--/..-./-.-./-.../..-./.----/--.../..-./----./...--/----./----./...../-----/....-/-----.-"
    print("示例1 解密:", morse_decoder(cipher1, sep='/'))
    
    # 示例2:中文符号(修正为PYTHON)
    cipher2 = "短长长短-长短短长-长-短短短短-长长长-长短"
    print("示例2 解密:", morse_decoder(
        cipher2, 
        dot='短', 
        dash='长', 
        sep='-'
    ))  # 输出: PYTHON
    
    # 示例3:多字符符号(修正为JAVA)
    cipher3 = "dotdashdashdash dotdash dotdotdotdash dotdash"
    print("示例3 解密:", morse_decoder(
        cipher3,
        dot='dot',
        dash='dash',
        sep=' '
    ))  # 输出: JAVA