# Невпізнаний — детектив на двох, розділ 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 rockyou.txt` знайде `cookie`, `ginger`, `letmein`… Пароль флешки 3301 теж латиницею: акростих оголошення транслітеруєте й додаєте рік. ## CICADA 3301 У **кожній** справі захована чотиришарова головоломка в дусі Cicada 3301 (прості числа, шари шифрів, «оголошення в місті» замість плакатів): скринька з кодовим замком (код — на гравіюванні десь у квартирі) → картка з рядком Base64-поверх-Цезаря → інструкція веде до оголошення в місті → перші літери рядків + чотири цифри = пароль до флешки. Нагорода — особистий архів жертви: найкоротший шлях до правди. Ланцюжок необов'язковий: справа розв'язується і без нього. ## Перевірка ``` npm test ``` Fair-play валідатор ганяє 300 випадкових справ: кожна розв'язна від стартових фактів, кожен хибний слід спростовний, усі шифри чесні. Інтеграційний тест проходить справжню справу двома ws-клієнтами до розкриття (і до звільнення). ## Генератор як бібліотека `casegen/` не залежить від сервера й DOM: `generateCase(seed)` → мешканці, жертва, вбивця, мотив, граф доказів, шифри; `solve(cs)` — симулятор досяжності; `checkAccusation(...)`. Можна брати в будь-який інший проєкт.