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