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 for Social EngineeringWeb SecurityCTFSocial EngineeringMachine LearningLearning & EducationAI SecurityAdversarial AttackLabs & Practice
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 (온라인 트랙)을 위해 제작됨.

"미스트랄은 추론할 수 있습니다. 저는 거짓말을 하게 만들었습니다. 당신의 임무는 이를 적발하는 것입니다."

작동 방식

  1. 장소와 난이도를 선택합니다.
  2. 고유한 사건이 생성됩니다. (범죄, 용의자, 알리바이, 하나의 거짓말)
  3. 음성 또는 텍스트로 용의자를 심문합니다.
  4. 용의자는 스트레스에 반응하는 음성으로 캐릭터에 맞게 응답합니다.
  5. 압박 속에서 올바른 질문을 통해 단서를 수집합니다.
  6. 고발합니다. 별도의 판사 AI가 이를 평가합니다.
  7. 정답 = 자백. 오답 = 시도 1회 소진 (총 3회)

AI는 절대 자백하지 않도록 지시받았으며, 최대 스트레스 상태에서도 자백하지 않습니다. 용의자가 무너지도록 만드는 것이 아니라, 구체적이고 정확한 고발을 해야 승리합니다.

기술 스택

  • Next.js 16 — App Router, TypeScript, Tailwind v4
  • Mistral Large 3 — 용의자 AI 두뇌, 사건 생성, 고발 평가
  • 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=        # 선택 사항 — 특정 ElevenLabs 음성 ID
NEXT_PUBLIC_SUPABASE_URL=   # 필수 — Supabase 프로젝트 URL
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)

점수는 승리 시점에 동결된 통계에서 서버 측에서 계산됩니다. 클라이언트 값은 무시됩니다.

게임 종료

  • 승리: 체포 스탬프, 점차 공개되는 점수, 아케이드 스타일의 3글자 이니셜 입력, 리더보드
  • 패배 (고발): 도망, 사건 요약, 용의자 조롱, 거짓말 공개
  • 패배 (시간): 위와 동일하지만 시간 초과 결과 포함
  • 포기: AI가 생성한 거만한 발언(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당 속도 제한

보안

이 게임은 적대적 AI와 플레이어 입력을 대립시킵니다. 보안은 부차적인 기능이 아닌 핵심 기능입니다.

입력 정화: 30개 이상의 정규식 주입 패턴, 유니코드 정규화(NFKD), 제로 너비 문자 제거, base64 페이로드 탐지, 횡설수설/비영어 차단.

출력 스캔: AI 응답을 사건 비밀과 퍼지 매칭(40% 임계값, 불용어 필터링)으로 확인합니다. 유출된 응답은 회피 응답으로 대체됩니다.

판사 격리: 고발 평가는 전용 시스템 프롬프트, 무작위 경계 토큰, 제거된 주입 마커를 사용하는 별도의 Mistral 호출을 사용합니다. 판사 호출은 플레이어가 제공한 API 키를 사용하지 않습니다.

스트레스 강제: 서버 측 단조 증가 클램핑 — 스트레스는 오르기만 하며, 턴당 최대 +1입니다. 단서 임계값은 서버에서 강제됩니다. AI는 게임 게이트를 위해 스트레스를 급증시키거나 떨어뜨릴 수 없습니다.

승리 토큰: 128비트 무작위, 타이밍 안전 비교, 일회용, 30분 TTL. 점수는 서버 측 통계 스냅샷에서 계산됩니다. 클라이언트 보고 값은 무시됩니다.

세션 보안: 192비트 무작위 ID, 뮤텍스 잠금, 1시간 TTL, LRU 제거 방식 최대 5000 세션. 타이머 모드는 생성 시 고정됩니다.

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

사운드 디자인

  • 몰입형 오디오: 주변 시계 소리, 높은 스트레스 시 초조한 몸부림, 극적인 효과음
  • 메뉴와 게임 풀 간 크로스페이드가 있는 배경 음악
  • 모든 SFX는 모노 22kHz 48kbps MP3, 1초 미만, 사운드별 페이드 엔벨로프 포함
  • 음악과 SFX 각각에 대한 마스터 볼륨 컨트롤
  • 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 프로젝트는 어시스턴트나 챗봇입니다. 이 프로젝트는 대본을 뒤집습니다. AI가 당신을 돕는 것이 아니라, 당신에게 거짓말을 합니다. 플레이어는 모델과 협력 관계가 아닌 적대 관계에 있습니다. 이는 근본적으로 다른 상호작용을 만듭니다. 도움을 요청하는 대신, 불일치를 찾아내고 압력을 가하며 행동 신호를 읽는 것입니다.

또한 이 게임은 훈련 데이터를 생성합니다. 완료된 모든 세션(질문, 스트레스 진행, 효과적인 전술과 그렇지 않은 전술)은 JSONL로 내보낼 수 있습니다. 이는 피드백 루프를 만듭니다: 게임을 플레이하고, 데이터를 내보내고, 모델을 미세 조정하고, 더 잡기 어렵게 만듭니다.

Mistral 에코시스템 활용

  • Mistral Large 3 — 용의자 AI 두뇌 (구조화된 JSON 출력을 통한 적대적 역할극), 사건 생성 (절차적 범죄 시나리오), 고발 평가 (별도 판사 호출)
  • Voxtral STT — 플레이어 음성 입력 전사
  • Mistral Embeddings — 세션 간 패턴 매칭을 위한 벡터 유사도 (RAG 학습)

미래 가능성

  • 내보낸 게임 데이터로 Mistral을 미세 조정하여 점점 더 어려운 용의자 생성
  • 멀티플레이어 모드 — 한 플레이어는 심문하고, 다른 플레이어는 지켜보며 조언
  • 사건 편집기 — 커뮤니티 제작 시나리오와 맞춤형 용의자
  • 항시 음성 대기 기능을 갖춘 모바일 앱
  • 실제 심문 기술 연습을 위한 훈련 도구

제작자

Jason Poindexter — 바르셀로나에서 온라인 트랙 단독 참가.

도구 다운로드
레벨단서시간 제한용의자 행동
쉬움25분명백한 거짓말, 불안함
보통37분잡을 수 있는 거짓말, 침착함
어려움49분미묘한 거짓말, 능숙한 회피
전문가510분깊이 숨겨진 거짓말, 교묘함