Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
interrogation-game — Детективная игра-допрос с голосовым управлением. Mistral Large 3 + Voxtral STT + ElevenLabs TTS. Создано для Mistral Worldwide Hackathon 2026. | Kitploit
Инструменты/GitHubGitHub/jpoindexter/interrogation-game
OSINT для социальной инженерииВеб-безопасностьCTFСоциальная инженерияМашинное ОбучениеОбучение и ОбразованиеБезопасность ИИСостязательная АтакаЛаборатории и Практика
GitHubjpoindexter/interrogation-game

interrogation-game

Детективная игра-допрос с голосовым управлением. Mistral Large 3 + Voxtral STT + ElevenLabs TTS. Создано для Mistral Worldwide Hackathon 2026.

53 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться
Репозиторий

Допрос

Interrogation — Title Screen

Голосовая детективная игра-допрос. Вы — детектив. Мистраль — подозреваемый, который врёт. Ваша задача — поймать его на лжи с помощью одних только вопросов.

Каждое дело генерируется процедурно — уникальное преступление «белых воротничков», подозреваемый, алиби и одна скрытая ложь. Роль подозреваемого исполняет Mistral Large, которому предоставлена полная предыстория и инструкция защищать её под давлением. Ни одно дело не повторяется.

Создано для Mistral Worldwide Hackathon 2026 (онлайн-трек).

"Mistral умеет рассуждать. Я заставил его врать. Ваша задача — поймать его."

Как это работает

  1. Выберите локацию и сложность
  2. Генерируется уникальное дело — преступление, подозреваемый, алиби и одна ложь
  3. Допрашивайте подозреваемого голосом или текстом
  4. Подозреваемый отвечает в характере голосом, реагирующим на стресс
  5. Собирайте улики, задавая правильные вопросы под давлением
  6. Выдвиньте обвинение — отдельный ИИ-судья оценивает его
  7. Верно = признание. Неверно = потеря попытки (всего 3)

ИИ проинструктирован никогда не признаваться, даже при максимальном стрессе. Вы выигрываете, сделав конкретное, точное обвинение — а не заставив подозреваемого сломаться.

Стек

  • Next.js 16 — App Router, TypeScript, Tailwind v4
  • Mistral Large 3 — мозг подозреваемого ИИ, генерация дел, оценка обвинений
  • Voxtral STT — распознавание речи для голосового ввода игрока
  • ElevenLabs TTS — голос подозреваемого с динамической стабильностью на основе стресса
  • Browser SpeechSynthesis — запасной вариант, если ElevenLabs недоступен
  • Supabase — таблица лидеров с RLS, хранение экспортированных игр
  • Framer Motion — анимации на всех страницах
  • PixelLab — процедурно генерируемые портреты подозреваемых

Начало работы

root@kitploit:~
npm install
cp .env.example .env    # Заполните свои ключи API
npm run dev             # http://localhost:3000

Переменные окружения

root@kitploit:~
MISTRAL_API_KEY=            # Обязательно — генерация дел, допрос, оценка, STT
ELEVENLABS_API_KEY=         # Обязательно — TTS для голоса подозреваемого
ELEVENLABS_VOICE_ID=        # Опционально — конкретный ID голоса ElevenLabs
NEXT_PUBLIC_SUPABASE_URL=   # Обязательно — URL проекта Supabase
NEXT_PUBLIC_SUPABASE_ANON_KEY=  # Обязательно — анонимный ключ Supabase (защищено RLS)
SUPABASE_SERVICE_ROLE_KEY=  # Опционально — точка входа для экспорта админа
EXPORT_SECRET=              # Опционально — аутентификация экспорта админа

Ключи API также можно настроить на странице Настройки во время выполнения — приложение поставляется без ключей, игроки используют свои.

Команды

root@kitploit:~
npm run dev       # Сервер разработки
npm run build     # Сборка для продакшена
npm run start     # Продакшен-сервер
npm run lint      # ESLint

Механики игры

Сложность

Также доступен режим безлимитного таймера — на сложном/экспертном уровне подозреваемый вызовет адвоката после 4 последовательных обменов с высоким стрессом.

Система улик

Улики открываются при порогах стресса, распределённых от 1 до 9, с ограничениями:

  • Минимальное количество вопросов для данной сложности
  • Минимальная длина вопроса (запрет на однословные «рыбалки»)
  • Пороги стресса, контролируемые сервером, для каждого номера улики

Кнопка «Обвинить» разблокируется только после сбора всех необходимых улик.

Подсчёт очков

root@kitploit:~
score = timeScore x difficultyMultiplier x efficiencyBonus x hintPenalty x accusationPenalty

timeScore       = 1000 x sqrt(max(0, 1 - elapsed / (parTime x 2)))
multiplier      = easy 1.0x, medium 1.5x, hard 2.0x, expert 2.5x
efficiencyBonus = 1.0-1.5x (меньше вопросов, чем норма = бонус)
hintPenalty     = 0.85^hintsUsed
accusePenalty   = max(0, 1 - wrongAccusations x 0.1)

Очки вычисляются на стороне сервера из замороженной статистики в момент победы — значения клиента игнорируются.

Конец игры

  • Победа: штамп APPREHENDED, поэтапное раскрытие счёта, аркадный ввод инициалов (3 буквы), таблица лидеров
  • Поражение (обвинения): ESCAPED, сводка дела, насмешка подозреваемого, раскрытие лжи
  • Поражение (время): То же, что выше, с исходом по таймауту
  • Сдаться: сгенерированное ИИ самодовольное замечание через TTS, полное раскрытие дела

Архитектура

root@kitploit:~
app/
├── page.tsx                     # Экран заголовка
├── cases/                       # Выбор дела — локации + сложность
├── game/
│   ├── page.tsx                 # Главный оркестратор игры
│   ├── hooks/                   # useVoiceRecorder, useTTS, useGameTimer, useSfx, useSettings
│   ├── components/              # Dock, TopBar, CaseFile, SuspectZone, BriefingScreen, dialogs
│   ├── win/                     # Экран победы + InitialsEntry
│   └── lose/                    # Экран поражения
├── leaderboard/                 # Топ-20, анимация нового рекорда
├── settings/                    # Настройка ключей API, экспорт, предпочтения
├── help/                        # Как играть, подсчёт очков, об игре
├── about/                       # Информация о создателе
└── api/
    ├── generate-case/           # GET — генерация дела Mistral
    ├── interrogate/             # POST — вопрос игрока → ответ подозреваемого
    ├── accuse/                  # POST — оценка обвинения (отдельный судья)
    ├── evaluate/                # POST — анализ победы/поражения
    ├── hint/                    # POST — завуалированные подсказки по триггерам стресса
    ├── tts/                     # POST — ElevenLabs TTS
    ├── transcribe/              # POST — Voxtral STT
    ├── leaderboard/             # GET/POST — таблица лидеров Supabase
    ├── patterns/                # GET/POST — межсессионные паттерны обучения
    └── export/                  # GET — административный экспорт JSONL

src/lib/
├── mistral/                     # Mistral-клиент, допрос, оценка, генерация дел, эмбеддинги
├── game-session.ts              # Серверное хранилище сессий, токены победы, экспорт
├── game-state.ts                # Определения типов
├── scoring.ts                   # Расчёт очков + рейтинг детектива
├── sanitize.ts                  # Валидация ввода, обнаружение инъекций
├── db.ts                        # Клиент Supabase
└── rate-limit.ts                # Ограничение запросов по IP

Безопасность

Игра запускает состязательный ИИ против ввода игрока — безопасность является ключевой функцией, а не дополнением.

Санация ввода: 30+ регулярных выражений для паттернов инъекций, нормализация Unicode (NFKD), удаление нулевой ширины символов, обнаружение base64-полезной нагрузки, блокировка бессвязного/неанглийского текста.

Сканирование вывода: Ответы ИИ проверяются на секреты дела с нечетким сопоставлением (порог 40%, фильтрация стоп-слов). Утечки заменяются уклончивым ответом.

Изоляция судьи: Оценка обвинения использует отдельный вызов Mistral с выделенным системным промптом, рандомизированными граничными токенами, удалёнными маркерами инъекций. Вызовы судьи никогда не используют ключи API, предоставленные игроком.

Контроль стресса: Серверное монотонное ограничение — стресс только растёт, максимум +1 за ход. Пороги улик контролируются сервером. ИИ не может резко повысить или понизить стресс для прохождения игровых ворот.

Токены победы: 128-битные случайные, сравнение с защитой от временных атак, одноразовые, TTL 30 минут. Очки рассчитываются из серверного снимка статистики — значения, сообщённые клиентом, игнорируются.

Безопасность сессий: 192-битные случайные ID, мьютекс-блокировки, TTL 1 час, максимум 5000 сессий с вытеснением LRU. Режим таймера фиксируется при создании.

Валидация TTS: Требуется активная сессия. Текст должен совпадать с последним сообщением ассистента. Предотвращает злоупотребление бесплатным прокси TTS.

Защита от отравления RAG: Межсессионные изученные тактики фильтруются через обнаружение инъекций и санацию перед включением в промпт.

Экспорт данных

Завершённые игры сохраняются в Supabase для анализа и улучшения модели:

  • Полные данные дела (включая секреты), история разговора, исход, статистика, детали обвинения
  • Административный экспорт: GET /api/export?limit=100&offset=0&outcome=win&difficulty=hard с заголовком Authorization: Bearer <EXPORT_SECRET>
  • CLI: EXPORT_SECRET=xxx npx tsx scripts/export-data.ts --output=data/export.jsonl

Звуковой дизайн

  • Иммерсивный звук: тиканье часов в фоне, нервное ёрзание при высоком стрессе, драматические акценты
  • Фоновая музыка с плавным переходом между меню и игровыми треками
  • Все звуковые эффекты: моно, 22 кГц, 48 кбит/с MP3, длительностью <1 с, с индивидуальными огибающими затухания
  • Независимые регуляторы громкости для музыки и звуковых эффектов
  • Стабильность голоса ElevenLabs снижается с ростом стресса подозреваемого — голос буквально деградирует

Дизайн

Эстетика нуар-детектива. Тёмный, минималистичный, типографический. JetBrains Mono. Фоны и портреты подозреваемых в стиле пиксель-арт. Никаких облачков чата — диалог отображается как стилизованный текст в сцене.

Настройка Supabase

Создайте таблицу leaderboard:

root@kitploit:~
CREATE TABLE leaderboard (
  id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
  player_name text NOT NULL,
  case_number text,
  case_setting text,
  suspect_name text,
  time_remaining int,
  stress_level int,
  clues_found int,
  hints_used int,
  accusations_used int,
  detective_rating text,
  score int NOT NULL,
  created_at timestamptz DEFAULT now()
);

ALTER TABLE leaderboard ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Public read" ON leaderboard FOR SELECT USING (true);
CREATE POLICY "Public insert" ON leaderboard FOR INSERT WITH CHECK (true);

Опциональная таблица game_exports для тренировочных данных:

root@kitploit:~
CREATE TABLE game_exports (
  id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
  session_id text UNIQUE NOT NULL,
  case_data jsonb NOT NULL,
  conversation jsonb NOT NULL,
  outcome text NOT NULL,
  difficulty text NOT NULL,
  setting text,
  stats jsonb NOT NULL,
  accusation_text text,
  accusation_correct boolean,
  created_at timestamptz DEFAULT now()
);

ALTER TABLE game_exports ENABLE ROW LEVEL SECURITY;
CREATE POLICY "anon_insert" ON game_exports FOR INSERT TO anon WITH CHECK (true);
CREATE POLICY "no_public_read" ON game_exports FOR SELECT TO anon USING (false);

Опциональная таблица interrogation_patterns для межсессионного обучения:

root@kitploit:~
CREATE TABLE interrogation_patterns (
  id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
  session_id text UNIQUE NOT NULL,
  setting text,
  difficulty text NOT NULL,
  outcome text NOT NULL,
  questions jsonb,
  effective_questions jsonb,
  max_stress int,
  clues_found int,
  time_elapsed int,
  embedding vector(1024),
  created_at timestamptz DEFAULT now()
);

ALTER TABLE interrogation_patterns ENABLE ROW LEVEL SECURITY;
CREATE POLICY "anon_insert" ON interrogation_patterns FOR INSERT TO anon WITH CHECK (true);
CREATE POLICY "anon_read" ON interrogation_patterns FOR SELECT TO anon USING (true);

Хакатон

Mistral Worldwide Hackathon 2026 — Онлайн-трек, категория «Anything Goes».

Критерии оценки: Креативность/уникальность (наиболее важно), потенциал в будущем, техническая реализация, качество презентации.

Специальные призы: Best Mistral Vibe (AirPods), Best Voice AI (подписка ElevenLabs на 6 месяцев).

Спонсоры: Mistral, ElevenLabs, NVIDIA, AWS, Hugging Face, Jump Trading, Weights & Biases, Giant, Raise, Tilde Research, White Circle.

Почему этот проект

Большинство хакатонных AI-проектов — это ассистенты или чат-боты. Этот переворачивает сценарий — ИИ не помогает вам, а врёт вам. Игрок действует против модели, а не сотрудничает с ней. Это создаёт принципиально иное взаимодействие: вы ищете несоответствия, оказываете давление и считываете поведенческие сигналы, а не просите помощи.

Игра также генерирует тренировочные данные. Каждая завершённая сессия — заданные вопросы, прогрессия стресса, какие тактики сработали, какие нет — экспортируется в формате JSONL. Это создаёт петлю обратной связи: играйте в игру, экспортируйте данные, донастраивайте модель, делайте её сложнее для разоблачения.

Использование экосистемы Mistral

  • Mistral Large 3 — мозг подозреваемого ИИ (состязательная ролевая игра со структурированным JSON-выводом), генерация дел (процедурные сценарии преступлений), оценка обвинений (отдельный вызов судьи)
  • Voxtral STT — транскрипция голосового ввода игрока
  • Mistral Embeddings — векторное сходство для поиска межсессионных паттернов (обучение RAG)

Потенциал в будущем

  • Донастройка Mistral на экспортированных данных игры для создания всё более сложных подозреваемых
  • Многопользовательский режим — один игрок допрашивает, другой наблюдает и советует
  • Редактор дел — сценарии, созданные сообществом, с пользовательскими подозреваемыми
  • Мобильное приложение с постоянно активным голосом
  • Инструмент для тренировки реальных техник допроса

Создатель

Джейсон Пойндекстер — одиночная заявка, онлайн-трек из Барселоны.

Скачать инструмент
УровеньУликиТаймерПоведение подозреваемого
Лёгкий25 минОчевидная ложь, нервничает
Средний37 минЛожь можно поймать, спокоен
Сложный49 минТонкая ложь, умело уклоняется
Эксперт510 минГлубоко скрытая ложь, манипулирует