Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
interrogation-game — Jeu d'interrogatoire policier basé sur la voix. Mistral Large 3 + Voxtral STT + ElevenLabs TTS. Conçu pour le Mistral Worldwide Hackathon 2026. | Kitploit
Outils/GitHubGitHub/jpoindexter/interrogation-game
OSINT pour l'Ingénierie SocialeSécurité WebCTFIngénierie SocialeApprentissage AutomatiqueApprentissage et ÉducationSécurité de l'IAAttaque AdversarialeLabs et Pratique
GitHubjpoindexter/interrogation-game

interrogation-game

Jeu d'interrogatoire policier basé sur la voix. Mistral Large 3 + Voxtral STT + ElevenLabs TTS. Conçu pour le Mistral Worldwide Hackathon 2026.

5il y a 3 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Voir le dépôt

Interrogation

Interrogation — Écran titre

Un jeu d'interrogatoire de détective basé sur la voix. Vous êtes un détective. Mistral est un suspect qui ment. Votre travail consiste à découvrir le mensonge rien qu'en posant des questions.

Chaque affaire est générée de manière procédurale — un crime en col blanc unique, un suspect, une histoire de couverture et un mensonge caché. Le suspect est interprété par Mistral Large, doté d'une histoire complète et chargé de la défendre sous pression contradictoire. Aucune affaire n'est identique.

Construit pour le Mistral Worldwide Hackathon 2026 (Volet en ligne).

"Mistral peut raisonner. Je l'ai fait mentir. Votre travail est de le prendre sur le fait."

Comment ça marche

  1. Choisissez un lieu et une difficulté
  2. Une affaire unique est générée — crime, suspect, histoire de couverture et un mensonge
  3. Interrogez le suspect par la voix ou le texte
  4. Le suspect répond en personnage avec une voix réactive au stress
  5. Collectez des indices en posant les bonnes questions sous pression
  6. Faites votre accusation — une IA juge séparée l'évalue
  7. Correct = confession. Faux = perte d'une tentative (3 au total)
  8. L'IA est instruite de ne jamais avouer, même sous stress maximum. Vous gagnez en faisant une accusation spécifique et précise — pas en faisant craquer le suspect.

Stack

  • Next.js 16 — App Router, TypeScript, Tailwind v4
  • Mistral Large 3 — cerveau de l'IA suspecte, génération d'affaires, évaluation des accusations
  • Voxtral STT — reconnaissance vocale pour les entrées vocales du joueur
  • ElevenLabs TTS — voix du suspect avec stabilité dynamique basée sur le stress
  • Browser SpeechSynthesis — solution de secours quand ElevenLabs est indisponible
  • Supabase — persistance du classement avec RLS, stockage des exportations de parties
  • Framer Motion — animations sur toutes les pages
  • PixelLab — portraits de suspects générés procéduralement

Pour commencer

root@kitploit:~
npm install
cp .env.example .env    # Remplissez vos clés API
npm run dev             # http://localhost:3000

Variables d'environnement

root@kitploit:~
MISTRAL_API_KEY=            # Requis — génération d'affaires, interrogatoire, évaluation, STT
ELEVENLABS_API_KEY=         # Requis — TTS pour la voix du suspect
ELEVENLABS_VOICE_ID=        # Facultatif — ID de voix ElevenLabs spécifique
NEXT_PUBLIC_SUPABASE_URL=   # Requis — URL du projet Supabase
NEXT_PUBLIC_SUPABASE_ANON_KEY=  # Requis — clé anonyme Supabase (protégée par RLS)
SUPABASE_SERVICE_ROLE_KEY=  # Facultatif — endpoint d'exportation admin
EXPORT_SECRET=              # Facultatif — authentification d'exportation admin

Les clés API peuvent également être configurées dans la page Paramètres à l'exécution — l'application est livrée sans clé et les joueurs apportent leurs propres clés.

Commandes

root@kitploit:~
npm run dev       # Serveur de développement
npm run build     # Construction pour la production
npm run start     # Serveur de production
npm run lint      # ESLint

Mécaniques de jeu

Difficulté

Un mode minuteur illimité est également disponible — en difficulté difficile/expert, le suspect fera appel à un avocat après 4 échanges consécutifs à stress élevé.

Système d'indices

Les indices se déverrouillent à des seuils de stress répartis de 1 à 9, conditionnés par :

  • Nombre minimum de questions par difficulté
  • Longueur minimale des questions (pas de pêche au mot unique)
  • Seuils de stress appliqués côté serveur par numéro d'indice

Le bouton Accuser ne se déverrouille qu'après avoir collecté tous les indices requis.

Score

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 (fewer questions than par = bonus)
hintPenalty     = 0.85^hintsUsed
accusePenalty   = max(0, 1 - wrongAccusations x 0.1)

Le score est calculé côté serveur à partir de statistiques figées au moment de la victoire — les valeurs du client sont ignorées.

Fin de partie

  • Victoire : tampon APPREHENDED, dévoilement progressif du score, saisie d'initiales de 3 lettres façon arcade, classement
  • Défaite (accusations) : ESCAPED, résumé de l'affaire, raillerie du suspect, le mensonge révélé
  • Défaite (temps) : Identique ci-dessus avec issue de timeout
  • Abandon : remarque narquoise générée par l'IA via TTS, révélation complète de l'affaire

Architecture

root@kitploit:~
app/
├── page.tsx                     # Écran titre
├── cases/                       # Sélection d'affaires — lieux + difficulté
├── game/
│   ├── page.tsx                 # Orchestrateur principal du jeu
│   ├── hooks/                   # useVoiceRecorder, useTTS, useGameTimer, useSfx, useSettings
│   ├── components/              # Dock, TopBar, CaseFile, SuspectZone, BriefingScreen, dialogs
│   ├── win/                     # Écran de victoire + InitialsEntry
│   └── lose/                    # Écran de défaite
├── leaderboard/                 # Top 20, animation de nouvelle entrée
├── settings/                    # Configuration des clés API, exportation, préférences
├── help/                        # Comment jouer, score, à propos
├── about/                       # Informations sur le créateur
└── api/
    ├── generate-case/           # GET — génération d'affaire par Mistral
    ├── interrogate/             # POST — question du joueur → réponse du suspect
    ├── accuse/                  # POST — évaluation de l'accusation (juge séparé)
    ├── evaluate/                # POST — analyse victoire/défaite
    ├── hint/                    # POST — indices basés sur des seuils de stress obscurcis
    ├── tts/                     # POST — ElevenLabs TTS
    ├── transcribe/              # POST — Voxtral STT
    ├── leaderboard/             # GET/POST — classement Supabase
    ├── patterns/                # GET/POST — modèles d'apprentissage inter-sessions
    └── export/                  # GET — exportation admin JSONL

src/lib/
├── mistral/                     # Client Mistral, interrogatoire, évaluation, génération d'affaires, embeddings
├── game-session.ts              # Stockage de session côté serveur, jetons de victoire, exportation
├── game-state.ts                # Définitions de types
├── scoring.ts                   # Calcul du score + classements de détective
├── sanitize.ts                  # Validation des entrées, détection d'injection
├── db.ts                        # Client Supabase
└── rate-limit.ts                # Limitation de débit par IP

Sécurité

Le jeu confronte une IA antagoniste aux entrées du joueur — la sécurité est une fonctionnalité centrale, pas une réflexion après coup.

Assainissement des entrées : plus de 30 motifs d'injection regex, normalisation Unicode (NFKD), suppression des caractères de largeur nulle, détection de payloads base64, blocage du charabia/non-anglais.

Analyse des sorties : les réponses de l'IA sont vérifiées par rapport aux secrets de l'affaire avec correspondance floue (seuil de 40 %, filtrage des mots vides). Les réponses divulguées sont remplacées par une esquive.

Isolement du juge : l'évaluation de l'accusation utilise un appel Mistral séparé avec une invite système dédiée, des jetons de délimitation aléatoires, des marqueurs d'injection supprimés. Les appels du juge n'utilisent jamais les clés API fournies par le joueur.

Application du stress : limitation monotone côté serveur — le stress ne fait qu'augmenter, max +1 par tour. Les seuils d'indices sont appliqués côté serveur. L'IA ne peut pas faire monter ou descendre le stress pour contourner les mécanismes du jeu.

Jetons de victoire : 128 bits aléatoires, comparaison à temps constant, à usage unique, TTL de 30 minutes. Score calculé à partir d'un instantané des statistiques côté serveur — les valeurs rapportées par le client sont ignorées.

Sécurité des sessions : IDs aléatoires de 192 bits, verrous mutex, TTL de 1 heure, maximum 5000 sessions avec éviction LRU. Mode minuteur verrouillé à la création.

Validation TTS : nécessite une session active. Le texte doit correspondre à un message récent de l'assistant. Empêche les abus de proxy TTS gratuit.

Défense contre l'empoisonnement RAG : les tactiques apprises entre sessions sont filtrées via la détection d'injection et l'assainissement avant inclusion dans l'invite.

Export de données

Les parties terminées sont persistées dans Supabase pour analyse et amélioration du modèle :

  • Données complètes de l'affaire (y compris les secrets), historique de la conversation, résultat, statistiques, détails de l'accusation
  • Exportation admin : GET /api/export?limit=100&offset=0&outcome=win&difficulty=hard avec en-tête Authorization: Bearer <EXPORT_SECRET>
  • CLI : EXPORT_SECRET=xxx npx tsx scripts/export-data.ts --output=data/export.jsonl

Conception sonore

  • Audio immersif : tic-tac ambiant, agitation nerveuse à stress élevé, sonorités dramatiques
  • Musique de fond avec fondu enchaîné entre les menus et les pools de jeu
  • Tous les effets sonores en MP3 mono 22 kHz 48 kbps, <1 s chacun, avec enveloppes de fondu par son
  • Contrôle du volume principal pour la musique et les effets sonores indépendamment
  • La stabilité de la voix ElevenLabs diminue avec le stress du suspect — la voix se dégrade littéralement

Design

Esthétique de détective noir. Sombre, minimaliste, typographique. JetBrains Mono. Arrière-plans pixel art et portraits de suspects. Pas de bulles de dialogue — le dialogue apparaît sous forme de texte stylisé dans la scène.

Configuration Supabase

Créez une table 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);

Table game_exports facultative pour les données d'entraînement :

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);

Table interrogation_patterns facultative pour l'apprentissage inter-sessions :

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);

Hackathon

Mistral Worldwide Hackathon 2026 — Volet en ligne, catégorie "Tout est permis".

Critères de jugement : Créativité/originalité (le plus important), potentiel futur, implémentation technique, qualité de la présentation.

Prix spéciaux : Best Mistral Vibe (AirPods), Best Voice AI (abonnement ElevenLabs 6 mois).

Sponsors : Mistral, ElevenLabs, NVIDIA, AWS, Hugging Face, Jump Trading, Weights & Biases, Giant, Raise, Tilde Research, White Circle.

Pourquoi ce projet

La plupart des projets d'IA dans les hackathons sont des assistants ou des chatbots. Celui-ci renverse la situation — l'IA ne vous aide pas, elle vous ment. Le joueur est en position d'adversaire par rapport au modèle, pas de collaborateur. Cela crée une interaction fondamentalement différente : vous cherchez des incohérences, vous mettez la pression, vous lisez des signaux comportementaux au lieu de demander de l'aide.

Le jeu génère également des données d'entraînement. Chaque session terminée — questions posées, progression du stress, tactiques qui ont fonctionné ou non — est exportable au format JSONL. Cela crée une boucle de rétroaction : jouez au jeu, exportez les données, affinez le modèle, rendez-le plus difficile à démasquer.

Utilisation de l'écosystème Mistral

  • Mistral Large 3 — cerveau de l'IA suspecte (jeu de rôle antagoniste avec sortie JSON structurée), génération d'affaires (scénarios de crime procéduraux), évaluation des accusations (appel juge séparé)
  • Voxtral STT — transcription des entrées vocales du joueur
  • Mistral Embeddings — similarité vectorielle pour la correspondance de modèles inter-sessions (apprentissage RAG)

Potentiel futur

  • Affiner Mistral sur les données de jeu exportées pour créer des suspects de plus en plus difficiles
  • Mode multijoueur — un joueur interroge, un autre regarde et conseille
  • Éditeur d'affaires — scénarios créés par la communauté avec des suspects personnalisés
  • Application mobile avec voix toujours active
  • Outil d'entraînement pour la pratique réelle des techniques d'interrogatoire

Créé par

Jason Poindexter — Participation solo, volet en ligne depuis Barcelone.

Télécharger l’outil
NiveauIndicesMinuteurComportement du suspect
Facile25 minMensonge évident, nerveux
Moyen37 minMensonge attrapable, calme
Difficile49 minMensonge subtil, expert en esquive
Expert510 minMensonge profondément enfoui, manipulateur