34C3 Junior CTF: spi

問題

問題文

I used to be a hero. Now I can't even handle this: Mitschnitt

Hints:

We messed up, the flag starts with 34C4 not 34C3, sorry!

問題概要

音声ファイルが与えられる。

解答例

指針

  • やるだけ

解説

与えられた ogg ファイルを VLC で再生速度を落として再生し, 聞こえるメッセージを書き起こすと次のようになった。

start of message
76, 83, 48, 116, 76, 105, 52, 103, 76, 83,
48, 116, 76, 83, 52, 103, 76, 105, 48, 117,
76, 83, 65, 116, 76, 83, 48, 116, 76, 105,
65, 116, 76, 105, 48, 117, 76, 83, 52, 103,
76, 83, 48, 116, 76, 83, 48, 103, 76, 83, 52,
117, 76, 83, 65, 117, 76, 83, 52, 117, 73, 67,
48, 117, 76, 83, 52, 116, 76, 105, 65, 116, 76,
83, 48, 117, 73, 67, 48, 116, 76, 83, 48, 116,
73, 67, 48, 117, 76, 83, 52, 116, 76, 105, 65,
116, 76, 83, 48, 116, 76, 83, 65, 116, 76, 105,
52, 116, 73, 67, 52, 116, 76, 105, 52, 78, 67,
103, 61, 61
end of message

数字を ascii に変換すると次のような文字列が得られた。

LS0tLi4gLS0tLS4gLi0uLSAtLS0tLiAtLi0uLS4gLS0tLS0gLS4uLSAuLS4uIC0uLS4tLiAtLS0uIC0tLS0tIC0uLS4tLiAtLS0tLSAtLi4tIC4tLi4NCg==

末尾が = であることから base64エンコードされたものと分かるのでデコードする。

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

モールス符号のようだがうまくデコードできない。

-. を入れ替えるモールス符号としてデコードすることができ Flag が得られた。

#! /usr/bin/env python2
# -*- coding:utf-8 -*-

import base64
import string

dic = {
    ".-" :   "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",
    ".-.-.-":".",
    "--..--":",",
    "---...":":",
    "..--..":"?",
    ".----.":"'",
    "-....-":"-",
    "-..-." :"/",
    ".--.-.":"@",
    "-...-" :"=",
    "..--.-":"_"
}

table = string.maketrans('.-', '-.')

# start of message
L = [76, 83, 48, 116, 76, 105, 52, 103, 76, 83,
     48, 116, 76, 83, 52, 103, 76, 105, 48, 117,
     76, 83, 65, 116, 76, 83, 48, 116, 76, 105,
     65, 116, 76, 105, 48, 117, 76, 83, 52, 103,
     76, 83, 48, 116, 76, 83, 48, 103, 76, 83, 52,
     117, 76, 83, 65, 117, 76, 83, 52, 117, 73, 67,
     48, 117, 76, 83, 52, 116, 76, 105, 65, 116, 76,
     83, 48, 117, 73, 67, 48, 116, 76, 83, 48, 116,
     73, 67, 48, 117, 76, 83, 52, 116, 76, 105, 65,
     116, 76, 83, 48, 116, 76, 83, 65, 116, 76, 105,
     52, 116, 73, 67, 52, 116, 76, 105, 52, 78, 67,
     103, 61, 61]
# end of message

s = base64.b64decode("".join([chr(i) for i in L]))
s = s.translate(table)

print "".join([dic[c] for c in s.split()])
  • 実行結果
$ python solve.py
34C4.5PY.V5.5PY

参考文献