BurningTimesAi/프로젝트/수상한잡화점/개발/05_서버연동_현황_v1.md

5.3 KiB

서버 연동 현황 분석 — 수상한 잡화점

작성일: 2026-04-14 조사 범위: PlayFab, Firebase, IAP, ACTk, 클라이언트-서버 권한 분배 목적: C11(개발자 관점) 보안·안정성 점검

⚠️ Critical 3건 보류 중 (2026-04-14 PD님 지시) 서버 파트가 정비되기 전이므로 아래 "Critical 보안 이슈" 3건은 일시 보류. 서버팀 정식 가동 후 반드시 재기동하여 해결해야 하는 블로커급 이슈임을 명시. 메모리: project_shop_security_pending.md


요약

항목 상태
주 백엔드 PlayFab (Assets/Script/Server/ServerInfo.cs 허브)
Firebase 초기화 코드만, google-services.json 부재 → 비활성
전투 연산 권한 🔴 100% 클라이언트
AES 키 하드코딩 🔴 소스에 평문 존재
IAP 영수증 검증 🔴 주석처리되어 미구현
ACTk 적용 범위 🟡 필드 약 10개만 Obscured*
SpeedHack/TimeCheck Detector 미사용
C11 보안 판정 🔴 중대 보완 필요

백엔드 구성

PlayFab

  • 허브: Assets/Script/Server/ServerInfo.cs (싱글톤, DontDestroyOnLoad)
  • 주요 기능:
    • 로그인 (디바이스 ID 기반)
    • LoginResult, ServerData, ServerTime 관리
    • 12시간마다 자동 재로그인 (세션 유지)
    • ServerClass.csFC_* / SC_* 구조로 요청·응답 래핑
  • SOT 역할: 플레이어 계정, 프로그레션 저장, 메일, 재시작 데이터

Firebase

  • 초기화 코드 파편만 존재
  • google-services.json 없음 → Analytics / Crashlytics 모두 미동작
  • Package manifest에 Firebase 선언 없음

🔴 Critical 보안 이슈

1. 전투 데미지 연산이 100% 클라이언트

  • Actor.cs, PCActor.cs, MobActor.cs에서 HP/Shield/Buff 전부 클라 계산
  • 서버는 결과만 받음 → 클라 변조 시 서버 검증 불가
  • 영향: 랭킹·이벤트 보상 악용 가능, 출시 전 서버 재연산 구조 필수

2. AES 암호화 키 하드코딩

  • Assets/Script/My/CryptoUtil.cs (추정)에 평문 키 존재
    • Key: 7gT9KfL2xQ1bN4pV6sH8jD3zW0cR5mYq (32byte)
    • IV: aB3dE6gH9jK2mP5Q (16byte)
  • IL2CPP 빌드도 메모리 덤프로 추출 가능 → 사실상 무의미
  • 영향: 데이터 변조 방어선 상실

3. IAP 영수증 검증 미구현

  • 영수증 서버 검증 코드가 전부 주석처리
  • 클라이언트만 IAP 성공 판단 후 재화 지급 → 결제 우회 가능
  • 영향: 매출 직접 손실, 오픈 블로커급

🟡 보안 보완 현황

ACTk (AntiCheatToolkit)

  • 적용 범위: ObscuredInt / ObscuredLong 필드 약 10개
  • 미사용 기능:
    • SpeedHackDetector (시간가속 탐지)
    • TimeCheckDetector (디바이스 시간조작 탐지)
    • WallHackDetector
  • 개선 방향: 전투 스탯·재화·레벨 전면 Obscured* 적용, Detector 활성화

서버 권한 vs 클라이언트 권한 분배

영역 권한 위험도
로그인/세션 서버 (PlayFab)
재화·아이템 저장 서버
전투 결과 계산 🔴 클라이언트 Critical
스테이지 보상 지급 🔴 클라이언트 기반 Critical
IAP 영수증 검증 🔴 미구현 Critical
랭킹 점수 🔴 클라 제출 High
시간 동기화 서버 시간 수신

C11 판정

기준 상태
자원 효율성 12시간 재로그인, PlayFab 배치 호출 등 적절 🟡
코드 구조 직관성 ServerInfo 단일 허브로 집중됨
코드 범용성 PlayFab 직접 의존 → 추상화 없음 🔴 (→ 04_코어_범용성_분석_v1.md 누락 모듈과 동일, 신규 코어 06_신규코어_설계안_v1.md에서 해소 예정)
보안 건전성 위 3대 Critical 이슈 🔴

개발실 조치 제안 (우선순위)

🔴 P0 — 소프트 론칭(2026-06~07) 전 필수

  1. IAP 서버 검증 재구현 — PlayFab ValidateXXXReceipt API 사용, 블로커 해제
  2. 전투 결과 서버 재연산 — 최소한 스테이지 클리어 판정·보상 지급은 서버 검증
  3. AES 키 분리 — 런타임 유도(디바이스ID 해시 혼합) + 서버 전송 페이로드에 HMAC 서명

🟠 P1 — 소프트 론칭 직후

  1. ACTk 적용 확대 — 모든 재화·레벨·카드 보유 수량 Obscured* 전환
  2. SpeedHackDetector / TimeCheckDetector 활성화
  3. Firebase Crashlytics 재활성화google-services.json 주입, 크래시 수집 시작

🟡 P2 — 정식 출시 전

  1. INetworkService 추상화 레이어 (NerdNavisCore 누락 모듈) → PlayFab 의존 제거
  2. 세이브/로드 구조화 — PlayerPrefs → 암호화 JSON 구조로 전환
  3. 서버 재연산 범위 확대 — 덱 드래프트, 가챠 없음이지만 카드 획득 검증 필요

기획실 연관 (선행 인수인계 대조)

  • Q-P1 (터치 방어 쿨다운) / Q-P2 (몬스터 배치 비율) — 클라 전적 권한이므로 서버는 해당 데이터 검증 불가. 기획·개발 모두 클라 코드가 SOT.
  • Q-P3 (보스 10002 클리어 가능성) — 클라 전투 SOT 확인 → MobActor.cs + table_MonsterList.json 실제 수치로 검증 가능