/Разборы задач
6 ноября 2026
Райтап на задачу «Современный формат»
Исследуем анимацию AVIF, устройство бокса stsz и восстанавливаем скрытый второй кадр.5
5

Misc
Задача «Морзянка на Arduino»
Весьма интересное задание) Тут есть несколько путей, как его решить:
Вариант 1:
Если не хватает терпения, есть вариант 2)
Как уже видно выше, на видео есть лампочка, которая мигает и передаёт нам наш флаг. Этот светодиод не просто так находится вдали от всех остальных, либо это и правда случайность? Но именно это позволяет нам автоматизировать процесс считывания азбуки Морзе и избавить нас от мучений)
Для начала смотрим параметры видео:
73 сек. и 60 FPS, получается, 1 кадр будет примерно 16,7 мс. Точка, которая загорается на 200 мс, → 12 кадров. Тире, соответственно, 36 кадров.
Далее:
После чего переходим в GIMP и определяем положение нашего светодиода:
Эти координаты нам нужны для ffmpeg. В нём crop записывается как ширина:высота:x:y → 40:40:495:120.
Yavg.txt содержит в себе инфу о яркости на каждом кадре. Условно 128 → не горит, а вот уже 178 → горит.
А теперь с этими данными можно и скриптик написать:
tr = []; t = None
for l in open('yavg.txt'):
l = l.strip()
if l.startswith('frame:'):
t = float(l.split('pts_time:')[1])
elif 'YAVG=' in l:
tr.append((t, float(l.split('=')[1])))
thr = (min(y for _, y in tr) + max(y for _, y in tr)) / 2
segs = []; on = tr[0][1] > thr; st = tr[0][0]
for (a, _), (b, y) in zip(tr, tr[1:]):
if (y > thr) != on:
segs.append((on, st, a - st)); on = y > thr; st = b
segs.append((on, st, tr[-1][0] - st))
ons = [d for o, _, d in segs if o]
gaps = [d for o, _, d in segs if not o and d > 0.01]
u = (min(ons) + min(gaps)) / 2 # длительность точки
on_thr = u + min(ons) # точка/тире
gap_thr = 0.5 * u + min(gaps) # внутри буквы/между буквами
cur = ''; out = []
for o, _, d in segs:
if o: cur += '-' if d > on_thr else '.'
elif cur and d >= gap_thr:
out.append(cur); cur = ''
if cur: out.append(cur)
print(' '.join(out))А на выходе получаем:
Теперь важно обратить внимание на наш morse.ino, ведь там дана карта символов Морзе:
А вот теперь переводим на привычный нам BugCTF:
Осталось только не забыть про те самые фигурные скобочки, и мы забираем флажок)))