108 lines
9.1 KiB
Markdown
108 lines
9.1 KiB
Markdown
|
|
# Невпізнаний — детектив на двох, розділ 3
|
|||
|
|
|
|||
|
|
Процедурний детектив у дусі Shadows of Doubt: тіло без імені, вбивці немає в списку підозрюваних,
|
|||
|
|
і **кожен код сесії — цілком нова справа**. Кооператив для двох у локальній мережі.
|
|||
|
|
|
|||
|
|
## Запуск
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
npm install # один раз (єдина залежність — ws)
|
|||
|
|
node server.js
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Порт за замовчуванням — **3002**. Обидва гравці відкривають адресу з консолі, вводять
|
|||
|
|
**однаковий код сесії** і різні ролі. Код сесії — це seed справи: той самий код — та сама
|
|||
|
|
справа та її автозбереження (грати можна кілька вечорів), новий код — нова справа.
|
|||
|
|
|
|||
|
|
## Ролі
|
|||
|
|
|
|||
|
|
- **Польовий детектив** — ходить районом (WASD/стрілки, E — увійти), обшукує місця,
|
|||
|
|
стукає у квартири, говорить з людьми. У приватне житло — лише з ключем або ордером.
|
|||
|
|
- **Аналітик** — база мешканців (пошук за точним ім'ям з клавіатури — помилка в написанні
|
|||
|
|
дасть порожній результат; фільтри за слідами: взуття, зріст, одяг, відбитки), мапа району
|
|||
|
|
з напарником наживо, системи (оператор, банки, камери, криміналістика, лабораторія)
|
|||
|
|
і **шифри**: Цезар, base64, PIN, злам md5-пароля за фактами з досьє.
|
|||
|
|
|
|||
|
|
## Два типи справ
|
|||
|
|
|
|||
|
|
- **Вбивство** (~75%): тіло без імені. Акт I — встановіть особу жертви. Акт II — ХТО, ЯК і ЧОМУ.
|
|||
|
|
- **Викрадення** (~25%): людини нема, але вона ще жива. Особа відома із заяви про зникнення;
|
|||
|
|
з'ясуйте, ХТО забрав людину, **ДЕ її тримають** і ЧОМУ. Фінал — рапорт на штурм:
|
|||
|
|
правильне ім'я і місце = заручника рятують. Помилка = штурм іде не туди.
|
|||
|
|
|
|||
|
|
## Правила
|
|||
|
|
|
|||
|
|
- У справі-вбивстві: Акт I — встановіть особу жертви. Акт II — хто, як і чому.
|
|||
|
|
- Мотивів у пулі — одинадцять: від ревнощів і боргів до спадку, старих гріхів, одержимого
|
|||
|
|
переслідувача, кримінального бізнесу, викупу і серійного патерну з підписом на тілі.
|
|||
|
|
- Обшуки знаходять і докази, і **дрібниці** — чек, запальничку, чужий записник. Що з цього
|
|||
|
|
справа, а що мотлох — вирішуєте самі (викреслюйте і ховайте зайве на дошці).
|
|||
|
|
- Кожен мешканець має **плітки про район** — здебільшого шум, але серед балачок трапляється правда.
|
|||
|
|
- Сліди з місця злочину — це фільтри для бази мешканців. ДНК порівнюють лише зі звуженим колом.
|
|||
|
|
- Ордер дає прокурор — і лише коли доказ прямо вказує на особу.
|
|||
|
|
- Стережіться хибних слідів: вони правдоподібні, але спростовні.
|
|||
|
|
- **Звинувачення одне.** Хто, чим, чому + закріплені 📌 докази; підписують обоє.
|
|||
|
|
Помилка — звільнення і правда, яку ви не розкрили.
|
|||
|
|
|
|||
|
|
## Міні-ігри
|
|||
|
|
|
|||
|
|
- **Польовий**: вилучення доказів твердою рукою (зафіксуй пінцет у зоні; промахи розширюють
|
|||
|
|
зону); **сейф із кодовим замком** — код не підбирається, а виводиться з деталі десь у
|
|||
|
|
квартирі; пошук оголошення-акростиха в місті (див. 3301).
|
|||
|
|
- **Аналітик**: **гель-електрофорез ДНК** — звузьте коло і зіставте смуги доріжок оком;
|
|||
|
|
**дактилоскопія** — відбиток зі знаряддя знято під кутом, порівняйте візерунки;
|
|||
|
|
**архів камер** — оберіть, КОЛИ дивитися плівку (час смерті є в матеріалах);
|
|||
|
|
**тріангуляція** — три вежі, три дуги на мапі: клацніть будинок на їх перетині, щоб
|
|||
|
|
звузити коло до тих, хто там буває. Помилковий вибір у лабораторії чесно каже «ні».
|
|||
|
|
- **Інструменти дешифрування** (вкладка «Шифри»): Base64, перебір усіх зсувів Цезаря,
|
|||
|
|
Hex→текст, Binary→текст. Інструменти механічні — думати, що і куди вставляти, доведеться самим.
|
|||
|
|
|
|||
|
|
**Шифри — в кожній справі й не лише на ноутбуці.** Крім сюжетних (щоденник під Цезарем,
|
|||
|
|
акаунт у Base64, PIN телефона), кожен кейс має ще два: **пошту жертви під md5-паролем** і
|
|||
|
|
**записку-шифр** (ротація Base64/Цезар/Hex/Binary). Це необов'язкові дрібниці — але саме
|
|||
|
|
там ви набиваєте руку на кожному типі.
|
|||
|
|
|
|||
|
|
## Підказки — приховані
|
|||
|
|
|
|||
|
|
Усі підказки сховані за кнопкою **💡 Підказка** (і в шифрах, і в лабораторії, і в сейфі).
|
|||
|
|
Промт описує лише артефакт і дає хеш/рядок — думайте самі, розкривайте підказку, лише
|
|||
|
|
коли справді застрягли.
|
|||
|
|
|
|||
|
|
## Паролі (крек латиницею)
|
|||
|
|
|
|||
|
|
Паролі до пристроїв — завжди **латиницею**, у промті показано md5-хеш: беріть свій
|
|||
|
|
`hashcat`/`john` і будь-який словник (напр. `rockyou.txt`). Алгоритм дає два стилі порівну:
|
|||
|
|
|
|||
|
|
- **Особистий** — виводиться з досьє: кличка собаки чи ім'я жертви, **транслітеровані в
|
|||
|
|
латиницю** (у досьє вони кирилицею — це і є робота), інколи + рік народження. Швидше
|
|||
|
|
здогадатися, ніж брутити (`Барон` → `baron`, `Лола`+рік → `lola1985`).
|
|||
|
|
- **Випадковий** — жодного зв'язку з жертвою, реальний запис зі словника. Тут лише перебір:
|
|||
|
|
`hashcat -m 0 <hash> rockyou.txt` знайде `cookie`, `ginger`, `letmein`…
|
|||
|
|
|
|||
|
|
Пароль флешки 3301 теж латиницею: акростих оголошення транслітеруєте й додаєте рік.
|
|||
|
|
|
|||
|
|
## CICADA 3301
|
|||
|
|
|
|||
|
|
У **кожній** справі захована чотиришарова головоломка в дусі Cicada 3301 (прості числа,
|
|||
|
|
шари шифрів, «оголошення в місті» замість плакатів):
|
|||
|
|
скринька з кодовим замком (код — на гравіюванні десь у квартирі) → картка з рядком
|
|||
|
|
Base64-поверх-Цезаря → інструкція веде до оголошення в місті → перші літери рядків +
|
|||
|
|
чотири цифри = пароль до флешки. Нагорода — особистий архів жертви: найкоротший шлях
|
|||
|
|
до правди. Ланцюжок необов'язковий: справа розв'язується і без нього.
|
|||
|
|
|
|||
|
|
## Перевірка
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
npm test
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Fair-play валідатор ганяє 300 випадкових справ: кожна розв'язна від стартових фактів,
|
|||
|
|
кожен хибний слід спростовний, усі шифри чесні. Інтеграційний тест проходить справжню
|
|||
|
|
справу двома ws-клієнтами до розкриття (і до звільнення).
|
|||
|
|
|
|||
|
|
## Генератор як бібліотека
|
|||
|
|
|
|||
|
|
`casegen/` не залежить від сервера й DOM: `generateCase(seed)` → мешканці, жертва, вбивця,
|
|||
|
|
мотив, граф доказів, шифри; `solve(cs)` — симулятор досяжності; `checkAccusation(...)`.
|
|||
|
|
Можна брати в будь-який інший проєкт.
|