Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
interrogation-game — Juego de interrogatorio detectivesco basado en voz. Mistral Large 3 + Voxtral STT + ElevenLabs TTS. Construido para el Mistral Worldwide Hackathon 2026. | Kitploit
Herramientas/GitHubGitHub/jpoindexter/interrogation-game
OSINT para Ingeniería SocialSeguridad WebCTFIngeniería SocialAprendizaje AutomáticoAprendizaje y EducaciónSeguridad de IAAtaque AdversarioLabs y Práctica

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir
GitHubjpoindexter/interrogation-game

interrogation-game

Juego de interrogatorio detectivesco basado en voz. Mistral Large 3 + Voxtral STT + ElevenLabs TTS. Construido para el Mistral Worldwide Hackathon 2026.

Ver Repositorio
59hace 4 mesesAún no revisado

Interrogation

Interrogación — Pantalla de título

Un juego de interrogatorio detectivesco basado en voz. Eres un detective. Mistral es un sospechoso que miente. Tu trabajo es descubrir la mentira solo mediante preguntas.

Cada caso se genera de forma procedural: un crimen de cuello blanco único, un sospechoso, una coartada y una mentira oculta. El sospechoso es interpretado por Mistral Large, con una historia completa y la instrucción de defenderla bajo presión adversarial. No hay dos casos iguales.

Construido para el Mistral Worldwide Hackathon 2026 (Modalidad Online).

"Mistral puede razonar. Lo hice mentir. Tu trabajo es atraparlo."

Cómo funciona

  1. Elige una ubicación y dificultad
  2. Se genera un caso único: crimen, sospechoso, coartada y una mentira
  3. Interroga al sospechoso usando voz o texto
  4. El sospechoso responde en el personaje con voz que reacciona al estrés
  5. Recoge pistas haciendo las preguntas correctas bajo presión
  6. Haz tu acusación: un juez de IA independiente la evalúa
  7. Correcto = confesión. Incorrecto = pierdes un intento (3 en total)
  8. La IA tiene instrucciones de nunca confesar, incluso bajo estrés máximo. Ganas haciendo una acusación específica y precisa, no haciendo que el sospechoso se quiebre.

Stack

  • Next.js 16 — App Router, TypeScript, Tailwind v4
  • Mistral Large 3 — cerebro IA del sospechoso, generación de casos, evaluación de acusaciones
  • Voxtral STT — reconocimiento de voz para entrada de voz del jugador
  • ElevenLabs TTS — voz del sospechoso con estabilidad dinámica basada en estrés
  • Browser SpeechSynthesis — alternativa cuando ElevenLabs no está disponible
  • Supabase — persistencia de tabla de clasificación con RLS, almacenamiento de exportación de partidas
  • Framer Motion — animaciones en todas las páginas
  • PixelLab — retratos de sospechosos generados proceduralmente

Primeros pasos

root@kitploit:~
npm install
cp .env.example .env    # Fill in your API keys
npm run dev             # http://localhost:3000

Variables de entorno

root@kitploit:~
MISTRAL_API_KEY=            # Required — case gen, interrogation, evaluation, STT
ELEVENLABS_API_KEY=         # Required — TTS for suspect voice
ELEVENLABS_VOICE_ID=        # Optional — specific ElevenLabs voice ID
NEXT_PUBLIC_SUPABASE_URL=   # Required — Supabase project URL
NEXT_PUBLIC_SUPABASE_ANON_KEY=  # Required — Supabase anon key (RLS-protected)
SUPABASE_SERVICE_ROLE_KEY=  # Optional — admin export endpoint
EXPORT_SECRET=              # Optional — admin export auth

Las claves de API también se pueden configurar en la página de Configuración en tiempo de ejecución: la aplicación se distribuye sin claves y los jugadores traen las suyas propias.

Comandos

root@kitploit:~
npm run dev       # Dev server
npm run build     # Production build
npm run start     # Production server
npm run lint      # ESLint

Mecánicas del juego

Dificultad

También está disponible un modo de tiempo ilimitado — en difícil/experto, el sospechoso pedirá un abogado después de 4 intercambios consecutivos de alto estrés.

Sistema de pistas

Las pistas se desbloquean en umbrales de estrés distribuidos del 1 al 9, restringidos por:

  • Número mínimo de preguntas por dificultad
  • Longitud mínima de pregunta (sin preguntas de una palabra)
  • Umbrales de estrés impuestos por servidor por número de pista

El botón de Acusar se desbloquea solo después de recolectar todas las pistas requeridas.

Puntuación

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)

La puntuación se calcula del lado del servidor a partir de estadísticas congeladas al momento de ganar: los valores del cliente se ignoran.

Final de la partida

  • Ganar: Sello de APREHENDIDO, revelación escalonada de puntuación, entrada de iniciales de 3 letras estilo arcade, tabla de clasificación
  • Perder (acusaciones): ESCAPÓ, resumen del caso, burla del sospechoso, la mentira revelada
  • Perder (tiempo): Lo mismo que arriba con resultado de tiempo agotado
  • Rendirse: Comentario engreído generado por IA mediante TTS, revelación completa del caso

Arquitectura

root@kitploit:~
app/
├── page.tsx                     # Title screen
├── cases/                       # Case select — locations + difficulty
├── game/
│   ├── page.tsx                 # Main game orchestrator
│   ├── hooks/                   # useVoiceRecorder, useTTS, useGameTimer, useSfx, useSettings
│   ├── components/              # Dock, TopBar, CaseFile, SuspectZone, BriefingScreen, dialogs
│   ├── win/                     # Win screen + InitialsEntry
│   └── lose/                    # Lose screen
├── leaderboard/                 # Top 20, new-entry animation
├── settings/                    # API key config, export, preferences
├── help/                        # How to play, scoring, about
├── about/                       # Builder info
└── api/
    ├── generate-case/           # GET — Mistral case generation
    ├── interrogate/             # POST — player question → suspect response
    ├── accuse/                  # POST — accusation evaluation (separate judge)
    ├── evaluate/                # POST — win/loss analysis
    ├── hint/                    # POST — obfuscated stress trigger hints
    ├── tts/                     # POST — ElevenLabs TTS
    ├── transcribe/              # POST — Voxtral STT
    ├── leaderboard/             # GET/POST — Supabase leaderboard
    ├── patterns/                # GET/POST — cross-session learning patterns
    └── export/                  # GET — admin JSONL export

src/lib/
├── mistral/                     # Mistral client, interrogation, evaluation, case gen, embeddings
├── game-session.ts              # Server-side session store, win tokens, export
├── game-state.ts                # Type definitions
├── scoring.ts                   # Score calculation + detective ratings
├── sanitize.ts                  # Input validation, injection detection
├── db.ts                        # Supabase client
└── rate-limit.ts                # Per-IP rate limiting

Seguridad

El juego ejecuta IA adversarial contra la entrada del jugador: la seguridad es una característica central, no una ocurrencia tardía.

Desinfección de entrada: más de 30 patrones de inyección regex, normalización Unicode (NFKD), eliminación de caracteres de ancho cero, detección de cargas base64, bloqueo de galimatías/no inglés.

Escaneo de salida: las respuestas de la IA se verifican contra secretos del caso con coincidencia difusa (umbral del 40%, filtrado de palabras vacías). Las respuestas filtradas se reemplazan con desvío.

Aislamiento del juez: la evaluación de acusaciones utiliza una llamada separada a Mistral con un mensaje de sistema dedicado, tokens de límite aleatorizados, marcadores de inyección eliminados. Las llamadas del juez nunca usan claves API proporcionadas por el jugador.

Aplicación del estrés: sujeción monotónica del lado del servidor: el estrés solo aumenta, máximo +1 por turno. Los umbrales de pistas son impuestos por el servidor. La IA no puede aumentar ni disminuir el estrés para acceder a puertas del juego.

Tokens de victoria: 128 bits aleatorios, comparación segura contra temporización, de un solo uso, TTL de 30 minutos. Puntuación calculada a partir de una instantánea de estadísticas del lado del servidor: los valores informados por el cliente se ignoran.

Seguridad de sesión: IDs aleatorios de 192 bits, bloqueos mutex, TTL de 1 hora, máximo 5000 sesiones con eliminación LRU. El modo con temporizador se fija en la creación.

Validación de TTS: requiere una sesión activa. El texto debe coincidir con un mensaje reciente del asistente. Previene el abuso de proxy TTS gratuito.

Defensa contra envenenamiento RAG: las tácticas aprendidas entre sesiones se filtran a través de detección de inyección y desinfección antes de la inclusión en el prompt.

Exportación de datos

Las partidas completadas se persisten en Supabase para análisis y mejora del modelo:

  • Datos completos del caso (incluyendo secretos), historial de conversación, resultado, estadísticas, detalles de acusación
  • Exportación de administrador: GET /api/export?limit=100&offset=0&outcome=win&difficulty=hard con cabecera Authorization: Bearer <EXPORT_SECRET>
  • CLI: EXPORT_SECRET=xxx npx tsx scripts/export-data.ts --output=data/export.jsonl

Diseño de sonido

  • Audio inmersivo: tic-tac de reloj ambiental, inquietud nerviosa en alto estrés, impactos dramáticos
  • Música de fondo con transición suave entre pools de menú y juego
  • Todos los efectos de sonido en mono 22kHz 48kbps MP3, <1s cada uno, con envolventes de fade por sonido
  • Controles de volumen maestro para música y efectos de sonido de forma independiente
  • La estabilidad de la voz de ElevenLabs disminuye con el estrés del sospechoso: la voz literalmente se degrada

Diseño

Estética noir de detective. Oscuro, minimalista, tipográfico. JetBrains Mono. Fondos de píxel art y retratos de sospechosos. Sin burbujas de chat: el diálogo aparece como texto estilizado en la escena.

Configuración de Supabase

Crea una tabla 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);

Tabla opcional game_exports para datos de entrenamiento:

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

Tabla opcional interrogation_patterns para aprendizaje entre sesiones:

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 — Modalidad Online, categoría "Todo Vale".

Criterios de evaluación: Creatividad/originalidad (lo más importante), potencial futuro, implementación técnica, calidad del pitch.

Premios especiales: Mejor Ambiente Mistral (AirPods), Mejor Voz AI (suscripción de 6 meses a ElevenLabs).

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

Por qué este proyecto

La mayoría de los proyectos de IA en hackathons son asistentes o chatbots. Esto invierte el guión: la IA no te ayuda, te miente. El jugador es adversarial al modelo, no colaborativo. Esto crea una interacción fundamentalmente diferente: estás buscando inconsistencias, aplicando presión y leyendo señales de comportamiento en lugar de pedir ayuda.

El juego también genera datos de entrenamiento. Cada sesión completada — preguntas realizadas, progresión del estrés, qué tácticas funcionaron, cuáles no — se puede exportar como JSONL. Esto crea un bucle de retroalimentación: juega, exporta los datos, ajusta el modelo, hazlo más difícil de atrapar.

Uso del ecosistema Mistral

  • Mistral Large 3 — cerebro IA del sospechoso (rol adversarial con salida JSON estructurada), generación de casos (escenarios de crimen procedurales), evaluación de acusaciones (llamada de juez separada)
  • Voxtral STT — transcripción de entrada de voz del jugador
  • Mistral Embeddings — similitud vectorial para coincidencia de patrones entre sesiones (aprendizaje RAG)

Potencial futuro

  • Ajustar Mistral con datos de juego exportados para crear sospechosos cada vez más difíciles
  • Modo multijugador: un jugador interroga, otro observa y aconseja
  • Editor de casos: escenarios creados por la comunidad con sospechosos personalizados
  • Aplicación móvil con voz siempre activa
  • Herramienta de entrenamiento para práctica de técnicas de interrogatorio reales

Creado por

Jason Poindexter — Participación en solitario, modalidad online desde Barcelona.

Descargar herramienta
NivelPistasTiempoComportamiento del sospechoso
Fácil25 minMentira obvia, nervioso
Medio37 minMentira detectable, sereno
Difícil49 minMentira sutil, hábil desviador
Experto510 minMentira profundamente oculta, manipulador