Hack The Vote 2016 Writeup

https://pwn.voting/pwn.voting
ctftime.org

結果

team: minami
551 points
127th place (of 1030 teams)

TWCTFよりパフォーマンスあがったかな?
今回もrev,pwn,webが解けず人権がない
キレそう

f:id:minaminaoy:20161107111625p:plain

そろそろチームでも参加してみたいですね(プロの恩恵を受けたい!)

解いた問題

Sanity (Vote 1pt)

The flag is flag{th3r3_1s_0nly_on3_ch0ic3}

flag{th3r3_1s_0nly_on3_ch0ic3}

Vermatrix Supreme (Crypto 100pts)

Working in IT for a campaign is rough; especially when your candidate uses his password as the IV for your campaign's proprietary encryption scheme, then subsequently forgets it. See if you can get it back for him. The only hard part is, he changes it whenever he feels like it.

nc vermatrix.pwn.democrat 4201

handout

author's irc nick: negasora

ソースを読むとhandoutは

  • IV(初期化ベクトル)とSEEDから一意に定まる行列の配列を生成
  • それらに回転・XORを加えて1つの行列Mに(XOR暗号の類)

といった操作を行う

与えられるSEEDと行列MからIVを逆算・送信するとflagが手に入る

主要部分は

def refixmatrix(matrixb, out):
	matrixa = [[0 for x in xrange(3)] for x in xrange(3)]	
	for rn in xrange(3):
		for cn in xrange(3):
			b=  int(matrixb[cn][rn])
			o = int(out[cn][rn])
			matrixa[rn][cn] = b^o
	return matrixa

def getIV(seed,M):
	IV = M
	hogeIV = [c for c in '123456789'] #適当な値
	p = pad(hogeIV + [ord(c) for c in seed])
	blocks = genBlockMatrix(p)
	for i in range(len(blocks)-1,0,-1):
		IV = refixmatrix(blocks[i],IV)
	return IV

netcatと組み合わせて

flag{IV_wh4t_y0u_DiD_Th3r3}

Warp Speed (Forensics 150pts)

Our Trump advertising campaign is incredible, it's skyrocketing! It's astronomical! Wait stop!! SLOW DOWN!!!

warp_speed

author's irc nick: krx

f:id:minaminaoy:20161107113837j:plain
flagの断片 "lag{"..."}" が見える
試行錯誤した結果、元画像を

  • 504(?)*8 のブロックに分割
  • 順番に2つずつ横にして配置
  • 8pixelずつズラす

といった操作をした画像と判断

戻してバラして順番に合成(ImageMagick
batの遅延環境変数周りの知識が不足していたのでゴリ押しした

@echo off
convert -crop 1000x8 warp_speed.jpg ./a/warp_speed.jpg

convert ./a/warp_speed-0.jpg -roll -0+0 ./b/warp_speed-0.jpg
convert ./a/warp_speed-1.jpg -roll -8+0 ./b/warp_speed-1.jpg
convert ./a/warp_speed-2.jpg -roll -16+0 ./b/warp_speed-2.jpg
convert ./a/warp_speed-3.jpg -roll -24+0 ./b/warp_speed-3.jpg
convert ./a/warp_speed-4.jpg -roll -32+0 ./b/warp_speed-4.jpg
convert ./a/warp_speed-5.jpg -roll -40+0 ./b/warp_speed-5.jpg
convert ./a/warp_speed-6.jpg -roll -48+0 ./b/warp_speed-6.jpg
convert ./a/warp_speed-7.jpg -roll -56+0 ./b/warp_speed-7.jpg
convert ./a/warp_speed-8.jpg -roll -64+0 ./b/warp_speed-8.jpg
convert ./a/warp_speed-9.jpg -roll -72+0 ./b/warp_speed-9.jpg
convert ./a/warp_speed-10.jpg -roll -80+0 ./b/warp_speed-10.jpg
convert ./a/warp_speed-11.jpg -roll -88+0 ./b/warp_speed-11.jpg
convert ./a/warp_speed-12.jpg -roll -96+0 ./b/warp_speed-12.jpg
convert ./a/warp_speed-13.jpg -roll -104+0 ./b/warp_speed-13.jpg
convert ./a/warp_speed-14.jpg -roll -112+0 ./b/warp_speed-14.jpg
convert ./a/warp_speed-15.jpg -roll -120+0 ./b/warp_speed-15.jpg
convert ./a/warp_speed-16.jpg -roll -128+0 ./b/warp_speed-16.jpg
convert ./a/warp_speed-17.jpg -roll -136+0 ./b/warp_speed-17.jpg
convert ./a/warp_speed-18.jpg -roll -144+0 ./b/warp_speed-18.jpg
convert ./a/warp_speed-19.jpg -roll -152+0 ./b/warp_speed-19.jpg
convert ./a/warp_speed-20.jpg -roll -160+0 ./b/warp_speed-20.jpg
convert ./a/warp_speed-21.jpg -roll -168+0 ./b/warp_speed-21.jpg
convert ./a/warp_speed-22.jpg -roll -176+0 ./b/warp_speed-22.jpg
convert ./a/warp_speed-23.jpg -roll -184+0 ./b/warp_speed-23.jpg
convert ./a/warp_speed-24.jpg -roll -192+0 ./b/warp_speed-24.jpg
convert ./a/warp_speed-25.jpg -roll -200+0 ./b/warp_speed-25.jpg
convert ./a/warp_speed-26.jpg -roll -208+0 ./b/warp_speed-26.jpg
convert ./a/warp_speed-27.jpg -roll -216+0 ./b/warp_speed-27.jpg
convert ./a/warp_speed-28.jpg -roll -224+0 ./b/warp_speed-28.jpg
convert ./a/warp_speed-29.jpg -roll -232+0 ./b/warp_speed-29.jpg
convert ./a/warp_speed-30.jpg -roll -240+0 ./b/warp_speed-30.jpg
convert ./a/warp_speed-31.jpg -roll -248+0 ./b/warp_speed-31.jpg

for /l %%i in (0,1,31) do (
	convert -crop 504x8 ./b/warp_speed-%%i.jpg  ./c/warp_speed-%%i.jpg 
	convert -append ./c/warp_speed-%%i-0.jpg ./c/warp_speed-%%i-1.jpg ./d/warp_speed-%%i.jpg
)

copy .\d\warp_speed-0.jpg warp_speed-0.jpg

for /l %%i in (1,1,31) do (
	convert -append warp_speed-0.jpg ./d/warp_speed-%%i.jpg warp_speed-0.jpg
)
for i in range(1,32):
    s = "convert ./a/warp_speed-"+str(i)+".jpg -roll -"+str(i*8)+"+0 ./b/warp_speed-"+str(i)+".jpg"
    print(s)

f:id:minaminaoy:20161107104043j:plain

flag{1337_ph0t0_5k1ll5}

leet読めなくて20failsくらいした(1とlややこしすぎでしょ)

More Suspicious Traffic (Forensics 300pts)

We think our voting computers might be compromised! The Clinton campaign claims Trump is working with the Russians to rig the election. Our tech got a packet capture right before strange things started happening and isolated these packets. Our IDS didn't flag anything, but take a look and see if you can find any hidden communications channels the Russians could use for command and control (C2). It would make the leaders of the free world look pretty bad if the Russians were the ones picking our president!

SecureFloridaVotingBoothTraffic

author's irc nick: LtDan

Wiresharkで見てみると長い時間をかけてUDPで通信している
内容は

Source Data Decrypted Data (base64)
192.168.2.1 bm90dGhlZmxhZw==
( or EOF )
nottheflag
192.169.2.4 QUNL ACK
( = ACKnowledgement:肯定応答 )

パケット全ての集まりがflagを表現していると仮定

Dataのみ抽出

bm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==QUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLbm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==bm90dGhlZmxhZw==QUNLQUNLQUNLQUNLQUNLQUNLEOFQUNLEOFQUNL

連続したDataをまとめる
例) b3: bm90dGhlZmxhZw==が3連続

b1Q1b1Q1b1Q1b1Q1b1Q1b3Q3b6Q6b3Q3b3Q3b6Q6b3Q3b3Q3b3Q3b6Q6b1Q1b5Q5b6Q6b3Q3b6Q6b3Q3b6Q6b6Q6b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b3Q3b6Q6b3Q3b6Q6b3Q3b6Q6b6Q6b6Q6b3Q3b3Q3b3Q3b3Q3b3Q3b1Q1b1Q1b1Q1b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b3Q3b6Q6b6Q6b3Q3b3Q3b6Q6b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b6Q6b6Q6b3Q3b3Q3b3Q3b6Q6b3Q3b6Q6b6Q6b3Q3b6Q6E1Q1E1Q1b1Q1b1Q1b1Q1b3Q3b6Q6b3Q3b3Q3b6Q6b3Q3b3Q3b3Q3b6Q6b1Q1b5Q5b6Q6b3Q3b6Q6b3Q3b6Q6b6Q6b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b3Q3b6Q6b3Q3b6Q6b3Q3b6Q6b6Q6b6Q6b3Q3b3Q3b3Q3b3Q3b3Q3b1Q1b1Q1b1Q1b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b3Q3b6Q6b6Q6b3Q3b3Q3b6Q6b3Q3b3Q3b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b3Q3b3Q3b3Q3b3Q3b6Q6b6Q6b6Q6b6Q6b3Q3b3Q3b3Q3b6Q6b3Q3b6Q6b6Q6b3Q3b6Q6E1Q1E1Q1

対話でまとめる
例) 3: b3Q3

111363363336156363663333333336636363666333331113333663663363333336633336666333636636EE

1と5がおかしい(or 怪しい)のでもう一度Wiresharkを眺めてみる
"111"と"5"以外の対話は0.5秒間隔か1.5秒間隔

連続したDataでまとめず、間隔が開いている箇所で区切ってまとめる

3363363336663636633333333366363636663333333333663663363333336633336666333636636EE

綺麗に3と6で表せる
二種類の要素で表せるもの ∋ 2進数, モールス信号, ...
2進数のデータにしては小さい

試しにモールス信号で復号すると
最初の文字がf(3363)、次の文字がl(3633)とみなせる

さらに

3(0.5秒)3(0.5秒)6(0.5秒)3(1.5秒)3(0.5秒)6(0.5秒)3(0.5秒)3(0.5秒)

と、fとlの間だけ1.5秒間隔だったので
1.5秒間隔を文字の区切りと捉えて

#1.5秒間隔ごとに区切った場合の、各対話の開始時刻
l=[00.0,03.0,06.0,08.0,10.5,14.0,17.0,20.5,23.5,26.0,29.5,32.5,36.0,39.0,42.0,45.5,47.5,51.0,54.5,58.5]
s="..-..-...---.-.--.........--.-.-.---..........--.--..-......--....----...-.--.-"
d={".-":"a","-.":"n","-...":"b","---":"o","-.-.":"c",".--.":"p","-..":"d","--.-":"q",".":"e",".-.":"r","..-.":"f","...":"s","--.":"g","-":"t","....":"h","..-":"u","..":"i","...-":"v",".---":"j",".--":"w","-.-":"k","-..-":"x",".-..":"l","-.--":"y","--":"m","--..":"z","-.--.":"{","-.--.-":"}",".----":"1","..---":"2","...--":"3","....-":"4",".....":"5","-....":"6","--...":"7","---..":"8","----.":"9","-----":"0"}

flag=""
prev = 0
for i in range(0,len(l)-1):
    a = l[i+1]-1.5-l[i]
    b = int(a/0.5)+1
    flag+=d[s[prev:prev+b]]
    prev+=b
print(flag)

flag{h4ck7h3pl4n37}