Второй турнир Арены.
Итоги приняты личный турнир на выбывание С прокторингом
Второй легендарный турнир Арены на ctfinf.ru! В предыдущем турнире AlxGonin показал скилл в сфере ИБ и продемонстрировал быструю логику. Останется ли кубок у него? Все кубки победителя навсегда остаются в его профиле, но носить его как действующий кубок Арены сможет только последний победитель турнира.
Награды по турам
| Тур | Победителю матча | Проигравшему | Лимит | ||
|---|---|---|---|---|---|
| инферы | рейтинг | инферы | рейтинг | ||
| Групповой тур · 3 категории |
|
+5 | — | +3 | 10 мин |
| Гранд-финал · 3 категории |
|
+10 |
|
+7 | 10 мин |
| Чемпиону турнира сверху |
|
+3 | — | — | — |
Инферы и рейтинг начисляются одной суммой после турнира, когда админ принимает отчёт.
Регистрация закрыта.
Сетка
Как всё проходит
- 1 Регистрация и чек-ин. В день турнира нужно нажать «Я на месте» — с 19:00 до 19:55 по Москве. Кто не отметился, в сетку не попадает, даже если был зарегистрирован.
- 2 Выбор категории. Отмечаясь, вы выбираете категорию первого тура. Рядом с каждой видно, сколько человек её уже выбрали, и менять выбор можно до закрытия чек-ина. Группы первого тура составляют из тех, кто выбрал одно и то же. Если по вашей категории не набралось людей на целую группу, вы попадёте в смешанную группу — она играет категорию того участника, у кого рейтинг выше. Кто не выбрал ничего, получает категорию случайно.
- 3 Жеребьёвка. После закрытия чек-ина состав групп определяется жребием. Жребий считается от опубликованного числа — зерна, и любой может пересчитать его сам скриптом внизу этой страницы. Никто не проходит в следующий тур без матча: если участников нечётное число, вместо пропуска появляется группа из трёх человек.
-
4
Первый тур — группы по 2–4 человека. Все в группе решают одну и ту же
задачу. Побеждает тот, кто первым сдал верный флаг.
Если выигрываете — проходите в следующий тур. Если проигрываете — выбываете из турнира сразу, дорешивать задачу не нужно. -
5
Дальше — матчи один на один, до Гранд-финала.
Перед каждым матчем вы с соперником по очереди убираете категории из списка,
пока не останется одна — её задачу вы оба и решаете. Первым убирает тот,
у кого рейтинг ниже; последний ход остаётся за тем, у кого рейтинг выше.
Если не успели сделать ход до начала тура, его сделает система. До начала
матча видны только названия категорий, сами задачи не показываются.
Если выигрываете — проходите в следующий тур. Если проигрываете — выбываете. - 6 Если задачу не решил никто. Время матча — ровно лимит тура, без продлений. Когда оно вышло и флаг никто не сдал, дальше проходит участник с бо́льшим рейтингом платформы — тем, который был зафиксирован в момент жеребьёвки. Если вы не открыли свой матч в первые 3 минут, а соперник открыл, вам засчитывается поражение.
- 7 Призы. По ходу турнира ничего не начисляется — страница показывает только накопленную сумму. Инферы и рейтинг приходят одним начислением после турнира, когда администратор примет отчёт.
У каждого участника свой флаг. Чужой флаг не подойдёт, а попытка сдать его видна в отчёте и засчитывается как поражение в матче. Задача открывается только при включённой демонстрации экрана, подтверждённой администратором.
Жеребьёвка — проверьте сами
Зерно d29b55dd408cf8a5bad95b7edb73c55c, проведена 03.10 19:59 (мск).
Скрипт ниже воспроизводит сетку первого тура на вашей машине: если он выведет
«совпало», значит состав групп получен из зерна, а не выбран руками.
Показать скрипт на Python
import hashlib, hmac
SEED = "d29b55dd408cf8a5bad95b7edb73c55c"
IDS = [254, 344, 421, 469, 475, 729] # участники (id), как их взял сервер
SIZES = [3, 3] # размеры групп первого тура
GROUPS = [[421, 254, 469], [344, 475, 729]] # что получилось в сетке
def stream(seed, count):
out, counter = [], 0
while len(out) < count:
block = hmac.new(seed.encode(), f"ctfinf-arena:{counter}".encode(),
hashlib.sha256).digest()
out += [int.from_bytes(block[i:i + 4], "big") for i in range(0, 32, 4)]
counter += 1
return out[:count]
ids = sorted(IDS)
numbers = stream(SEED, len(ids) - 1)
for step, position in enumerate(range(len(ids) - 1, 0, -1)):
target = numbers[step] % (position + 1)
ids[position], ids[target] = ids[target], ids[position]
groups, cursor = [], 0
for size in SIZES:
groups.append(ids[cursor:cursor + size])
cursor += size
print(groups)
print("совпало" if groups == GROUPS else "НЕ совпало")
Нужен только стандартный Python 3 — ничего ставить не надо.
Правила
- В матче все решают одну и ту же задачу. Проходит дальше тот, кто первым сдал верный флаг.
- Первый тур — группы по 2–4 человека, из группы проходит один. Дальше — матчи один на один.
- В туре несколько задач — по одной на категорию. Какую задачу играет ваш матч, определяете вы: в первом туре выбором категории на чек-ине, дальше — убирая категории по очереди с соперником.
- Убирает первым тот, у кого рейтинг ниже, последний ход остаётся за тем, у кого рейтинг выше. Не сделанный вовремя ход система делает сама.
- До начала матча видны только названия категорий. Названия задач не показываются.
- Флаг у каждого участника свой. Сдача чужого флага — поражение в матче.
- Никто не проходит в следующий тур без матча. При нечётном числе участников вместо пропуска составляется группа из трёх человек.
- Время матча — ровно лимит тура, без автоматических продлений. Если к его концу задачу никто не решил, дальше проходит участник с бо́льшим рейтингом платформы на момент жеребьёвки.
- Не открыл свой матч в первые 3 минут — поражение, если соперник на месте.
- В сетку попадают только отметившиеся на чек-ине.
- Турнир с прокторингом: задача открывается только при включённой демонстрации экрана, подтверждённой администратором.
- Инферы и рейтинг начисляются одной суммой после турнира: до принятия отчёта админ может оштрафовать или дисквалифицировать участника.
Что происходило
- Отчёт принят: начислено 460 инферов и 32 рейтинга.
- Штраф maxcyou: 600 инферов, 10 рейтинга — 80% сделал chatgpt
- Турнир завершён. Чемпион Арены — maxcyou.
- Тур 2: maxcyou решил задачу за 3:02 и проходит дальше.
- Тур 2 стартовал: 1 матч(ей), 10 минут.
- Драфт тура 2 закончен досрочно — старт через 1 мин.
- Матч 2#1: после банов играют «forensics».
- Тур 1 завершён.
- Тур 1: maxcyou решил задачу за 2:50 и проходит дальше.
- Тур 1: AlxGonin решил задачу за 2:36 и проходит дальше.
- Тур 1 стартовал: 2 матч(ей), 10 минут.
- Статус турнира: running.
- Жеребьёвка проведена: 6 участников, 2 тур(ов), зерно d29b55dd…
- Статус турнира: checkin.
- Статус турнира: registration.
- Прокторинг включён.